Ruby超入門コース#14 実践

はじめに

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

KinoCode チャンネル

YouTubeで毎日動画配信しています。
動画は3分間なので、
 ・通勤時間
 ・お昼休み
 ・お手すきのとき
 ・寝る前
など手軽に視聴できます。
 
ちょっとしたインプットにどうぞ!
 
▼チャンネル登録はこちらからどうぞ。
【朝活もくもく会】
▼どんなもくもく会?
・平日5:30〜9:30、土日祝5:30〜9:30でやります。平日も休日も休まずやります。
・プログラミングを問わず、受験勉強、資格試験の勉強などなどペースメーカに活用ください。
・自宅で出来る「もくもく会」なので、パジャマのまま参加できます
▼ライブ配信の内容は?
・参加したら今日の目標をコメントをお願いします。
・終了5分前に私の成果報告をします。
・みなさんからも今日の成果についてチャットにて発表お願いできればと思います。