はじめに
こんにちは。キノコードです。
「Ruby超入門コース#14 実践」について説明します。
実践
どのようなプログラムを書くか説明します。
まず、Studentというクラスを作ります。
Studentクラスには、生徒の名前を代入する「name」のインスタンス変数を定義します。
そして、Studentクラスには2つメソッドを定義します。
1つのメソッドは、5教科の平均点を計算するcal_avgメソッド。
ちなみに、calは計算するという意味のcalculate、Avgは、平均のaverageを省略する時にプログラミングでよく使う文字です。
もう1つメソッドは、平均点以上だったら合格という意味の"passed"を表示、平均点以下なら不合格という意味の"failed"を表示させるjudgeメソッドを定義します。
早速、ソースコードをみていきましょう。
class Student
def initialize(name)
@name = name
end
def cal_avg(data)
sum = 0
for score in data do
sum += score
end
avg = sum / data.length
return avg
end
def judge(avg)
result = ''
if 60 <= avg
result = "passed"
else
result = "failed"
end
return result
end
attr_accessor :name
end
a001 = Student.new("sato")
data = [70, 65, 50, 90, 30]
avg = a001.cal_avg(data)
result = a001.judge(avg)
p a001.name
p avg
p result
クラスを定義していきましょう。
まずClassと書いて、次にクラス名を書きます。
今回はStudentというクラス名なので、Student。
次に、インスタンス変数の定義していきましょう。
インスタンス変数は、イニシャライズメソッドのところに記述します。
インスタンス変数はnameとしましょう。
次に、5教科の平均点を計算するcal_avgメソッドを定義します。
cal_avgメソッドには、5教科の点数が格納されている配列を渡します。
引数名はdataとしましょう。
cal_avgメソッド内に、sumという変数を定義をして、0を代入。
レッスン11で説明しましたが、for文のinの後に配列を書くことで、配列の中身が変数に一つずつ格納されます。
それをレッスン09の演算子で説明した、配列の値を複合代入演算子を使って足し上げます。
そして、合計を、配列の要素数で割って平均を算出し、avgという変数に代入します。
配列の要素数を求めるにはlengthメソッドをを使います。
算出した値をreturnで返します。
最後に、テスト結果を判定する judge メソッドを作ってみましょう。
judge メソッドに平均点を渡しましょう。引数名はavgとします。
if文で、その平均点が60点以上ならpassed、それ以外ならfailedが、resultという変数に格納されるようにします。
これもreturnで返します。
これで、 judge メソッドの完成です。
nameのインスタンス変数は、オブジェクトの外からも参照できるように、アクセサの記述をしましょう。
これでクラスの定義は終わりです。
それでは、オブジェクト生成をしましょう。
aという学級の出席番号001番の人は、satoさんだとします。
したがって、オブジェクト名をa001とします。
「sato」を渡してオブジェクト生成をします。
そして、dataという変数に、配列を代入。配列には、70, 65, 50, 90, 30という5科目の点数を記述します。
cal_avgメソッドに配列を渡して平均点を算出します。
returnで平均点が返ってくるので、これをavgという変数に格納します。
そのavgを judge メソッドに渡すと、passedかfailedが返ってくるはずです。
pメソッドで、name、平均点のavg、判定結果が代入されているresultを表示させてみましょう。
実行してみます
名前のsato、61という平均点、passedが返ってきました。
class Student
def initialize(name)
@name = name
end
def cal_avg(data)
sum = 0
for score in data do
sum += score
end
avg = sum / data.length
return avg
end
def judge (avg)
result = ''
if 60 <= avg
result = "passed"
else
result = "failed"
end
return result
end
attr_accessor :name
end
a001 = Student.new("sato")
data = [70, 65, 50, 10, 30]
avg = a001.cal_avg(data)
result = a001.judge(avg)
p a001.name
p avg
p result
次に配列の中の90を10に変更してみましょう。
平均が45になるので、failedが表示されるはずです。
実行してみます。
45点と名前とfailedが返ってきました。
これでRubyの超入門コースはおわりです。お疲れ様です。