Rubyで「?」を持つメソッドが見つかることがあります。そして「!」それらの終わりに、例えば:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
彼らの目的は何だろうと思っていましたか?それらは構文糖衣だけですか?
Rubyで「?」を持つメソッドが見つかることがあります。そして「!」それらの終わりに、例えば:
name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?
彼らの目的は何だろうと思っていましたか?それらは構文糖衣だけですか?
回答:
読みやすくするために「単なる糖衣」ですが、共通の意味があります。
!
、永続的または潜在的に危険な変更を実行します。例えば:
Enumerable#sort
並べ替えられたオブジェクトのバージョンを返しますEnumerable#sort!
。ActiveRecord::Base#save
保存に失敗した場合はfalseを返しActiveRecord::Base#save!
、例外が発生します。Kernel::exit
スクリプトを終了さKernel::exit!
せますが、すぐに終了し、終了ハンドラーをバイパスします。?
Booleanのメソッドは、コードの流れを文のようにさらに直感的にしif number.zero?
ます。「数値がゼロの場合」のように読みますが、if number.zero
奇妙に見えます。あなたの例でname.reverse
は、反転した文字列に評価されますが、name.reverse!
行の後にのみ、name
実際に変数は反転した名前を含みます。name.is_binary_data?
「name
バイナリデータですか?」のように見えます。
Array#clear
たとえば、を参照してください。配列をクリアします。配列をクリアすると、自然に変化します。それについては驚くべきことは何もありません。そのため、その名前からすでに明確になっています。ruby-forum.com/topic/176830#773946を参照してください。
疑問符は、メソッドがブール値を返すことを示しています。すでにここで答えました:
強打は、メソッドがオブジェクト自体に作用することを示します。すでにここで答えました:
-とは対照的に-ほとんどのプログラミング言語...
Rubyでは、メソッドの最後に疑問符または感嘆符を付けることができます。
慣例により、質問に答えるメソッド(つまり、Array#empty?はレシーバが空の場合にtrueを返します)は疑問符で終わります。
慣例により、潜在的に「危険な」メソッド(つまり、自分自身または引数を変更するメソッド、exit!など)は感嘆符で終わります。
From:http : //www.ruby-lang.org/en/documentation/ruby-from-other-languages/、セクションFunnyのメソッド名
?
メソッドは述語メソッドと呼ばれます。
注意してください、これは常にそうだとは限りません。たとえば、Ruby Array#concat http://docs.ruby-lang.org/en/2.0.0/Array.html#method-i-concatを例にとります。
ひどく火傷をする可能性がある場所は、次のようなものですMyActiveRecordModel.column_names.concat([url])
。その後、MyActiveRecordModelに関連する呼び出しは、MyActiveRecordModelの「url」の列を探してスローしようとします。
代わりに、連結を行う前にクローンを作成する必要があります。幸い、私のテストスイートはこれを検出しましたが、前向きです。