【Ruby超入門コース】14.実践|すべて理解できればRubyの超入門者から卒業です!今日からプログラマーを名乗りましょう!

Ruby超入門コース

この記事の執筆・監修

キノコード
キノコード

テクノロジーアンドデザインカンパニー株式会社のCEO。
日本最大級のプログラミング教育のYouTubeチャンネル「キノコード」や、プログラミング学習サービス「キノクエスト」を運営。
書籍「あなたの仕事が一瞬で片付くPythonによる自動化仕事術」の著者や、雑誌「日経ソフトウエア」の寄稿などの実績も多数。

はじめに

こんにちは。キノコードです。
「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の超入門コースはおわりです。お疲れ様です。