まとめ:簡易計算機
CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 11/107。
チャレンジ
難しいこれまで学んだことをすべて使って、完全な Calculator を作成しましょう:
- 構造体(Exported フィールド):
CalculatorをName(string)、LastResult(float64)、History(int)とともに定義します - コンストラクタ関数:
NewCalculator(name string)は*Calculatorを返します。name が empty の場合は、"Unnamed"を default とします - 値レシーバ:
GetInfo()は、電卓の名前をフォーマットされた文字列として返します - ポインタレシーバ:
Add、Subtract、Multiplyはそれぞれ結果をLastResultに格納し、Historyをインクリメントします - Divide:
(float64, string)を返すポインタレシーバです。0 で割る場合は、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)
}オブジェクト指向プログラミングのすべてのレッスン
1Go オブジェクト指向の基礎
外部ファイルGo ワークスペースとモジュールパッケージとインポート公開された名前と非公開の名前Go におけるオブジェクト指向入門クラスとしての構造体構造体へのメソッド定義ポインタレシーバと値レシーバ構造体の初期化コンストラクタ関数まとめ:簡易計算機8エラー処理とOOP
error インターフェースカスタムエラー型エラーラッピング (fmt.Errorf)センチネルエラーerrors.Is() と errors.As()Panic、Defer、Recover復習 - ファイルパーサー自分で練習してみよう: Goオンラインコンパイラ