つくる: 商品データ表示
型を選ぶ練習
第2章で出てきたものを全部使います。新しい知識はありません。
プレーンテキスト
var と := 宣言の書き分け
ゼロ値 初期化しない変数の値
基本の型 int / float64 / string / bool
明示的な変換 float64() と int()
const と iota 変わらない値と連番作るのは、商品1件を表す表示行です。
プレーンテキスト
[販売中] きのこ図鑑 1200円 (手数料120円)型の選び方を先に決める
コードを書く前に、何をどの型で持つかを決めます。ここを決めずに書き始めると、途中で型が合わなくなります。
プレーンテキスト
商品名 string
価格 int 円なので整数。float64 にしない
状態 int iota で作った定数
手数料率 float64 0.1 のような小数
手数料 int 円に戻す価格を float64 にしないのは、第2章でやったとおりです。小数には誤差があり、お金の計算に向きません。円は割り切れる単位なので int で足ります。
手数料の計算
型をまたぐのはここだけです。
Go
fee := int(float64(price) * FeeRate)int の価格を float64 にして掛け、int に戻します。小数は切り捨てです。
状態の表示
状態は数字で持ち、表示するときに日本語へ直します。前のレッスンで書いた switch と同じ形です。
プレーンテキスト
0 → [下書き]
1 → [販売中]
2 → [売切れ]角括弧も含めて組み立てます。
順番に作る
プレーンテキスト
1. [販売中] だけ返す
2. 商品名と価格を足す
3. 手数料を計算して足す
4. 状態を3種類に対応させる段ごとにテストを流してください。まとめて書いてから直すより早く終わります。
要件
- 手数料率を
const FeeRate = 0.1として定義する - 状態を
iotaで定義した定数とswitchで日本語にする - 手数料は
int(float64(price) * FeeRate)で計算する [状態] 商品名 価格円 (手数料N円)の形を返す- 定義されていない状態には
[不明]を使う
入出力例
itemDisplay("きのこ図鑑", 1200, 1) → "[販売中] きのこ図鑑 1200円 (手数料120円)"
itemDisplay("中古スマホ", 24800, 0) → "[下書き] 中古スマホ 24800円 (手数料2480円)"
itemDisplay("古い辞書", 999, 2) → "[売切れ] 古い辞書 999円 (手数料99円)"
itemDisplay("謎の箱", 500, 7) → "[不明] 謎の箱 500円 (手数料50円)"ヒント
編集 ゆめさく編集部