Class: RuboCop::Cop::Lecture::ExplainBangBang
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Lecture::ExplainBangBang
- Defined in:
- lib/rubocop/cop/lecture/explain_bang_bang.rb
Overview
!!はオブジェクトをtrueまたはfalseに変換する書き方です。
真偽反転の!が2回つかわれていると解釈すれば意味を取りやすいです。
nilまたはfalseのときはfalseへ、それ以外はtrueへ変換します。
!!は必ずtrueまたはfalseに変換するので、任意のオブジェクトやnilをメソッドから返したくないときによくつかわれます。
メソッド名の末尾が?で終わるメソッドはtrue/falseを返す慣習になっているので、!!が便利につかえる場面が多いです。
一方で、ifで判定するときなど、メソッドの戻り値としてつかわないときは!!をつけずにそのままつかうことが多いです。
Constant Summary collapse
- MSG =
"`!!`\u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092true\u307E\u305F\u306Ffalse\u306B\u5909\u63DB\u3059\u308B\u66F8\u304D\u65B9\u3067\u3059\u3002\n\u771F\u507D\u53CD\u8EE2\u306E!\u304C2\u56DE\u3064\u304B\u308F\u308C\u3066\u3044\u308B\u3068\u89E3\u91C8\u3059\u308C\u3070\u610F\u5473\u3092\u53D6\u308A\u3084\u3059\u3044\u3067\u3059\u3002\nnil\u307E\u305F\u306Ffalse\u306E\u3068\u304D\u306Ffalse\u3078\u3001\u305D\u308C\u4EE5\u5916\u306Ftrue\u3078\u5909\u63DB\u3057\u307E\u3059\u3002\n\n!!\u306F\u5FC5\u305Atrue\u307E\u305F\u306Ffalse\u306B\u5909\u63DB\u3059\u308B\u306E\u3067\u3001\u4EFB\u610F\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3084nil\u3092\u30E1\u30BD\u30C3\u30C9\u304B\u3089\u8FD4\u3057\u305F\u304F\u306A\u3044\u3068\u304D\u306B\u3088\u304F\u3064\u304B\u308F\u308C\u307E\u3059\u3002\n\u30E1\u30BD\u30C3\u30C9\u540D\u306E\u672B\u5C3E\u304C?\u3067\u7D42\u308F\u308B\u30E1\u30BD\u30C3\u30C9\u306Ftrue/false\u3092\u8FD4\u3059\u6163\u7FD2\u306B\u306A\u3063\u3066\u3044\u308B\u306E\u3067\u3001!!\u304C\u4FBF\u5229\u306B\u3064\u304B\u3048\u308B\u5834\u9762\u304C\u591A\u3044\u3067\u3059\u3002\n\n\u4E00\u65B9\u3067\u3001if\u3067\u5224\u5B9A\u3059\u308B\u3068\u304D\u306A\u3069\u3001\u30E1\u30BD\u30C3\u30C9\u306E\u623B\u308A\u5024\u3068\u3057\u3066\u3064\u304B\u308F\u306A\u3044\u3068\u304D\u306F!!\u3092\u3064\u3051\u305A\u306B\u305D\u306E\u307E\u307E\u3064\u304B\u3046\u3053\u3068\u304C\u591A\u3044\u3067\u3059\u3002\n"- RESTRICT_ON_SEND =
i[!].freeze
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
32 33 34 35 36 37 38 39 |
# File 'lib/rubocop/cop/lecture/explain_bang_bang.rb', line 32 def on_send(node) if node.send_type? && node.method_name == :! if node.children.any?{|n| n.respond_to?(:send_type?) && n.send_type? && n.method_name == :! } add_offense(node) return end end end |