Ruby 入門

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 以前、インテージャーは FixnumBignum に分かれていた。しかしバージョン 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      # モジュロ (剰余): 0

1.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.3333333333333335

1.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      # 切り上げ: -7

2. 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 を表す。これらはそれぞれ TrueClassFalseClass のインスタンスである。

ブーリアンはプログラミングにおけるディシジョン・メイキング(意思決定)の基盤であり、条件制御やロジカル・オペレーションで広く活用される。

# ブーリアンのサンプル
is_valid = true
is_empty = false

3.1 ロジカル・オペレーター (Logical Operators)

Ruby はブーリアンを組み合わせてオペレーションを実行するためのロジカル・オペレーターを提供している:

  • && (ロジカル AND): 両側のオペランドがどちらも true の場合にのみ true をリターンする。
  • || (ロジカル OR): 両側のオペランドのうち、少なくとも1つが true であれば true をリターンする。
  • ! (ロジカル NOT): オペランドの値を反転させる(truefalse に、falsetrue になる)。
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         # false

3.3 重要なコンセプト:Truthiness(真値)と Falsiness(偽値)

Ruby においては、極めて重要なルールが存在する。それは、falsenil(「空」または「存在しない」ことを表す特別な値)のみが「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