Ruby メソッド

Ruby のメソッドは、他のプログラミング言語の関数に似ています。Ruby のメソッドは、繰り返し使用される1つ以上の文を1つのユニットにまとめるために使用されます。

メソッド名は小文字で始める必要があります。大文字で始めると、Ruby はそれを定数として扱う可能性があり、呼び出しが正しく解析されない原因となります。

メソッドは呼び出しの前に定義する必要があります。そうしないと、Ruby は未定義のメソッド呼び出しの例外を発生させます。

構文

def method_name [( [arg [= default]]...[, * arg [, &expr ]])] expr.. end

したがって、次のように単純なメソッドを定義できます。

def method_name expr.. end

次のように、引数を受け取るメソッドを定義できます。

def method_name (var1, var2) expr.. end

引数にデフォルト値を設定できます。メソッド呼び出し時に必須の引数が渡されない場合はデフォルト値が使用されます。

def method_name (var1=value1, var2=value2) expr.. end

メソッドを呼び出すときは、次のようにメソッド名を使用するだけです。

method_name

ただし、引数を伴うメソッドを呼び出す場合は、メソッド名を書くときに引数も含める必要があります。例:

method_name 25, 30

引数を伴うメソッドを使用する最大の欠点は、呼び出し時に引数の数を覚えておく必要があることです。たとえば、3つの引数を受け取るメソッドに2つだけ渡すと、Ruby はエラーを表示します。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test(a1="Ruby", a2="Perl") puts "プログラミング言語は #{a1}" puts "プログラミング言語は #{a2}" end test "C", "C++" test

試してみる »

上記の例の実行出力結果は次のとおりです。

编程语言为 C
编程语言为 C++
编程语言为 Ruby
编程语言为 Perl

メソッドから値を返す

Ruby のすべてのメソッドは、デフォルトで値を返します。この返される値は、最後の文の値です。例:

例

def test i = 100 j = 10 k = 0 end

このメソッドを呼び出すと、最後に宣言された変数 k が返されます。

Ruby returnreturn 文

Ruby のreturnreturn 文は、Ruby のメソッドから1つ以上の値を返すために使用されます。

構文

return [expr[`,' expr...]]

2つ以上の式が与えられた場合、それらの値を含む配列が戻り値になります。式が与えられない場合、nil が戻り値になります。

例

return 或 return 12 或 return 1,2,3

次の例を見てください。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def test i = 100 j = 200 k = 300 return i, j, k end var = test puts var

試してみる »

上記の例の実行出力結果は次のとおりです。

100
200
300

可変長引数

2つの引数を持つメソッドを宣言したとします。そのメソッドを呼び出すときは、同時に2つの引数を渡す必要があります。

しかし、Ruby では引数の数が可変のメソッドを宣言できます。次の例を見てみましょう。

例

#!/usr/bin/ruby # -*- coding: UTF-8 -*- def sample (*test) puts "引数の数は #{test.length}" for i in 0...test.length puts "引数の値は #{test[i]}" end end sample "Zara", "6", "F" sample "Mac", "36", "M", "MCA"

試してみる »

このコードでは、引数 test を受け取るメソッド sample を宣言しました。ただし、この引数は可変長引数です。つまり、引数は異なる数の変数を取ることができます。上記の例の実行出力結果は次のとおりです。

参数个数为 3
参数值为 Zara
参数值为 6
参数值为 F
参数个数为 4
参数值为 Mac
参数值为 36
参数值为 M
参数值为 MCA

クラスメソッド

メソッドがクラスの外部で定義されている場合、メソッドはデフォルトで private とマークされます。private一方、クラス内で定義されている場合、デフォルトで public とマークされます。

メソッドのデフォルトの可視性とprivateマークは、モジュール(Module)のpublic 或 privatepublic/private によって変更できます。

クラスのメソッドにアクセスしたい場合、まずクラスをインスタンス化する必要があります。次に、オブジェクトを使用して、クラスの任意のメンバーにアクセスできます。

Ruby は、インスタンス化せずにメソッドにアクセスする方法を提供します。クラスメソッドを宣言してアクセスする方法を見てみましょう。

class Accounts def reading_charge end def Accounts.return_date end end

メソッド return_date がどのように宣言されるかはすでにわかっています。クラス名の後にピリオドを付け、ピリオドの後にメソッド名を続けて宣言します。次のようにクラスメソッドに直接アクセスできます。

Accounts.return_date

このメソッドにアクセスする場合、クラス Accounts のオブジェクトを作成する必要はありません。

Ruby aliasalias 文

この文は、メソッドまたはグローバル変数に別名を付けるために使用されます。別名はメソッド本体の中では定義できません。メソッドがオーバーライドされても、メソッドの別名はそのメソッドの現在の定義を保持します。

番号付きグローバル変数($1, $2, ...)に別名を付けることは禁止されています。組み込みのグローバル変数を上書きすると、深刻な問題を引き起こす可能性があります。

構文

aliasメソッド名 メソッド名aliasグローバル変数 グローバル変数

例

alias foo bar alias $MATCH $&

ここでは、bar の別名として foo を定義し、$& の別名として $MATCH を定義しました。

Ruby undefundef 文

この文は、メソッド定義を取り消すために使用されます。undefメソッド本体内に記述することはできません。

undef を使用することでundefとaliasクラスのインターフェースは親クラスから独立して変更できます。ただし、メソッド自身の内部からの呼び出しはプログラムを壊す可能性があることに注意してください。

undefメソッド名

例

次の例では、barという名前のメソッド定義を取り消します:

undef bar
その他の拡張