Ruby メソッド
Ruby のメソッドは、他のプログラミング言語の関数に似ています。Ruby のメソッドは、繰り返し使用される1つ以上の文を1つのユニットにまとめるために使用されます。
メソッド名は小文字で始める必要があります。大文字で始めると、Ruby はそれを定数として扱う可能性があり、呼び出しが正しく解析されない原因となります。
メソッドは呼び出しの前に定義する必要があります。そうしないと、Ruby は未定義のメソッド呼び出しの例外を発生させます。
構文
したがって、次のように単純なメソッドを定義できます。
次のように、引数を受け取るメソッドを定義できます。
引数にデフォルト値を設定できます。メソッド呼び出し時に必須の引数が渡されない場合はデフォルト値が使用されます。
メソッドを呼び出すときは、次のようにメソッド名を使用するだけです。
ただし、引数を伴うメソッドを呼び出す場合は、メソッド名を書くときに引数も含める必要があります。例:
引数を伴うメソッドを使用する最大の欠点は、呼び出し時に引数の数を覚えておく必要があることです。たとえば、3つの引数を受け取るメソッドに2つだけ渡すと、Ruby はエラーを表示します。
例
試してみる »
上記の例の実行出力結果は次のとおりです。
编程语言为 C 编程语言为 C++ 编程语言为 Ruby 编程语言为 Perl
メソッドから値を返す
Ruby のすべてのメソッドは、デフォルトで値を返します。この返される値は、最後の文の値です。例:
例
このメソッドを呼び出すと、最後に宣言された変数 k が返されます。
Ruby returnreturn 文
Ruby のreturnreturn 文は、Ruby のメソッドから1つ以上の値を返すために使用されます。
構文
2つ以上の式が与えられた場合、それらの値を含む配列が戻り値になります。式が与えられない場合、nil が戻り値になります。
例
次の例を見てください。
例
試してみる »
上記の例の実行出力結果は次のとおりです。
100 200 300
可変長引数
2つの引数を持つメソッドを宣言したとします。そのメソッドを呼び出すときは、同時に2つの引数を渡す必要があります。
しかし、Ruby では引数の数が可変のメソッドを宣言できます。次の例を見てみましょう。
例
試してみる »
このコードでは、引数 test を受け取るメソッド sample を宣言しました。ただし、この引数は可変長引数です。つまり、引数は異なる数の変数を取ることができます。上記の例の実行出力結果は次のとおりです。
参数个数为 3 参数值为 Zara 参数值为 6 参数值为 F 参数个数为 4 参数值为 Mac 参数值为 36 参数值为 M 参数值为 MCA
クラスメソッド
メソッドがクラスの外部で定義されている場合、メソッドはデフォルトで private とマークされます。private一方、クラス内で定義されている場合、デフォルトで public とマークされます。
メソッドのデフォルトの可視性とprivateマークは、モジュール(Module)のpublic 或 privatepublic/private によって変更できます。
クラスのメソッドにアクセスしたい場合、まずクラスをインスタンス化する必要があります。次に、オブジェクトを使用して、クラスの任意のメンバーにアクセスできます。
Ruby は、インスタンス化せずにメソッドにアクセスする方法を提供します。クラスメソッドを宣言してアクセスする方法を見てみましょう。
メソッド return_date がどのように宣言されるかはすでにわかっています。クラス名の後にピリオドを付け、ピリオドの後にメソッド名を続けて宣言します。次のようにクラスメソッドに直接アクセスできます。
このメソッドにアクセスする場合、クラス Accounts のオブジェクトを作成する必要はありません。
Ruby aliasalias 文
この文は、メソッドまたはグローバル変数に別名を付けるために使用されます。別名はメソッド本体の中では定義できません。メソッドがオーバーライドされても、メソッドの別名はそのメソッドの現在の定義を保持します。
番号付きグローバル変数($1, $2, ...)に別名を付けることは禁止されています。組み込みのグローバル変数を上書きすると、深刻な問題を引き起こす可能性があります。
構文
例
ここでは、bar の別名として foo を定義し、$& の別名として $MATCH を定義しました。
Ruby undefundef 文
この文は、メソッド定義を取り消すために使用されます。undefメソッド本体内に記述することはできません。
undef を使用することでundefとaliasクラスのインターフェースは親クラスから独立して変更できます。ただし、メソッド自身の内部からの呼び出しはプログラムを壊す可能性があることに注意してください。
例
次の例では、barという名前のメソッド定義を取り消します: