プログラミング基礎 I
第十回 (2005年 6月 27日):
関数の作り方と使い方
http://www.sw.it.aoyama.ac.jp/2005/Programming%20Basics%20I/lecture11.html
© 2005 Martin
J. Dürst 青山学院大学
先週演習
- 月名のハッシュを作って、使う (日本語の旧月名
(睦月など) とか外国語の月名を使う)
- BMI
のデータのファイルを読み込んで、同じ人に複数の情報がある場合に警告を出す
- 同じファイルを二重ハッシュに読み込んで、ある人だけの
BMI を印刷する
- 自分の身の回りのデータをハッシュに納めて、面白い計算・処理に使う
関数の必要性
- 計算機の特性: 速くて確実な処理
- 繰り返しで同じ処理を何回でもできた
- しかし、違うところに同じ処理をしたいと思うと改めて書く必要がある
- 関数は同じ処理を違うところからできる仕組み
関数の定義
関数の使い方
- 名前を書いて、渡したいデータを括弧で囲む:
bmi (70, 1.70)
- 定義の前に使いたい場合には
&
の「関数冠詞」が必要:
&bmi (70, 1.70)
- 今までも Perl
が既に定義してるたくさんの関数を使った
関数へデータを渡す
- 渡すデータを「引数」(ひきすう) と言う
- 関数を使う方は括弧の中に書けば良い
- 関数内では引数は
@_
という配列に入っている
- 関数内では
shift
は引数無しの場合
@_
からデータを取り寄せている (関数の外は
@ARGV
から):
my $weight = shift;
- まとめての取り寄せも可能:
my ($weight, $height) = @_;
関数からデータを返す
- 返されるデータは「戻り値」(もどりち) と言う
return
文で戻り値が返せる:
return $bmi;
return
文がない場合は関数の最後に実行される文の値が返される
Perl の関数の特徴
- 引数の数が宣言できない。必要な場合に関数内でチェック。
- 引数の型は宣言できない。必要な場合に関数内でチェック。
- 引数の順番は宣言できない。できる場合に関数内でチェック。
- 引数と戻り値は「配列一個」となっているため、複数の配列を渡したい場合に工夫が必要。
関数の設計上の注意点
- ただプログラムで良くでてくる数行を関数とするのではなくて、できるだけ関係のあるまとまった処理を関数にする
- 関数内の変数を
my
もしくは local
で定義して、関数の外側の変数 (グローバル変数)
をできるだけ使わない
- 他人から使いやすい関数を目指す
演習
- BMI のプログラムを関数を使うように変更
- 他の今まで作ったプログラムを関数を使うように変更
- 年を渡されたら、個の年が閏年の場合に
1、そうでない場合に 0
を返す関数を作る。その関数を使う面白いプログラムを作る。
閏年の条件:
- 4 で割れる年は閏年
- 但し、100 で割れる年は閏年ではない
- 但し、400 で割れる年は閏年