Quantcast
Channel: Ruby on Railsの記事一覧|TechRacho by BPS株式会社
Viewing all articles
Browse latest Browse all 1406

Rails tips: 定数をfreezeして高速化するリファクタリング(翻訳)

$
0
0

概要

原著者の許諾を得て翻訳・公開いたします。

Rails tips: 定数をfreezeして高速化するリファクタリング(翻訳)

国コードを1つ受け取って国名を返す、非常にシンプルなRubyメソッドで考えてみましょう。多くの人、特にRubyを始めて間もない方は以下のようなコードを書くでしょう。

class SampleClass
  def country_name(country_code:)
    mappings = {
      'us' => 'USA',
      'de' => 'Germany'
    }

    mappings[country_code]
  end
end

対応付けをメソッドの外に移動することで、コードがより読みやすくなります。または別のメソッドに切り出しても構いません。定数化しておくとさらによくなりますが、定数をfreezeしておけばメモリ使用量も少し節約できるので完璧です。

class SampleClass
  COUNTRY_CODES_MAPPINGS = {
    'us' => 'USA',
    'de' => 'Germany'
  }.freeze

  def country_name(country_code:)
    COUNTRY_CODES_MAPPINGS[country_code]
  end
end

定数をfreezeしないと値が変更されてしまう可能性がありますが、freezeすることで変更を防止できます(RuntimeErrorが表示されます)。一般に、freezeすることでメモリアロケーションが削減されるため、メモリ使用量を節約できます。

Ruby 2.2で興味深いのは、ハッシュのキーに使われる文字列リテラルが自動的にfreezeされる点です。

このトリックを教えてくれた同僚のDarekに感謝いたします。


RSpec & TDDの電子書籍を無料でダウンロード

もっと稼ぎたい方や会社をさらに発展させたい方へ: テスティングのスキルの重要性にお気づきでしょうか?テストを正しく書き始めることが、唯一のファーストステップです。無料でダウンロードいただける私の書籍『RSpec & Test Driven Developmentの無料ebook』をどうぞお役立てください。

関連記事

ベテランRubyistがPythonコードを5倍速くした話(翻訳)

Rubyのシンボルをなくせるか考えてみた(翻訳)


Viewing all articles
Browse latest Browse all 1406

Latest Images

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

Trending Articles



Latest Images

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭

赤坂中華 わんたん亭