Ruby超入門 2周目 CHAPTER7- 4 変数には見える範囲がある まで
『ゼロからわかる Ruby 超入門 (かんたんIT基礎講座) 』
github.com
最近はボーッとしてしまう時間が増え気味で、こんな時間からはてな書いてるkoujiです。こんばんは。眠くないような眠いようなそんな感じ。
ってことで今日はCHAPTER7の残りの振り返りをしていきまっす!
引数のデフォルト値
メソッドの引数にはデフォルト値を指定することが出来ちゃう。上のプログラムの場合はalc_orderの引数itemに"生中"を指定してるよ。(引数 = デフォルト値)って感じで指定してあげる。そうするとどうなるかっていうと、メソッド呼び出し時に引数を書かないとデフォルト値に指定してる"生中"が変数itemに代入されるんだね!で、引数を指定してあげるとデフォルト値は使われないよ。やっぱり最初はビールからだよね…
キーワード引数
見ての通り引数がitemとsizeの2つになったね。この場合だとメソッド呼び出し時も2つ書いてあげる必要があるんだけど、順番通りに書いてあげないとおかしなことになっちゃうよね。逆に書くとそのまんま逆になっちゃう。でもキーワード引数で書いてあげると順番は関係ないんだよね。itemは生でsizeは中みたいな感じ。書く量がふえちゃうけど便利かも。選択肢の1つとして覚えておこう…
ちなみにキーワード引数もデフォルト値の設定ができるよ。
こんな感じ。メソッド名(引数: デフォルト値, 引数)みたいな感じで書いてあげればオーケーだねー。もちろんデフォルト値は全ての引数に指定ができるよーん。
ローカル変数とスコープ
上のプログラムは普通に動くねー。
じゃーこれはどうでしょうか。
5:in `<main>': undefined local variable or method `text' for main:Object (NameError)
エラーになっちゃうよ!!!
なんでかっていうと、メソッドの中で定義した変数は、メソッドの外からは見えないようになってるんだよ。んでもってメソッドの実行が終わると、メソッドの内の変数と例えば上のプログラムだと文字列のファック!は破棄されちゃうらしい。
で、変数には見える範囲と寿命がある。で、このことを「スコープ」という。ここまで出てきた変数はスコープの範囲がもっとも狭いローカル変数ってやつねっ!
ちなみに逆はどうなんだろうって思うじゃん。メソッドの外で定義した変数は、メソッドの中から見えるのかな?って。やっぱり見えないんだねぇ。なので、メソッドの中で必要なオブジェクトは引数を使って渡すんだね!
ってことでCHAPTER7はこれで終わり!スコープとかローカル変数とか新たに出てきた感じだけど、スコープが面白いなぁって感じ。メソッド内で定義したものは外から見えないし、メソッドの外で定義したものは、中から見えない。こういうのも「へぇ〜」って感じで面白い。この面白さを表現する言葉がでてこないんだけど、面白いんだよ!!
ってことで今日はこの辺で〜!
もう夜中の1時じゃないか…