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.01.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 は標準的な数学演算の順序に従います:
最高優先順位から最低優先順位へ:
- エクスポーネント (
**) - 乗算、除算、モジュロ (
*,/,%) - 加算、減算 (
+,-)
エクスプレッション内に同じ優先順位のオペレーターが出現した場合、それらは左から右へと評価(計算)されます。
括弧 () を使用した順序のコントロール:
括弧を使用してデフォルトの優先順位をオーバーライドし、演算順序を明示的にコントロールすることができます(そして、そうすることが強く推奨されます)。これにより、コードのリーダビリティ(可読性)が大幅に向上します。
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 += 3 | x = x + 3 | x = 8 |
-= | 減算してアサイン | y = 10; y -= 4 | y = y - 4 | y = 6 |
*= | 乗算してアサイン | z = 2; z *= 6 | z = z * 6 | z = 12 |
/= | 除算してアサイン | a = 20; a /= 5 | a = a / 5 | a = 4 |
%= | モジュロしてアサイン | b = 17; b %= 5 | b = b % 5 | b = 2 |
**= | エクスポーネントしてアサイン | c = 3; c **= 2 | c = c ** 2 | c = 9 |