Ruby のメソッド名には、大文字と小文字、数字、アンダースコア_
、および句読点記号!
, ?
,が含まれる場合があります=
。
メソッド名は、数字と文字で始めることはできず!
、最後にのみ表示できます。?
=
非 ASCII 文字をメソッド名に使用できますが、これは非常に紛らわしい状況につながる可能性があるため、一般的な方法ではありません。
必須ではありませんが、メソッド名を小文字で始めることをお勧めします。大文字で始まる名前は Ruby では定数であるためです。メソッドに定数名を使用することは引き続き可能ですが、インターピーターは名前を定数として検索するため、括弧なしで呼び出すことはできません。
def Capital
nil
end
Capital # NameError: uninitialized constant Capital
Capital() # => nil
メソッド名を定義する際に、非常に広く一貫して使用されている規則は次のとおりです。
メソッド名は完全に小文字で、_
名前に含まれる単語の区切りとしてアンダースコアが使用されます (例: Math::sqrt
, Array#each_index
, ...)。
述語?
の最後の文字は疑問符です (例: Array#empty?
, Hash#has_key?
, ...)。通常、述語はブール値を返しますが、常にそうであるとは限りません。これらのメソッドは、nil
またはfalse
述語が false と評価された場合はその他の値を返す必要があるだけです (たとえば、ファイルが存在しない場合はファイルのサイズをFile::size?
返し、それ以外の場合はファイルのサイズを返します)。 )。nil
Integer
呼び出されたオブジェクトの状態を変更するメソッド、または異常な動作をするメソッドには、!
最後の文字として感嘆符があります。このメソッドは、通常、他のメソッドの破壊的バージョンまたはインプレース バージョンであるため、ミューテーターと呼ばれることがあります (例: Array#sort!
、Array#slice!
...)。
セッター=
の最後の文字は等号です (例: Array#[]=
, ...)。Ruby インターピーターは、setter メソッドを呼び出すためのシンタックス シュガーを提供します。
a = [4, 5, 6]
a[0] = 3 # Shorthand for a.[]=(0, 3)
Ruby では、演算子記号をメソッド名として使用して演算子を定義することもできます。
╔═══════════════════════════╦═════════════════════════════════════════════╦═══════╗
║ Operators (by precedence) ║ Operations ║ Arity ║
╠═══════════════════════════╬═════════════════════════════════════════════╬═══════╣
║ ! ~ + ║ Boolean NOT, bitwise complement, unary plus ║ 1 ║
║ ║ (define with method name +@, Ruby 1.9+) ║ ║
║ ║ ║ ║
║ ** ║ Exponentiation ║ 2 ║
║ ║ ║ ║
║ - ║ Unary minus (define with method name -@) ║ 1 ║
║ ║ ║ ║
║ * / % ║ Multiplication, division, modulo ║ 2 ║
║ ║ ║ ║
║ + - ║ Addition, subtraction ║ 2 ║
║ ║ ║ ║
║ << >> ║ Bitwise shift ║ 2 ║
║ ║ ║ ║
║ & ║ Bitwise AND ║ 2 ║
║ ║ ║ ║
║ | ^ ║ Bitwise OR, Bitwise XOR ║ 2 ║
║ ║ ║ ║
║ < <= => > ║ Ordering ║ 2 ║
║ ║ ║ ║
║ == === != =~ !~ <=> ║ Equality, pattern matching, comparison ║ 2 ║
╚═══════════════════════════╩═════════════════════════════════════════════╩═══════╝
単項演算子メソッドには引数が渡されません。二項演算子メソッドには引数が渡され、それと上で動作しself
ます。
演算子のアリティに厳密に従うことが重要です。異なる引数 (2 つの引数を取るメソッドなど) で演算子メソッドを定義することは可能+
ですが、Ruby では演算子構文でメソッドを呼び出すことはできません (ただし、ドット構文では機能します)。
演算子の元のセマンティクスにできる限り従うことをお勧めします。演算子の元の意味を知っている人にとっては、演算子がユーザー定義クラスでどのように機能するかを直感的に理解できるはずです。
この言語は、配列やハッシュ値にアクセスするために通常使用される特別な非 operatorメソッドの構文糖衣も提供します。[]
メソッドは、[]
任意のアリティで定義できます。
順序付け、等価、比較、およびパターン マッチングを除く、テーブル内のすべての二項演算子について、Ruby は省略代入の省略形も提供します (たとえば、x += y
に展開しx = x + y
ます)。それらをメソッドとして定義することはできませんが、ベースとなる演算子を定義して動作を変更できます。
これらの文字は、通常のメソッド名の中で使用することはできません (たとえばdo&print
、またはstart-up
有効なメソッド名ではありません)。