【Ruby】レッスン1-03:四則演算の基本と演算子の動きを学ぼう

50110130

一つ前のページでは変数と定数について学習しました。

今回は 基本データ型と算術演算子 について見ていきましょう。

Lesson1:基礎文法編
 ・Lesson1-1:Ruby学習の入り口|初めてコードを書いてみよう
 ・Lesson1-2:変数と定数を理解しよう
 ・Lesson1-3:四則演算をしよう ◁今回はココ
 ・Lesson1-4:文字列を操作しよう
 ・Lesson1-5:乱数を生成しよう
 ・確認問題1-☆1:ランダムパスワードを生成しよう
Lesson2:制御構造編
Lesson3:メソッド
Lesson4:コレクション
Lesson5:オブジェクト指向編

<<前のページ

Rubyの記事一覧

次のページ>>

Rubyで計算式を書くには|データ型と演算子の仕組み

Rubyには数値や文字列といったさまざまな基本データ型が存在します。またこれらのデータを計算するために使用する算術演算子も豊富に揃っています。

これらの要素を理解することで、これから学習する数値の計算や文字列の結合といった操作が可能になります。

本記事ではRubyの基本データ型と算術演算子について、初心者向けにわかりやすく解説します。

基本データ型とは何か

Rubyにはいくつかの基本データ型があります。データ型とは、簡単に言うとデータの種類です。

例えば「5」というデータがあったとき、コンピュータはこれが数値なのか文字なのか、指定されなければ判断できません。

数値であれば5+3のように演算に使用できますし、文字であれば他の文字列と連結して「5回目」などと表示できます。

それぞれのデータ型の特徴と使い方を見ていきましょう。

整数(Integer)

整数は小数点を含まない数値のデータ型です。例えば、5-3 は整数です。

整数型は計算に用いることが多く、直接数値を入力するだけで使用できます。

number = 5
puts number  # 出力: 5

浮動小数点数(Float)

浮動小数点数は小数点を含む数値です。例えば、3.14-0.5 などがこれに該当します。

浮動小数点数は主に割り算や精密な計算に利用されます。また整数型と同様に直接数値を入力するだけで使用できます

pi = 3.14
puts pi  # 出力: 3.14

文字列(String)

文字列はテキストデータを表します。

ダブルクオーテーション (" ") もしくはシングルクオーテーション (' ') で囲むことで表現できます。

greeting = "Hello, Ruby!"
puts greeting  # 出力: Hello, Ruby!

真偽値(Boolean)

Rubyではtruefalse という2つの値が真偽値として扱われます。

条件分岐や論理演算において頻繁に利用されます。

is_ruby_fun = true
puts is_ruby_fun  # 出力: true

nil

Rubyにおけるnilは「何もない」ことを意味します。

変数がまだ値を持っていないことを示すために使われます。

empty_value = nil
puts empty_value  # 出力:

計算使う算術演算子の種類

Rubyには数値を扱うための算術演算子がいくつか用意されています。

主な算術演算子の使用例を見ていきましょう。

