問4 商品状態で出し分けろ
初段 / 目安 20分
「商品状態ごとの表示文言、Node版は if 連打でした」
凛さんは少しだけ嫌そうな顔をしました。「Go の switch で綺麗に。break は……書かなくていいんですよ、Go では」
多くの言語の switch は、break を書き忘れると次の case へ流れ落ちます。これをフォールスルーと呼び、長らくバグの温床でした。
Go の switch は逆です。既定でフォールスルーしません。 一致した case だけを実行して抜けます。
Go
switch status {
case "on_sale":
return "販売中"
case "sold":
return "売切れ"
default:
return "不明な状態"
}break を書く必要がないので、書き忘れる事故も起きません。事故が1種類、この世から消えたわけです。
もう1つ、状態を表す文字列を直接書き散らさないでください。定数にまとめます。
Go
const (
StatusOnSale = "on_sale"
StatusSold = "sold"
)こうしておくと、綴りを間違えたときにコンパイラが気付きます。"on_sail" と書いても、文字列のままでは誰も止めてくれません。
完成条件
商品状態を受け取り、表示文言を返す関数 describeStatus を作ってください。
| 状態 | 返す文言 |
|---|---|
on_sale | 販売中 |
sold | 売切れ |
draft | 下書き |
| それ以外 | 不明な状態 |
状態の文字列は const でまとめてから使ってください。判定は switch で書きます。
要件
- 状態の文字列を
constでまとめて定義する - 判定は
switchで書き、defaultで未知の状態を受け止める - 空文字が来たときも
不明な状態を返す
入出力例
describeStatus("on_sale") → "販売中"
describeStatus("sold") → "売切れ"
describeStatus("draft") → "下書き"
describeStatus("reserved") → "不明な状態"
describeStatus("") → "不明な状態"ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです
ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
編集 ゆめさく編集部