新卒のときにチューターにリファクタリングしてもらったときの有用なメモがでてきたので公開する

art リファクタリング

  • 機能を変えずに良くすること

thought_balloon リファクタリングをする理由

  • o 読みやすくする
  • o バグを減らす
  • o テストしやすくする
  • x 短くする(かんちがいしないこと!)

memo

  • 1つのメソッドは1つの動作
  • 1つのクラスは1つの責務
  • メソッドはアルファベット順に並べる
  • tapメソッド

name_badge なまえ

  • 単数と複数を使い分ける
  • 変数は名詞にする
  • メソッド名は基本動詞にする

なまえの例

# organizations_members
org_members = @client.org_members('snowhalation')
list_members = org_members.map { |mem| mem[:login] }
  • list_membersは結局配列になる。
  • 動詞だとメソッドみたいにみえる
  • members_listという名詞にする
members_list = org_members.map { |mem| mem[:login] }

see_no_evil private

  • 外から呼ばないメソッドはprivateメソッドにする

koala 遅延初期化(lazy initialization)

  • メソッドが呼ばれたときにはじめて初期化する
    def octkit_client
      @octokit_client ||=
        Octokit::Client.new(access_token: ENV['PERSONAL_ACCESS_TOKEN'])
    end

beer tapメソッド

  • なにもしない
  • 全オブジェクトが使える
[1] pry(main)> 1.tap {|num| puts num}
1
=> 1
[2] pry(main)> 1.tap {|num| 50}
=> 1 

sparkles なにもしないtapを使ってクライアントの設定をする

    def octkit_client
      @octokit_client ||=
        Octokit::Client.new(access_token: ENV['PERSONAL_ACCESS_TOKEN']).tap do |c|
          c.auto_paginate = true # ココ!
        end
    end