讃岐小僧のEngineering×Techメモ

未経験から挑戦中のプログラミングや、趣味の野球や狩猟について、その他、ビジネスやテクノロジーをテーマに様々なことをつぶやく場所です。

【Ruby】数字取り扱い時の注意点 | 暗黙変換しない

はじめに

今回の記事は前回の記事の続きとなります。

www.sanuki-kozo.com

それでは引き続き、数字取り扱い時の注意点を見ていきます。

Rubyでは暗黙変換はありません

小僧が他の言語に詳しいわけではありませんが、例えばSQLとかで数字っぽい文字データを指定せずに数字に変換してくれたり、文字から日付、日付から文字など、様々シーンで暗黙変換が行われる場合があります。

しかしながらRubyでは暗黙変換を行わないようになっているようです。

では実際に実行しながら見ていきます。

irb(main):025:0* 5 + "5"

TypeError: String can't be coerced into Fixnum
    from (irb):25:in `+'
    from (irb):25
    from /Users/user_name/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'

5(数字)+5(文字)を足してみた結果ですがエラーとなりました。

では次はto_iして実行してみます。

irb(main):026:0> 5 + "5".to_i
=> 10

to_iすると見事にエラーとならずに実行することができました。

文字列を数字に直結できない

Rubyでは暗黙変換がないため文字に数字を直結も明示的な指示がない限りできません。

下記は”number"と言う文字列と5という数字を連結させようとしていますがエラーとなってしまいます。

irb(main):031:0> "number" + 5

TypeError: no implicit conversion of Fixnum into String
    from (irb):31:in `+'
    from (irb):31
    from /Users/user_name/.rbenv/versions/2.3.1/bin/irb:11:in `<main>'

こちらも明示的にto_sすることにより連結が可能となります。

では早速実施してみます。

irb(main):039:0* "number" + 5.to_s
=> "number5"

"number5"と期待するデータが返ってきました。

式展開時にはto_sされる

下記のようにnumberに数字が格納されていてかつ、式展開を用いて数字と文字を連結したい場合は自動的にto_sが呼ばれるため明示的にto_sする必要はありません。

irb(main):005:0* number = 4
=> 4

irb(main):008:0* "#{number}番バッター"
=> "4番バッター"

※その他、数字取り扱いでは丸め誤差などが取り上げられていますが、今回は割愛します。

最後に

この記事はプロを目指す人のためのRuby入門から学んだことを参考にして内容が作られています。

Rubyを本格的に勉強したいと考えられている方は是非、下記リンクに書籍のリンクを貼っているので確認してみてください。