【Ruby】における「文字列」と「シンボル」とは何なのか?

2018年2月26日

Rubyを学習していく中で、難解な「文字列」と「シンボル」について自分の中での整理をまとめている。

mojiretu = "あいうえお"

とやると変数mojiretuにあいうえおが代入される。

これは別に

mojimoji = "あいうえお"

でもよくて、左側の変数名はなんでも構わない。

文字というのは1文字のことで、それが複数文字になったものを「文字列」と呼ぶ。
これは他のプログラミング言語でも同じなので理解できる。

puts mojiretu

とやれば

あいうえお

が表示される。

変数に[]を付けることで、「何番目の文字」を取り出すことができる。

例えば上の例だと、

mojiretu[0]には”あ”
mojiretu[1]には”い”
mojiretu[2]には”う”
mojiretu[3]には”え”
mojiretu[4]には”お”

が入っている。なのでターミナルからirbコマンドで簡易的にRubyを動かしてみると

> puts mojiretu[0]
あ

> puts mojiretu[1]
い

> puts mojiretu[2]
う

> puts mojiretu[3]
え

> puts mojiretu[4]
お

こうなる。

代入もできるので

mojiretu[2]="し"
mojiretu[3]="て"
mojiretu[4]="る"

としてから

> puts mojiretu
あいしてる

となる。

これが文字列の動きになる。じゃぁ一方でシンボルについて自分の理解をまとめると。

:hoge とか :age とか「:」をつけるとこれがシンボルということになる。

シンボルは書き換えができない文字列と思えばよい。

a = :book
b = "manga"

とすると、aにはbookというシンボルが入っている。bにはmangaという文字列が入ってる。

b[0] = "s"

とやると、変数bの0番目には、mのところにsが代入できる。

>puts b
sanga

と表示される。

けど、

a[0] = "f"

とやると、aにはシンボルが入ってるので、これを書き換えできないためエラーが出る。

> a[0]="f"
NoMethodError: undefined method <code>[]=' for :book:Symbol
Did you mean?  []
        from (irb):72
        from /usr/local/rvm/rubies/ruby-2.4.1/bin/irb:11:in </code>&lt;main&gt;'

とのことから、シンボルは書き換えできない文字列と理解できる。(今のところは‥)