1. ホーム
  2. ruby

[解決済み] メソッド名の最後にある「!」や「?」は何のため?

2022-11-06 19:11:27

質問

Rubyのメソッドの末尾に"?"や"!"が付いているものを時々見かけます。

name = "sample_string"
name.reverse
name.reverse!
name.is_binary_data?

これらの目的は何なのでしょうか?彼らは単なる構文上の糖衣なのでしょうか?

どのように解決するのですか?

読みやすくするために糖衣をかけただけですが、共通の意味があります。

  • で終わるメソッド ! 永続的または潜在的に危険な変更を行う 例えば
    • Enumerable#sort はオブジェクトのソートされたバージョンを返しますが Enumerable#sort! はその場でソートします。
    • Railsでは ActiveRecord::Base#save は保存に失敗した場合に false を返しますが ActiveRecord::Base#save! は例外を発生させます。
    • Kernel::exit はスクリプトを終了させますが Kernel::exit! はどんな終了ハンドラもバイパスしてすぐに終了します。
  • で終わるメソッドは ? ブール値を返す を返すので、コードの流れがさらに直感的に文のようになります -。 if number.zero? は "数字がゼロの場合" のように読み取れますが if number.zero は奇妙に見えるだけです。

あなたの例では name.reverse は反転した文字列として評価されますが、それは name.reverse! の行は name 変数が実際に を含む を含んでいます。 name.is_binary_data? は "のように見える。 name はバイナリデータですか?"となります。