English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Rubyのメソッドは他のプログラミング言語の関数に似ています。Rubyのメソッドは、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 "プログラミング言語は#{a"1" puts "プログラミング言語は#{a"2" end test "C", "C"++" test
以下の例の実行結果は以下の通りです:
プログラミング言語はCです プログラミング言語はCです++ プログラミング言語はRubyです プログラミング言語はPerlです
Rubyのメソッドはデフォルトで1つの値を返します。この返される値は最後のステートメントの値です。例えば:
def test i = 100 j = 10 k = 0 end
このメソッドを呼び出す際には、最後に宣言された変数kが返されます。
Rubyの return このステートメントは、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"
このコードでは、sampleメソッドを宣言し、testパラメータを受け取っています。ただし、このパラメータは可変長パラメータです。これは、パラメータが異なる数の変数を持つことができることを意味します。以下の例の実行結果は以下の通りです:
パラメータの数は 3 パラメータの値はZaraです パラメータの値は 6 パラメータの値はFです パラメータの数は 4 パラメータの値はMacです パラメータの値は 36 パラメータの値はMです パラメータの値はMCAです
メソッドがクラスの外部で定義されている場合、メソッドのデフォルトのマークは privateです。一方、メソッドがクラス内で定義されている場合、デフォルトでpublicマークとされます。
メソッドのデフォルトの可視性と private マークは、モジュール(Module)の public または private 変更。
クラスのメソッドにアクセスしたい場合、まずクラスをインスタンス化する必要があります。その後、オブジェクトを使用して、クラスのすべてのメンバーにアクセスできます。
Rubyは、オブジェクト化せずにメソッドにアクセスする方法を提供しています。クラスメソッドの宣言とアクセス方法を見てみましょう:
class Accounts def reading_charge end def Accounts.return_date end end
return_dateメソッドの宣言方法は既に知っています。それは、クラス名の後に点号を付け、その後メソッド名を続けることで宣言されます。クラスメソッドを直接アクセスする方法は以下のようになります:
Accounts.return_date
このメソッドにアクセスするには、Accountsクラスのオブジェクトを作成する必要はありません。
この文は、メソッドやグローバル変数に別名を設定するために使用されます。別名はメソッドの本体内で定義することはできません。メソッドがオーバーライドされた場合でも、メソッドの別名はメソッドの現在の定義を保持します。
番号付きのグローバル変数($1、$2、...)に別名を設定することは禁止されています。組み込みのグローバル変数を書き換えると重大な問題が発生する可能性があります。
alias メソッド名 メソッド名 alias 全局変数 全局変数
alias foo bar alias $MATCH $&
ここでは、bar に foo、$& に $MATCH としての別名を定義しました。
この文はメソッド定義を解除するために使用されます。undef はメソッド本体内に現れることができません。
を使用して undef および alias、クラスのインターフェースは親クラスから独立して変更できますが、内部メソッド呼び出し時にはプログラムを破壊する可能性がありますので注意してください。
undef メソッド名
以下の例では、名前が指定された barのメソッド定義:
undef bar