今回は、各変数や定数などのデータ型を
指定した型に変換する方法についてご紹介していきます。
型変換の記述方法については変数と定数で違いはありません。どちらも同じ記述方法で型変換を行うことができます。
データ型の変換(キャストともいわれる)はよく利用される記述なのでしっかりと学習して利用できるようにしておきましょう。
変数と定数をおさらい
データ型の変換について学習する前に変数と定数の違いや仕様について簡単におさらいをしていきましょう。
『それくらい知っているよ!』って人は読み飛ばしていただいて大丈夫です!
変数(定数)とは
文字列や数値などをしまっておくことのできる箱のことです。
各箱に名前を付けて任意の値を格納することができ、使用したいタイミングで自由に呼び出して使うことができます。
下記の例では変数box1に文字列の”ドックフード”を格納して、定数のBox2には同様に文字列として”お皿”を格納しています。
そして、それぞれ値を格納した変数と定数を文字列と結合して出力しています。
#変数としてbox1を作成して中には文字列"ドックフード"を格納します。 box1 = "ドッグフード" #定数としてBox2を作成して中には文字列"お皿"を格納します。 Box2 = "お皿" puts "#{box1}を#{Box2}に入れる" #出力結果 #ドッグフードをお皿に入れる
変数と定数の違いとしては大きく分けて2点あります。
1.宣言した変数名(定数名)の頭文字が大文字か小文字かで区別されています。
- 頭文字が小文字であれば変数として認識される ⇒ box1
- 頭文字が大文字であれば定数として認識される ⇒ Box2
2.変数か定数かで値の再格納ができるかどうかが異なる。
- 定数は中身を入れ替えることはできない ⇒ 文字列”お皿”を入れたら入れ替えは不可
- 変数は中身を自由に入れ替えることができる ⇒ 文字列”キャットフード”を入れてもOK
上記の通り、変数名(定数名)の頭文字によってどちらになるかは区別されており、変数か定数かで使用方法に若干の差が出てくることがわかります。
ちなみにですが、変数は好きな値を自由に入れ替えることができますが、値を上書きしかできません。
そのため、もともと入っていた文字列”ドックフード”は消失してしまうことに注意しておきましょう。
変数(定数)のデータ型はいつ決まるのか
変数や定数のデータ型が決まるタイミングは値を格納する際に決定されます。
下記の例を見てみましょう
#変数としてbox1を作成して中には文字列"キャットフード"を格納します。 box1 = "キャットフード" #定数としてBox2を作成して中には整数10を格納します。 Box2 = 10
この場合、各変数と定数のデータ型は以下の通りです。
- 変数box1 ⇒ String型(文字列型)
- 定数Box2 ⇒ Integer型(整数型)
このように格納された値によって変数や定数のデータ型は異なります。
注意点としては整数10をダブルクォーテーション(“”)で囲った場合には
Integer型(整数型)ではなくString型(文字列型)と認識されてしまうので気を付けましょう。
変数や定数についての詳細な解説は下記記事をご覧ください。
データ型の変換方法
変数(定数)のおさらいもできましたので、本題のデータ型の変換方法について紹介していきます。
データ型変換の基本書式
オブジェクト名.メソッド名
データ型の変換は対象とするオブジェクトに対してドット(.)で区切ってメソッド名を紐づけることで利用することができます。
データ型を変換するには下記のメソッドを使用します。
メソッド名 | 説明 | 使用方法 |
---|---|---|
to_i | 文字列型を整数型に変換する | hensu.to_i 文字列オブジェクト.to_i |
to_s | 整数型を文字列型に変換する | hensu.to_s もしくは 整数オブジェクト.to_i |
使用方法に記載されているオブジェクトとは、整数オブジェクト(1,2,3などの数値)や文字列オブジェクト(ダブルクォーテーションでくくった文字列)のことです。
データ型の変換は基本的に変数(定数)を利用して行われることが圧倒的に多いですが、変数(定数)に格納していない生の値にも直接紐づけてデータ型変換を行うことができます。
ちなみに、変数もオブジェクトの一つとなります。
文字列型を整数型に変換する
文字列型の変数(定数)を整数型に変換する方法についてご紹介していきます。
後述の説明は変数を使用して解説をしていますが、定数についても記述方法は同じなので定数でのデータ型変換を行いたい場合は定数に置き換えて確認をお願いいたします。
データ型変換を行っていない誤った記述
#変数dogsに文字列として"5"を格納します dogs = "5" #変数の値は"5"なので 5 + 5 = 10 になるとおもいきや puts dogs + 5 #出力結果 #:5:in `+': no implicit conversion of Integer into String (TypeError) # from p.rb:5:in `<main>'
上記の出力結果ではエラーとなってしまいました。これは文字列の”5″と整数の5で計算を行おうとしてしまったためシステム側から
『整数型と文字列型ではデータ型が違うから計算できないよ!』
と怒られてしまいました。
このような事象を回避するためのデータ型変換を行った記述方法は下記のとおりです
#変数dogsに文字列として"5"を格納します dogs = "5" #変数dogsの後に.to_iを紐づけています puts dogs.to_i + 5 #出力結果 #10
これで正しく計算をすることができました。
変数(定数)を利用しない文字列オブジェクトを利用した記述は以下の通りです。
#変数を利用せずに文字列型オブジェクト"5"を整数型に変換しています puts "5".to_i + 5 #出力結果 #10
上記の場合でもデータ型変換は正常に行われており、出力結果は10と表示されました。
このようにデータ型変換は変数(定数)だけではなく文字列型オブジェクトに直接紐づける形でも利用することができます。
ただし、直接の値の変換はあまり利用することはないので『こんなこともできるんだなあ』くらいに認識してもらえれば大丈夫です。
整数型を文字列型に変換する
整数型の変数(定数)を文字列型に変換する方法についてご紹介していきます。
上記同様に後述の説明は変数を使用して解説をしていますが、定数についても記述方法は同じなので定数でのデータ型変換を行いたい場合は定数に置き換えて確認をお願いいたします。
データ型変換を行っていない誤った記述
#変数catsに整数の5を格納します cats = 5 #変数の値は5なので文字列結合されて出力結果は"猫が5匹、通り過ぎて行った。"となるはずが・・・ puts "猫が" + cats + "匹、通り過ぎて行った。" #出力結果 #:5:in `+': String can't be coerced into Integer (TypeError) # from p.rb:5:in `<main>'
上記の出力結果ではエラーとなってしまいました。これは整数の5と文字列の結合を行おうとしてしまったためシステム側から
『整数型と文字列型ではデータ型が違うから文字列結合はできないよ!』
と怒られてしまいました。
このような事象を回避するためのデータ型変換を行った記述方法は下記のとおりです
#変数catsに整数の5を格納します cats = 5 #変数の値は5なので文字列結合されて出力結果は"猫が5匹、通り過ぎて行った。"となるはずが・・・ puts "猫が" + cats.to_s + "匹、通り過ぎて行った。" #出力結果 #猫が5匹、通り過ぎて行った。
これで正しく文字列同士として結合を行うことができました。
変数(定数)を利用しない整数オブジェクトを利用した記述は以下の通りです。
#変数を利用せずに整数型オブジェクト10を文字列型に変換しています puts "猫が" + 10.to_s + "匹、通り過ぎて行った。" #出力結果 #猫が10匹、通り過ぎて行った。
上記の場合でもデータ型変換は正常に行われており、期待通りの結果が出力されました。
前述した通り文字列から整数への変換だけではなく、整数から文字列への変換も直接的に整数オブジェクトに紐づけて行うことができます。
コチラも利用頻度は低いのであまり意識する必要はありません。