Ruby データ型
データ型(Data Type)は、変数(Variable)が保持する値の種類を決定づけるコアな概念である。
動的型付け(Dynamic Typing)言語である Ruby では、変数のデータ型を明示的に宣言する必要はない。Ruby のインタプリタ(Interpreter)が、変数にアサイン(代入)された値に基づいてデータ型を自動推論(インファー)する。
本章では、Ruby における3つのコアなデータ型:ナンバー(Numbers)、ストリング(Strings)、およびブーリアン(Booleans)について探求していく。
1. Ruby におけるナンバー (Numbers)
Ruby におけるナンバーは数値を表現するために使用され、主に インテージャー(Integers:整数)と フロート(Floating-Point Numbers:浮動小数点数)の2つの大きなカテゴリに分類される。
1.1 インテージャー (Integers)
インテージャーは、小数部分を持たない完全な数値である。
(注:Ruby 2.4 以前、インテージャーは Fixnum と Bignum に分かれていた。しかしバージョン 2.4 以降、これらは単一の Integer クラスに統合された。メモリサイズのハンドリングは Ruby が自動で行うため、これらを意識して区別する必要はない。)
# インテージャーのサンプル
age = 30
quantity = 100
negative_number = -5インテージャーに対しては、加算、減算、乗算、除算、モジュロ(剰余)などの様々な算術オペレーション(Arithmetic Operations)を実行できる。
a = 10
b = 5
sum = a + b # 加算: 15
difference = a - b # 減算: 5
product = a * b # 乗算: 50
quotient = a / b # 除算: 2 (注意:インテージャーの除算は小数部分が切り捨てられる)
modulo = a % b # モジュロ (剰余): 01.2 フロート
フロートは、小数部分を持つ数値である。これらは Float クラスのインスタンスとなる。
# フロートのサンプル
price = 19.99
temperature = 25.5
pi = 3.14159フロートの算術オペレーションはインテージャーと同様だが、演算結果にも小数部分が保持される。
x = 10.0
y = 3.0
sum = x + y # 加算: 13.0
difference = x - y # 減算: 7.0
product = x * y # 乗算: 30.0
quotient = x / y # 除算: 3.33333333333333351.3 よく使われる数値オペレーションのメソッド
Ruby はナンバーを処理するための豊富なビルトインメソッド(Built-in Methods)を提供している。以下は非常に有用なメソッドの一部である:
abs: 数値の絶対値をリターンする。round: フロートを最も近いインテージャーに四捨五入する。floor: 切り捨て(その数値以下の最大のインテージャーをリターンする)。ceil: 切り上げ(その数値以上の最小のインテージャーをリターンする)。
number = -7.5
absolute_value = number.abs # 絶対値: 7.5
rounded_value = number.round # 四捨五入: -8 (負の数の四捨五入ルールに注意)
floor_value = number.floor # 切り捨て: -8
ceil_value = number.ceil # 切り上げ: -72. Ruby におけるストリング (Strings)
ストリングはキャラクター(文字)のシーケンスを表す。これらは String クラスのインスタンスであり、テキストデータのストアとオペレーションに使用される。ストリングをクリエイトするには、シングルクォート (') または ダブルクォート (") を使用する。
2.1 シングルクォート・ストリング
シングルクォート・ストリングは、インプットしたコンテンツをほぼそのままアウトプットする。パースされるエスケープキャラクターは \' (シングルクォートのアウトプット) と \\ (バックスラッシュのアウトプット) の2つのみである。
# シングルクォート・ストリングのサンプル
name = 'Alice'
message = 'Hello, world!'
escaped_quote = 'これは \'シングルクォート\' ストリングです。'
escaped_backslash = 'これはバックスラッシュです:\\'2.2 ダブルクォート・ストリングとストリング・インターポレーション
ダブルクォート・ストリングはよりパワフルである。複数のエスケープキャラクター(\n でのニューライン(改行)、\t でのタブなど)をサポートしているだけでなく、最も重要な機能として ストリング・インターポレーション (String Interpolation) をサポートしている。
ストリング・インターポレーションは、#{} シンタックスを使用することで、Ruby エクスプレッション(式)の評価結果を直接ストリング内にエンベッド(埋め込み)することを可能にする。
# ダブルクォート・ストリングのサンプル
name = "Bob"
greeting = "Hello, #{name}!" # ストリング・インターポレーション:結果は "Hello, Bob!"
newline = "これは1行目です\nこれは2行目です" # 複雑なインターポレーション
age = 30
message = "私は #{age} 歳です。"
x = 5
y = 10
sum_message = "#{x} プラス #{y} の結果は #{x + y} です。" # 内部で直接算術オペレーションが可能2.3 よく使われるストリング・オペレーション
- コンカチネーション (Concatenation): 複数のストリングを連結する(+ オペレーターを使用)。
- サブストリング (Substring): ストリングの一部をエクストラクト(抽出)する(インデックスの範囲を使用)。
- レングス (Length): ストリングに含まれるキャラクターの数を取得する(
.lengthメソッドを使用)。 - 大文字・小文字のコンバージョン (Case Conversion): 文字の大文字と小文字をトグルする(
.upcaseまたは.downcaseを使用)。
first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name # コンカチネーション: "John Doe"
substring = full_name[0..3] # サブストリング (インデックス 0 から 3): "John"
length = full_name.length # レングス: 8
uppercase = full_name.upcase # 大文字へのコンバージョン: "JOHN DOE"
lowercase = full_name.downcase # 小文字へのコンバージョン: "john doe"3. Ruby におけるブーリアン (Booleans)
ブーリアンはロジカル(論理的)な真(True)または偽(False)、すなわち true または false を表す。これらはそれぞれ TrueClass と FalseClass のインスタンスである。
ブーリアンはプログラミングにおけるディシジョン・メイキング(意思決定)の基盤であり、条件制御やロジカル・オペレーションで広く活用される。
# ブーリアンのサンプル
is_valid = true
is_empty = false3.1 ロジカル・オペレーター (Logical Operators)
Ruby はブーリアンを組み合わせてオペレーションを実行するためのロジカル・オペレーターを提供している:
&&(ロジカル AND): 両側のオペランドがどちらもtrueの場合にのみtrueをリターンする。||(ロジカル OR): 両側のオペランドのうち、少なくとも1つがtrueであればtrueをリターンする。!(ロジカル NOT): オペランドの値を反転させる(trueはfalseに、falseはtrueになる)。
a = true
b = false
result_and = a && b # false (true AND false)
result_or = a || b # true (true OR false)
result_not_a = !a # false (NOT true)3.2 比較オペレーター
比較オペレーターは2つの値を比較し、ブーリアンの結果(true または false)をリターンする。
==: 等しい!=: 等しくない>: より大きい<: より小さい>=: 以上<=: 以下
x = 10
y = 5
is_equal = x == y # false
is_not_equal = x != y # true
is_greater = x > y # true
is_less = x < y # false3.3 重要なコンセプト:Truthiness(真値)と Falsiness(偽値)
Ruby においては、極めて重要なルールが存在する。それは、false と nil(「空」または「存在しない」ことを表す特別な値)のみが「Falsy(偽値)」とみなされるということだ。
この2つを除き、他のすべての要素——数値の 0、空のストリング ""、空のアレイ(Array)でさえも——条件判定においてはすべて「Truthy(真値)」として扱われる。
# false と nil のみが、if 内部のブロックを実行しない
if 0
puts "数値の 0 は Truthy である" # この行はプリントされる
end
if ""
puts "空のストリングも Truthy である" # この行はプリントされる
end
if nil
puts "nil は Falsy である" # この行はプリントされない
end
if false
puts "false は明らかに Falsy である" # この行はプリントされない
end