Ruby

Rubyのfrozen_string_literalを理解する

2019年10月15日

0
0

Railsのソースを見てたら下記のようなコードを見つけた。

# frozen_string_literal: true

 



これは一体なんなんだろうかと感じググって調べてみたらわかったので今日はこの # frozen_string_literal: true について書き残しておく。

ミュータブルとイミュータブル

そもそも変数にはミュータブルとイミュータブルな変数がある。これは、変数の中の値が変更可能か、もしくは不可能かの違いである。Rubyで例えると、以下のようなバージョンの場合、以下のように文字列を変更することができる。つまり、これはミュータブルな値と言える。

# ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
str = "a"
=> "a"
str << "bc"
=> "abc"
しかし、仮に下記のように変数をイミュータブル(変更できない)な値に変えることがRubyではできる。.freeze をすることで、文字列の変数をイミュータブル(変更できない)な値に変えることができた。

str = "a".freeze
=> "a"
str << "bc"
Traceback (most recent call last):
        1: from (irb):12
FrozenError (can't modify frozen String)
結論

 

 

結論

結論として、Railsのファイルの先頭に

# frozen_string_literal: true

 

があるときは、ファイル全体の文字列が frozenされると認識して良い。つまり、変更できな文字列が毎度定義されるということになる。

備考

ちなみに、文字列の変更と代入は全く別物でイミュータブルな変数に新しい値を代入して初期化することは可能である。それらは再代入できない値「定数」とは全く別物なのである。

 

Pocket
LinkedIn にシェア

  • この記事を書いた人
  • 最新記事

藤沢瞭介(Ryosuke Hujisawa)

りょすけと申します。18歳からプログラミングをはじめ、今はフロントエンドでReactを書いたり、AIの勉強を頑張っています。off.tokyoでは、ハイテクやガジェット、それからプログラミングに関する情報まで、エンジニアに役立つ情報を日々発信しています!

-Ruby

Copyright© off.tokyo , 2021 All Rights Reserved Powered by AFFINGER5.