このページの概要
putsなども関数
なにげなく呼んでいる puts も、関数です。 Ruby の関数はコマンドラインでコマンドを実行するときのように、関数 オプション1 オプション2 と実行することもできますし、C言語のように 関数(オプション1,オプション2) と呼ぶこともできます。 関数を作ってみる関数は def というキーワードで作成できます。 関数は基本的に「最初は小文字のアルファベット、あとは英数字と _ (アンダースコア)」な名前をつけることができます。慣習的に、小文字のアルファベットと _ で命名するといいでしょう。 以下のコードは my_func という関数を定義しています。 そして、for の繰り返しの中から関数を呼んでいます。
さて、my_func を puts のように my_func("me") とオプションを付けられるでしょうか?おそらく、エラーになるはずです。それは、def の行にはどこにもオプションを使うという記述がないからで、my_func はオプション無しで呼ばれると定義されてしまっているためです。 my_func("me") で呼び出した結果。引数の数が違うと怒られてしまいます。 //// -:7:in `my_func': wrong number of arguments (1 for 0) (ArgumentError) from -:7 from -:6 引数を受け取れるようにするには、以下のようにします。
def の末尾に (name) がついていますが、これは引数を1個使いますよ、という意味なのです。 そして、繰り返しでは 1~10の数字を渡していて、これが my_func で 「hello, 1」のように結合されて表示されるようになっています。問題は、このやり方だと引数無しで呼ぶと、 wrong number of arguments (0 for 1) (ArgumentError) こんな風に怒られてしまうことです。それを解決するには、デフォルト引数というものを使います。引数がなければ規定値はこの値にする、ということですね。
引数無しで呼ばれた my_func は 「hello, nanashi_san」と表示したはずです。 複数の引数引数を二つ以上準備するには、(引数1,引数2) のようにカンマで変数名を区切っていくだけです。 以下のサンプルはデフォルト引数を使っていますので、引数の数は 0 ~ 2 受け付けます。 最後の行は3つ引数をつけてありますが、引数の数のエラーになるためコメントアウトしてあります。
ローカル変数のスコープ、値のやりとりdef ~ end の間で使用している小文字からはじまる変数は、その関数専用(ローカル変数)です。 広域で使いたい変数は $ ではじまる変数で定義することで実現できます(グローバル変数)。 しかしながら、グローバル変数はアップデートの際に障害として立ちはだかることも多いので、引数で関数に値を入力して、「return 値」 という文で関数そのものが値を出力するようにしたほうがいいでしょう。
|