Rubyのメソッド


Ruby のメソッドは、他のプログラミング言語の関数に似ています。 1 つ以上の繰り返しステートメントを 1 つのユニットにバンドルするための Ruby メソッド。

メソッド名は小文字で始める必要があります。メソッド名を大文字で始めると、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 はエラーを表示します。

Example

#!/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 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"


このコードでは、パラメーター テストを受け入れるメソッド サンプルを宣言しました。ただし、このパラメータは可変パラメータです。これは、パラメーターがさまざまな数の変数を取ることができることを意味します。上記の例の出力結果は次のようになります。

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

クラスメソッド

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

メソッドのデフォルトの可視性とprivateフラグは、モジュールの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 をメソッド本体内に含めることはできません。

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

構文

undef 方法名

次の例では、barという名前のメソッドの定義を解除します。