English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby メソッド

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の 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クラスのオブジェクトを作成する必要はありません。

Ruby alias

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

番号付きのグローバル変数($1、$2、...)に別名を設定することは禁止されています。組み込みのグローバル変数を書き換えると重大な問題が発生する可能性があります。

文法

alias メソッド名 メソッド名
alias 全局変数 全局変数

オンラインサンプル

alias foo bar
alias $MATCH $&

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

Ruby undef

この文はメソッド定義を解除するために使用されます。undef はメソッド本体内に現れることができません。

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

undef メソッド名

オンラインサンプル

以下の例では、名前が指定された barのメソッド定義:

undef bar