Ruby-methods

提供:Dev Guides
移動先:案内検索

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

def test(a1 = "Ruby", a2 = "Perl")
   puts "The programming language is #{a1}"
   puts "The programming language is #{a2}"
end
test "C", "C++"
test

これは、次の結果を生成します-

The programming language is C
The programming language is C++
The programming language is Ruby
The programming language is Perl

メソッドからの戻り値

Rubyのすべてのメソッドはデフォルトで値を返します。 この戻り値は、最後のステートメントの値になります。 たとえば-

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

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

Rubyのreturnステートメント

rubyの_return_ステートメントは、Rubyメソッドから1つ以上の値を返すために使用されます。

構文

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

3つ以上の式が指定されている場合、これらの値を含む配列が戻り値になります。 式が指定されていない場合、nilが戻り値になります。

return

OR

return 12

OR

return 1,2,3

この例を見てください-

#!/usr/bin/ruby

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

def sample (*test)
   puts "The number of parameters is #{test.length}"
   for i in 0...test.length
      puts "The parameters are #{test[i]}"
   end
end
sample "Zara", "6", "F"
sample "Mac", "36", "M", "MCA"

このコードでは、1つのパラメーターテストを受け入れるメソッドサンプルを宣言しています。 ただし、このパラメーターは可変パラメーターです。 これは、このパラメーターが任意の数の変数を受け取ることができることを意味します。 したがって、上記のコードは次の結果を生成します-

The number of parameters is 3
The parameters are Zara
The parameters are 6
The parameters are F
The number of parameters is 4
The parameters are Mac
The parameters are 36
The parameters are M
The parameters are MCA

クラスメソッド

メソッドがクラス定義の外部で定義されている場合、そのメソッドはデフォルトで_private_としてマークされます。 一方、クラス定義で定義されたメソッドは、デフォルトでパブリックとしてマークされます。 メソッドのデフォルトの可視性と_private_マークは、モジュールの_public_または_private_によって変更できます。

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

Rubyを使用すると、クラスをインスタンス化せずにメソッドにアクセスできます。 クラスメソッドがどのように宣言されアクセスされるかを見てみましょう-

class Accounts
   def reading_charge
   end
   def Accounts.return_date
   end
end

メソッドreturn_dateの宣言方法を参照してください。 クラス名の後にピリオドが続き、その後にメソッドの名前が続いて宣言されます。 次のように、このクラスメソッドに直接アクセスできます-

Accounts.return_date

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

Rubyエイリアスステートメント

これにより、メソッドまたはグローバル変数にエイリアスが与えられます。 エイリアスはメソッド本体内で定義できません。 メソッドのエイリアスは、メソッドがオーバーライドされた場合でも、メソッドの現在の定義を保持します。

番号付きグローバル変数($ 1、$ 2、…​)のエイリアスを作成することは禁止されています。 組み込みのグローバル変数をオーバーライドすると、深刻な問題が発生する可能性があります。

構文

alias method-name method-name
alias global-variable-name global-variable-name

alias foo bar
alias $MATCH $&

ここで、barのfooエイリアスを定義しました。$ MATCHは$&のエイリアスです。

Ruby undefステートメント

これにより、メソッド定義がキャンセルされます。 _undef_はメソッド本体に表示できません。

_undef_および_alias_を使用することにより、クラスのインターフェイスをスーパークラスとは独立して変更できますが、selfの内部メソッド呼び出しによってプログラムが破損する可能性があることに注意してください。

構文

undef method-name

_bar_と呼ばれるメソッドの定義を解除するには、次のようにします-

undef bar