まとめ:簡易計算機
CoddyのGOジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 11/107。
チャレンジ
難しいこれまでに学んだすべてを駆使して、完全な Calculator を構築しましょう:
- 構造体 (エクスポートされたフィールド) —
Name(string)、LastResult(float64)、およびHistory(int) を持つCalculatorを定義します - コンストラクタ関数 —
NewCalculator(name string)は*Calculatorを返します。name が空の場合は、デフォルトで"Unnamed"に設定します - 値レシーバ —
GetInfo()は電卓の名前をフォーマットされた文字列として返します - ポインタレシーバ —
Add、Subtract、Multiplyはそれぞれ結果をLastResultに保存し、Historyをインクリメントします - Divide —
(float64, string)を返すポインタレシーバです。ゼロで除算する場合は、HistoryやLastResultを更新せずに0と"Error: division by zero"を返します
自分で試してみよう
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復習 - ファイルパーサー