足し算(+

2つの数値を加算します。

result = 5 + 3
puts result  # 出力: 8

引き算(-

2つの数値を減算します。

result = 5 - 2
puts result  # 出力: 3

掛け算(*

2つの数値を乗算します。

result = 4 * 3
puts result  # 出力: 12

割り算(/

2つの数値を除算します。

整数同士の除算では結果も整数になるため、小数が欲しい場合は片方を浮動小数点数にする必要があります。

result = 10 / 2
puts result  # 出力: 5

result = 10 / 3
puts result # 出力: 3
result = 10.0 / 3
puts result  # 出力: 3.3333333333333335

剰余(%

割り算の余りを返します。

偶数・奇数の判定に使われることが多いです。

result = 10 % 3
puts result  # 出力: 1

累乗(**

左辺の数値を右辺の数値で累乗します。

result = 2 ** 3
puts result  # 出力: 8

データ型×演算子の組み合わせ例

基本データ型と算術演算子を組み合わせることで、より複雑な計算や操作が可能です。

たとえば商品価格と個数を掛けて合計を計算したり、文字列を結合したりする場合に活用できます。

price = 500       # 商品価格
quantity = 3      # 購入個数
total = price * quantity #合計を計算して変数totalに代入
puts total # 出力: 1500
sei = "山田"    # 苗字
mei = "花子"    # 名前
full_name = sei + " " + mei #苗字と名前を合わせて変数full_nameに代入
puts full_name # 出力: 山田 花子

ただし、異なるデータ型を組み合わせる際には注意が必要です。文字列と数値を直接加算しようとするとエラーが発生します。

この場合は、to_sメソッドを使って数値を文字列に変換する必要があります。

age = 20 //これは整数型
puts "私は" + age.to_s + "歳です"  # 出力: 私は20歳です

このようにデータ型を変更するには専用のメソッドを使用します。

代表的なメソッドを以下にまとめます。このサイトをLesson1-1から順番に学習している方は、現時点では上から3つだけ暗記し、残りは後で振り返るようにしましょう。

1.to_s – 文字列への変換

オブジェクトを文字列(String)に変換します。

123.to_s       # => "123"(整数を文字列に変換)
nil.to_s       # => ""   (nilは空文字列に変換)
true.to_s      # => "true"(trueを文字列に変換)

2.to_i – 整数への変換

オブジェクトを整数(Integer)に変換します。変換できない文字列は0になります。

"123.45".to_i  # => 123  (小数部分は切り捨て)
"abc".to_i     # => 0    (変換不可の場合は0)
true.to_i      # => 1    (trueは1、falseは0)

3.to_f – 浮動小数点数への変換

オブジェクトを浮動小数点数(Float)に変換します。

"45.67".to_f   # => 45.67(文字列を小数に変換)
"abc".to_f     # => 0.0  (変換不可の場合は0.0)
123.to_f       # => 123.0(整数を浮動小数点に変換)

4.to_a – 配列への変換

オブジェクトを配列(Array)に変換します。特定のオブジェクトや構造体にのみ有効です。

(1..5).to_a    # => [1, 2, 3, 4, 5](範囲オブジェクトを配列に変換)
nil.to_a       # => [](nilは空の配列に変換)

5. to_h – ハッシュへの変換

オブジェクトをハッシュ(Hash)に変換します。配列や構造体、キーバリューのペアが含まれているデータ構造でよく使われます。

[[:a, 1], [:b, 2]].to_h   # => {:a => 1, :b => 2}
{}.to_h                   # => {}(空のハッシュ)

6. to_sym – シンボルへの変換

オブジェクトをシンボル(Symbol)に変換します。主に文字列からシンボルに変換するために使われます。

"hello".to_sym   # => :hello
"123".to_sym     # => :"123"(数値の文字列もシンボル化可能)

7. to_r – 有理数への変換

オブジェクトを有理数(Rational)に変換します。数値や文字列を分数で扱うときに便利です。

2.to_r           # => (2/1)
"2.5".to_r       # => (5/2)
"abc".to_r       # エラー(変換できない場合)

8. to_c – 複素数への変換

オブジェクトを複素数(Complex)に変換します。複素数の計算が必要な場合に使われます。

2.to_c           # => (2+0i)
"2.5".to_c       # => (2.5+0i)

まとめ

Rubyの基本データ型と算術演算子は、プログラム内での計算やデータの扱いに欠かせません。

ここで学んだ基礎を基に、さらに複雑な操作ができるようになるための基盤を作っていきましょう。

練習問題|四則演算とデータ型の組み合わせを試そう

基本データ型と算術演算子をしっかりと身に着けるため、練習問題に挑戦しましょう。

四則演算をしよう

ユーザーが入力した2つの数値を使って、四則演算(加算、減算、乗算、除算)を行うプログラムを作成しましょう。

プログラムは最初にユーザーに2つの数値を入力させます。

入力された数値をもとに、加算、減算、乗算、除算の計算結果をそれぞれ表示するようにしてください。

以下の要件に従ってコードを完成させてください。

  1. puts と gets.chomp.to_f を使用して、ユーザーから数値を2つ入力として受け取ること。
  2. 最初の数値を num1、2つ目の数値を num2 という変数に格納すること。
  3. 以下の演算を行い、それぞれ結果を表示すること。
    • num1 と num2 の加算結果
    • num1 と num2 の減算結果
    • num1 と num2 の乗算結果
    • num1 と num2 の除算結果
  4. 各演算結果を puts を使用して表示し、表示する際には「加算結果:」「減算結果:」などのメッセージを含めること。

ただし、以下のような実行結果となること。

最初の数値を入力してください:
5
二番目の数値を入力してください:
3
加算結果:8.0
減算結果:2.0
乗算結果:15.0
除算結果:1.6666666666666667

【ヒント】自力で解くのが難しい人へ

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:「最初の数値を入力してください:」と出力
2:変数num1に、ユーザーの入力を浮動小数点数に変換して代入
3:「二番目の数値を入力してください:」と出力
4:変数num2に、ユーザーの入力を浮動小数点数に変換して代入
5:変数additionにnum1とnum2の加算結果を代入
6:変数subtractionにnum1とnum2の減算結果を代入
7:変数multiplicationにnum1とnum2の乗算結果を代入
8:変数divisionにnum1とnum2の除算結果を代入
9:「加算結果:」とadditionの値を出力
10:「減算結果:」とsubtractionの値を出力
11:「乗算結果:」とmultiplicationの値を出力
12:「除算結果:」とdivisionの値を出力

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# ユーザーに最初の数値を入力させる
puts "最初の数値を入力してください:"
=begin
【穴埋め問題1】
ここにユーザーからの入力を受け取り、浮動小数点数に変換してnum1に代入するコードを書いてください。
=end

# ユーザーに二番目の数値を入力させる
puts "二番目の数値を入力してください:"
=begin
【穴埋め問題2】
ここにユーザーからの入力を受け取り、浮動小数点数に変換してnum2に代入するコードを書いてください。
=end

# 各種演算を行う
=begin
【穴埋め問題3】
ここでnum1とnum2の加算を行い、結果をadditionに代入するコードを書いてください。
=end
=begin
【穴埋め問題4】
ここでnum1とnum2の減算を行い、結果をsubtractionに代入するコードを書いてください。
=end
=begin
【穴埋め問題5】
ここでnum1とnum2の乗算を行い、結果をmultiplicationに代入するコードを書いてください。
=end
=begin
【穴埋め問題6】
ここでnum1とnum2の除算を行い、結果をdivisionに代入するコードを書いてください。
=end

# 計算結果を表示する
puts "加算結果:" + addition.to_s
puts "減算結果:" + subtraction.to_s
puts "乗算結果:" + multiplication.to_s
puts "除算結果:" + division.to_s

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

この問題の解答例と解説

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
# 四則演算プログラム

# ユーザーに最初の数値を入力させる
puts "最初の数値を入力してください:"
num1 = gets.chomp.to_f
# gets.chomp.to_f はユーザーからの入力を受け取り、改行を除去し、浮動小数点数に変換します。

# ユーザーに二番目の数値を入力させる
puts "二番目の数値を入力してください:"
num2 = gets.chomp.to_f
# gets.chomp.to_f を使って二番目の数値も同様に処理します。

# 各種演算を行う
addition = num1 + num2         # 加算
subtraction = num1 - num2      # 減算
multiplication = num1 * num2   # 乗算
division = num1 / num2         # 除算

# 計算結果を表示する
puts "加算結果:" + addition.to_s
puts "減算結果:" + subtraction.to_s
puts "乗算結果:" + multiplication.to_s
puts "除算結果:" + division.to_s
Q
正解コードの解説

コードをブロックごとに分割して解説します。

ユーザー入力と基本データ型の使用

puts "最初の数値を入力してください:"
num1 = gets.chomp.to_f

puts はメッセージを表示するメソッドです。ここでは「最初の数値を入力してください:」と出力し、ユーザーに数値の入力を促しています。

gets はコンソールからユーザーの入力を受け取るためのメソッドです。

chomp は入力されたデータから改行文字を除去し、to_f は入力を小数点数(浮動小数点数)に変換します。
これにより、num1 に小数を含む数値を代入することができます。

同様にして、次のコードも動作します。

puts "二番目の数値を入力してください:"
num2 = gets.chomp.to_f

num2 に二番目の数値を小数として入力することができます。

四則演算の実行

addition = num1 + num2         # 加算
subtraction = num1 - num2      # 減算
multiplication = num1 * num2   # 乗算
division = num1 / num2         # 除算

num1 + num2 は加算を行い、その結果を addition に代入します。同様に、- は減算、* は乗算、/ は除算を意味します。

ここで使用されている四則演算子 +-*/ は、基本的な算術演算子と呼ばれ、Rubyでは数値の計算を行う際に頻繁に使われます。

これらの変数には、それぞれの演算結果が代入されるため、後の処理で計算結果を参照することが可能です。

計算結果の表示

puts "加算結果:" + addition.to_s
puts "減算結果:" + subtraction.to_s
puts "乗算結果:" + multiplication.to_s
puts "除算結果:" + division.to_s

ここでは四則演算の結果をそれぞれ puts を使って表示しています。

addition.to_s のように、to_s メソッドで計算結果を文字列に変換しています。これは、文字列と数値を一緒に表示するために必要です。

puts により「加算結果:」「減算結果:」とそれぞれの計算結果が表示されます。

まとめ

このプログラムを通してRubyでの基本的なデータ型の取り扱いや、算術演算子の使い方を学ぶことができました。

数値入力や四則演算はプログラミングの基本的な部分ですので、他のプログラムでも積極的に活用してみてください。

少しずつ複雑なプログラムを作るためのステップとなりますので、今回の学びを基にチャレンジを続けていきましょう!

<<前のページ

Rubyの記事一覧

次のページ>>

FAQ|Rubyの計算式と演算子の使い方について

Q
Q1. Rubyで「/」を使った除算は整数になりますか?小数になりますか?

Rubyでは / を使った割り算の結果は、整数同士なら整数のまま切り捨てになります。ただし、少なくともどちらかが小数であれば小数点以下も含めた結果が返されます。たとえば 10 / 33 に、10.0 / 33.333... になります。

Q
Q2. **(べき乗演算子)はいつ使うのが適切ですか?

** は数値のべき乗(累乗)を行いたいときに使います。例えば 2 ** 38 を返します。これは「2の3乗」を意味し、指数計算に便利です。数学的な計算やルート計算(0.5乗)にも利用できるため、数値処理を行う際に重宝します。

Q
Q3. Rubyで%演算子を使うときに注意することはありますか?

% は剰余(割り算の余り)を求める演算子です。負の数に対して使う場合、Rubyでは被除数と同じ符号の余りを返します。たとえば -10 % 32 を返すため、Pythonなどとは挙動が異なります。クロス言語で比較する際は特に注意しましょう。

記事URLをコピーしました