「!」を使用する必要がないようにブール関数を使用できますか? ブール関数 has_done_something があるとします。ユーザーがそのアクションを実行していない場合にのみ別のアクションを実行したいので、!has_done_something? または関数 has_not_done_something を書くことによって? . レールは何らかの方法を提供していると思いますか(またはこの機能を提供する必要がありますか)?
1 に答える
いいえ、目的が違います。感嘆符は多くのことを意味し、危険であることで知られています。それに代わるものは何もありません。やっていることが違うということを示すためです。
Ruby では、名前が ! で終わるメソッドを記述できます。(感嘆符または「バン」)。
標準メソッドでは、オブジェクト自体を変更するメソッドを示すためによく使用されますが、常にそうとは限りません。
私が言うときmutate itself
、それは、オブジェクト自体を割り当てていなくても、オブジェクト自体が変更されることを意味します。
これの非常に良い例は、Java にString
とがあることStringBuffer/StringBuilder
です。
StringBuffer/StringBuilder
オブジェクトは可変です。
ここも同じです。
では、 foo.downcaseとは何でしょう! および foo.downcase
は、他のオブジェクトへの割り当てを必要とせずにfoo.downcase!
、オブジェクト自体を小文字に変更します。foo
次のfoo.downcase
ようなオブジェクトに割り当てられていない限り、オブジェクトは変更されません: bar = foo.downcase
したがって、コード内で何か危険なことをしたい場合、特に同じ名前のメソッドが 2 つ存在し、そのうちの 1 つが他のメソッドよりも「危険」である場合に使用します。ただし、「危険」はほとんど何でも意味します。