progateでRubyなどを学んで、自分でもアウトプットしたいと思っている方々がいるような気がしたので、自分がrubyを理解するために書いていたコードをベースに、四則演算できる計算機の作り方を公開します。対象はruby学びたての初心者です。
学べること
- 条件分岐文(if文)の使い方
- 繰り返し処理の使い方
- メソッドの使い方
ファイルを作成
rubyはインストールされている前提で。どこでもいいのでrubyを書くことができるファイルを作りましょう。calc.rbとかでいいと思います。
変数の定義
最初に後々に使う変数を定義します。変数とは、名前をつけて一時的に値を保管しておく箱のようなものです。
# loopの中にある変数は外から呼び出すことができないので、loop文の外で定義しないといけない。
# そしてその変数を更新する形で、数字を上書きする。
number = 0
number_second = 0
メソッドの定義
四則演算をするためのメソッドを定義します。メソッドとは、一種の便利ボックスで、そのボックスに値を入れたら、求めている結果が返ってきます。自動販売機をイメージするとわかると思うんですが、僕たち、普段は自販にお金を入れて飲み物を買っていますが、お金を入れたから飲み物が出てくるまでの仕組みを知っているわけではないですよね。それと同じで、値を入れたら求めているものが出てくる箱がメソッドです。
# メソッドの定義
def add(f, s)
puts f + s
end
def subtract(f, s)
puts f - s
end
def multiply(f, s)
puts f * s
end
def division(f, s)
puts f / s
end
def modulo(f, s)
puts f % s
end
最初の文字を入力
最初の文字を入力する処理をするためのコードを書きます。例外として、数字以外が入力された場合を省いています。
# 最初の数字を入力
print "Hello, Let's cariculate! Please enter a first number:"
loop do
# ユーザーは文字(string)か数字(integer)を入力する。
number = gets.chomp
# ---
# [前提知識]
# 1.文字列にto_iをつけると全て0になる。
# => numberをintegerに変更したときに、0にならない場合はbreak(次の数字が打てるようになる)。
# 0になる場合はそれが文字列ということになるのでerror発生。
# 2.上記条件のみだと、直接0が入力されたときにbreakできない。
# => 0だけ例外的にbreakする処理をかく。例外的に入力した文字をstring変換した時に、
# 結果が"0"の場合にはbreakするようにする。
# ---
# to_sはデフォルトだからつけなくても良い。||は「または」(&&は「かつ」)。
if number.to_i != 0 || number.to_s == "0"
#後の過程で計算に使用するため、integer型(又はfloat型)にする必要がある。
number = number.to_i
break
else
print "Error:Please enter a number:"
end
end
二番目の数字を入力
一番目の数字を入力するときと全く同じです。
# 二つ目の数字を入力。
print "Please enter a next number:"
loop do
number_second = gets.chomp
# 上記と同じプロセス。
if number_second.to_i != 0 || number_second.to_s == "0"
number_second = number_second.to_i
break
else
puts "Error:Please enter a number"
end
end
オペレーターを入力
どのオペレーターで計算をするのかを入力します。
# オペレーター(+・-・*・/・%のどれか)の入力。
print "Please input operator:"
operator = ""
loop do
operator = gets.chomp
break if operator == "+" || operator == "-" || operator == "*" || operator == "/" || operator == "%"
# break if %w(+ - * / %).include?(operator)という書き方も可能。「+,-,*,/,%のいずれかがoperatorに含まれている場合、breakする」という処理
puts "Invalid operator"
end
処理の実装
オペレーターによって、処理が変わるように実装しています。ここでメソッドを活用しています。
# オペレーターによって処理を変える。case文を使っても良い。
print "The answer is "
if operator == "+"
add(number, number_second)
elsif operator == "-"
subtract(number, number_second)
elsif operator == "*"
multiply(number, number_second)
elsif operator == "/"
division(number, number_second)
elsif operator == "%"
modulo(number, number_second)
end
終わりに
Rubyについて習熟するためには、progateをひたすらやるだけではなく、自分で考えて手を動かすことが大事になってくる気がするので、積極的にアウトプットしていきましょう。