rubyの基礎(2)型変換的メソッド

どのプログラミング言語でも型の変換は重要です。例えば、整数2を文字列としての"2"にしたり、逆に文字列としての"100"を整数100に型変換することはよくあります。
rubyでは、to_i、 to_f、 to_s、 to_a、 to_h といった型変換的なメソッドが用意されています。

# -> Fixnum
irb> 1.to_i # 自分自身を返す 
=> 1
# -> Float 
irb> 1.to_f 
=> 1.0
# -> String 
irb> 1.to_s 
=> "1"
irb> "123".to_i 
=> 123
# ちなみに配列->ハッシュは 
irb> [[1,2],[3,4],[5,6]].to_h
=> {1=>2, 3=>4, 5=>6}
# ちなみにハッシュ->配列は 
irb> {'a'=>1,'b'=>2,'c'=>3}.to_a
=> [["a", 1], ["b", 2], ["c", 3]]

ちなみに文字列に整数を連結するとどうなるか? TypeErrorエラーになります。

irb> i = 'a'
=> "a"
irb> i + 3
TypeError: no implicit conversion of Fixnum into String
	from (irb):42:in `+'
	from (irb):42
	from /usr/bin/irb:11:in `<main>'

ここでは次のようにto_sメソッドで文字列に変換してから連結しないと動きません。

irb> s = 'a'
=> "a"
irb> s + 3.to_s
=> "a3" 

このようにrubyではメソッド実行で行う際の型の不一致はエラーになります。(+は連結するメソッドなのでこの処理の中で正しい型、つまりStringでないと、正しい処理ができないのです)


ちなみに、文字列を囲むダブルクォーテーション(")とシングルクォーテーション(')とは処理に違いがあります。

・ダブルクォーテーション ・・・ 文字列中の変数を変数値に置換し、エスケープシーケンスを特殊文字として解釈される。
・シングルクォーテーション ・・・ 文字列中の変数を変数値に置換せず、エスケープ文字はバックスラッシュ(\)を付けて表示される。

そのため内部的にダブルクォーテーションの方が高機能な処理を行っておりシングルクォーテー ションの方が処理が速いです。 変数の置換を行う必要が無い場合はシングルクォーテーションを使うようにしましょう。

irb> i = 10
irb> "#{i}"
=> "10"
irb> '#{i}'
=> "\#{i}"
irb> "\n"
=> "\n"
irb> '\n'
=> "\\n"

この記事が気に入ったらサポートをしてみませんか?