Open5

【rubocopからのお叱り】まとめ

snunsu:<esnunsu:<e

前提

  • ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]
  • ruby-rubocop v0.8.6
snunsu:<esnunsu:<e

Useless method definition detected.

結論

  • initializeで継承元のをそのまま継承する場合、initializeすら不要

概要

  • 継承を行うとき、superとだけ記述すれば継承元のinitializeをそのまま定義できる
  • しかし、superとだけ記述するならnitializeすら不要というエラー
def initialize
  super
end

意訳

  • 不要なメソッドがありますよ
snunsu:<esnunsu:<e

Redundant self detected.

結論

  • selfが不必要

概要

  • そもそもselfの使用用途は下記
  1. インスタンスメソッド内で self はそのメソッドを呼び出したインスタンス自体を指す。
  2. クラスメソッド内で self はそのクラスを指す。
  3. クラス内で直接書かれたコード(クラス定義)において self はそのクラス自体を指す。
  • 下記のコードの場合は「1」が該当する
  • Rubyではインスタンスメソッド内で直接インスタンス変数にアクセスできるため、self を使わずにインスタンス変数を参照できる
# ポケモンの抽象クラス
class Pokemon
  attr_accessor :name, :type1, :type2, :hit_point

  def initialize(name, type1, type2, hit_point)
    @name = name
    @type1 = type1
    @type2 = type2
    @hit_point = hit_point
  end

  def attack
    "#{self.name}のこうげき!"
  end
end

意訳

  • そのself、冗長や