Ruby 入門

Ruby 基礎算術演算

本章では、Ruby におけるコアな算術オペレーター、それらの優先順位(プレセデンス)、および異なる数値データ型(インテージャーおよびフロート)と組み合わせて使用する方法をカバーします。また、正確で高効率な計算コードを記述するための、一般的な落とし穴(トラップ)とベストプラクティスについても探求します。

1. コア算術オペレーター

Ruby は、基本的な算術計算を実行するためのオペレーター・セットを提供しています。これらのオペレーターは、様々な数値データ型に適用可能です。

1.1 加算 (+) と 減算 (-)

  • 加算 (+): 2つの数値を加算します。
  • 減算 (-): 最初の数値から2番目の数値を減算します。
# 加算
puts 5 + 3     # アウトプット: 8
puts 2.5 + 7.5 # アウトプット: 10.0

# 減算
puts 10 - 4    # アウトプット: 6
puts 8.2 - 2.2 # アウトプット: 6.0

1.2 乗算 (*) と 除算 (/)

  • 乗算 (*): 2つの数値を乗算します。
  • 除算 (/): 最初の数値を2番目の数値で除算します。

重要な注意点:インテージャーの除算
Ruby では、除算に関与する2つのオペランドがどちらもインテージャーである場合、リザルトも強制的にインテージャーにトランケート(切り捨て)されます(四捨五入ではなく、小数部分が直接破棄されます)。

# 乗算
puts 6 * 7     # アウトプット: 42
puts 3.5 * 2   # アウトプット: 7.0

# 除算
puts 15 / 3    # アウトプット: 5
puts 17 / 5    # アウトプット: 3 (両方ともインテージャーであるため、小数部分の .4 は直接破棄される)

正確なフロートの除算結果を得るには?

小数を含むリザルトを期待する場合、少なくとも1つのオペランドがフロート (Float) であることを保証する必要があります。

puts 17.0 / 5  # アウトプット: 3.4 (フロートの除算)
puts 17 / 5.0  # アウトプット: 3.4 (フロートの除算)

1.3 モジュロ / 剰余 (%)

  • モジュロ (%): 除算オペレーション後の剰余(余り)をリターンします。

このオペレーターはプログラミングにおいて非常に有用であり、例えば数値が奇数か偶数かを判定したり、ループの値を特定の範囲内にリミット(制限)したりするために使用されます。

puts 16 % 5  # アウトプット: 1 (16 を 5 で割った商は 3、剰余は 1)
puts 10 % 2  # アウトプット: 0 (剰余が 0 であるため、偶数であることを示す)
puts 11 % 2  # アウトプット: 1 (剰余が 1 であるため、奇数であることを示す)

1.4 エクスポーネント / べき乗 (**)

  • エクスポーネント (**): 最初の数値の2番目の数値乗(べき乗)を計算します。
puts 2 ** 3   # アウトプット: 8 (2 * 2 * 2)
puts 5 ** 2   # アウトプット: 25 (5 の平方)
puts 2 ** 0.5 # アウトプット: 1.4142135623730951 (2 の平方根を計算)

2. オペレーターの優先順位 (Operator Precedence)

オペレーターの優先順位は、エクスプレッション内で演算が実行される順序を決定づけます。Ruby は標準的な数学演算の順序に従います:

最高優先順位から最低優先順位へ:

  1. エクスポーネント (**)
  2. 乗算、除算、モジュロ (*, /, %)
  3. 加算、減算 (+, -)

エクスプレッション内に同じ優先順位のオペレーターが出現した場合、それらは左から右へと評価(計算)されます。

括弧 () を使用した順序のコントロール:

括弧を使用してデフォルトの優先順位をオーバーライドし、演算順序を明示的にコントロールすることができます(そして、そうすることが強く推奨されます)。これにより、コードのリーダビリティ(可読性)が大幅に向上します。

puts 2 + 3 * 4   # アウトプット: 14 (先に乗算 3*4 を計算し、次に加算を計算)
puts (2 + 3) * 4 # アウトプット: 20 (括弧により、加算 2+3 を先に計算するよう強制)

3. ミックス・タイプの計算:インテージャーとフロート

前述の除算セクションで述べたように、Ruby はインテージャー(whole numbers)とフロート(小数点を持つ数値)を区別します。

算術オペレーションにおいてこれら2つのタイプをミックスして使用した場合、Ruby は通常、精度のロストを防ぐためにインテージャーを自動的にフロートへキャスト(変換)し、フロートのリザルトを生成します。

a = 10
b = 3
c = 3.0

puts a / b   # アウトプット: 3 (純粋なインテージャーの除算)
puts a / c   # アウトプット: 3.3333333333333335 (ミックス・タイプ、フロートのリザルトを生成)

4. 複合アサイン・オペレーター

「バリアブル(変数)」の章で、複合アサイン・オペレーターについて簡潔に触れました。これらは算術オペレーションとアサイン(代入)オペレーションをコンバイン(結合)したものであり、バリアブルの値をアップデートするための極めてコンサイス(簡潔)なアプローチを提供します。

オペレーターディスクリプションサンプル等価リザルト
+=加算してアサインx = 5; x += 3x = x + 3x = 8
-=減算してアサインy = 10; y -= 4y = y - 4y = 6
*=乗算してアサインz = 2; z *= 6z = z * 6z = 12
/=除算してアサインa = 20; a /= 5a = a / 5a = 4
%=モジュロしてアサインb = 17; b %= 5b = b % 5b = 2
**=エクスポーネントしてアサインc = 3; c **= 2c = c ** 2c = 9