【Go言語 超入門コース】15.実践|すべて理解できればGoの超入門者から卒業です【プログラミング初心者向け入門講座】

Go超入門コース

この記事の執筆・監修

キノコード
キノコード    

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

はじめに

こんにちは。キノコードです。
「Go超入門コース#15 実践」について説明します。

実践

実践編として、テスト結果を判定するプログラムを作ってみましょう。
どのようなプログラムを書くか説明します。
まず、Studentという構造体を作ります。
構造体のStudentには、生徒の名前を代入する「name」のフィールドを定義します。
そして、構造体のStudentに関連づけるメソッドは2つです。
1つのメソッドは、5教科の平均点を計算するcalAvgメソッド。
ちなみに、calは計算するという意味のcalculate、avgは、平均のaverageを省略する時にプログラミングでよく使う文字です。
もう1つメソッドは、平均点以上だったら合格という意味の"passed"を表示、平均点以下なら不合格という意味の"failed"を表示させるjudgeメソッドを定義します。
早速、ソースコードをみていきましょう。

package main

import "fmt"

type Student struct {
        name string
}

func (s Student) calAvg(data []float64) (avgResult float64) {
        sum := 0.0
        for i := 0; i < len(data); i++ {
                sum += data[i]
        }
        avgResult = sum / float64(len(data))
        return
}

func (s Student) judge(avg float64) (judgeResult string) {
        if avg >= 60 {
                judgeResult = "passed"
        } else {
                judgeResult = "failed"
        }
        return
}

func main() {
        a001 := Student{"sato"}
        data := []float64{70, 65, 50, 90, 30}
        var avg float64 = a001.calAvg(data)
        result := a001.judge(avg)
        fmt.Println(avg)
        fmt.Println(a001.name + " " + result)
}

まずtypeと書いて、次に構造体名を書きます。
今回はStudentというクラス名なので、Student。
nameというフィールドを定義をしましょう。
これで構造体の定義は終わりです。
次に、5教科の平均点を計算するcalAvgメソッドを定義します。
calAvgメソッドには、5教科の点数が格納されている配列を渡します。
引数名はdataとしましょう。
戻り値は平均点なので、戻り値をavgResult、データ型をfloatとしましょう。
calAvgメソッド内に、sumという変数を定義をして、0.0を代入。
レッスン11の繰り返しで説明しましたが、配列を使ったfor文を記述していきましょう。
また、それをレッスン09の演算子で説明した、配列の値を複合代入演算子を使って足し上げます。
そして、合計を、配列の要素数で割って平均を算出し、avgResultという変数に代入します。
要素数を求めるには、len関数を使えばよいです。len関数の丸括弧の中に配列のdataを記述すればよいです。
len丸括弧、dataの結果は5です。5は整数型です。一方、割られる数のsumは小数点型です。
割る数と割られる数のデータ型が違う場合は、エラーになります。
len丸括弧dataを小数点型に変換しましょう。float64で括ってあげればオッケーです。
これで、平均が算出されました。
算出した値をreturnで返します。
returnのあとにavgResultは省略します。
最後に、テスト結果を判定するjudgeメソッドを作ってみましょう。
judgeメソッドに平均点を渡しましょう。引数名はavgとします。
戻り値は、その平均点が60点以上ならpassed、それ以外ならfailedが返ってくるようにしたいので、引数のあとにresult、データ型のstringを記述しましょう。
if文で、その平均点が60点以上ならpassed、それ以外ならfailedが、resultという変数に格納されるようにします。
これもreturnで返します。ここでもresultを省略しましょう。
これで、judgeメソッドの完成です。
以上で、構造体とメソッドの定義は終わりです。
それでは、構造体を初期化しましょう。
aという学級の出席番号001番の人は、satoさんだとします。
したがって、変数名をa001とします。
「sato」を渡して初期化をします。
そして、dataという変数に、配列を代入。配列には、70, 65, 50, 90, 30という5科目の点数を記述します。
calAvgメソッドに配列を渡して平均点を算出します。
returnで平均点が返ってくるので、これをavgという変数に格納します。
そのavgをjudgeメソッドに渡すと、passedかfailedが返ってくるはずです。
Printlnで、平均点のavg、nameと判定結果が代入されているresultを表示させてみましょう。
実行してみます
名前のsato、61という平均点、passedが返ってきました。

package main

import "fmt"

type Student struct {
        name string
}

func (s Student) calAvg(data []float64) (avgResult float64) {
        sum := 0.0
        for i := 0; i < len(data); i++ {
                sum += data[i]
        }
        avgResult = sum / float64(len(data))
        return
}

func (s Student) judge(avg float64) (judgeResult string) {
        if avg >= 60 {
                judgeResult = "passed"
        } else {
                judgeResult = "failed"
        }
        return
}

func main() {
        a001 := Student{"sato"}
        data := []float64{70, 65, 50, 10, 30}
        var avg float64 = a001.calAvg(data)
        result := a001.judge(avg)
        fmt.Println(avg)
        fmt.Println(a001.name + " " + result)
}

次に配列の中の90を10に変更してみましょう。
平均が45になるので、failedが表示されるはずです。
実行してみます。
45点と名前とfailedが返ってきました。
これでGoの超入門コースはおわりです。お疲れ様です。

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト