Menu
CoddyTech

まとめ:簡易計算機

CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 11/107。

challenge icon

チャレンジ

難しい

これまでに学んだことをすべて使って、完全なCalculatorを作りましょう。

  • 構造体(エクスポートされたフィールド):Name(string)、LastResult(float64)、History(int)を持つCalculatorを定義します
  • コンストラクター関数:NewCalculator(name string)は*Calculatorを返します。nameが空の場合、デフォルト値は"Unnamed"です
  • 値レシーバー:GetInfo()は、計算機の名前をフォーマット済みの文字列として返します
  • ポインターレシーバー:Add、Subtract、Multiplyは、それぞれ結果をLastResultに保存し、Historyをインクリメントします
  • Divide:(float64, string)を返すポインターレシーバーです。ゼロで割る場合は、0と"Error: division by zero"を返し、HistoryもLastResultも更新しません

自分で試してみよう

package main

import "fmt"

func main() {
    var name string
    var a, b float64
    fmt.Scan(&name, &a, &b)

    calc := NewCalculator(name)

    fmt.Println(calc.GetInfo())
    fmt.Printf("History: %d\n", calc.History)

    fmt.Printf("%.0f + %.0f = %.2f\n", a, b, calc.Add(a, b))
    fmt.Printf("%.0f - %.0f = %.2f\n", a, b, calc.Subtract(a, b))
    fmt.Printf("%.0f * %.0f = %.2f\n", a, b, calc.Multiply(a, b))

    result, err := calc.Divide(a, b)
    if err != "" {
        fmt.Println(err)
    } else {
        fmt.Printf("%.0f / %.0f = %.2f\n", a, b, result)
    }

    fmt.Printf("History: %d\n", calc.History)
    fmt.Printf("Last Result: %.2f\n", calc.LastResult)
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Goオンラインコンパイラ