Swiftで電気ケトルのロジックを作る
スクールの課題でプログラムの使用を考えるように言われた。身近なものであるエレベーターやケトルの例外処理をSwiftで考えて下さいとのこと🤔
で、やってみたこと👇
電気ポットのビジネスロジックを作成
- STEP1: 仕様を考えてリスト化
- STEP2: Swiftで実装する
- STEP3: 例外ケースを考えてリスト化
- STEP4: 例外ケースを考慮したコードに書き換える
通常使用
- スイッチを押すとランプが点灯してお湯を沸かし始める
- 沸かし終わると音が鳴って知らせてくれる
例外処理
- 水が入ってないと空焚きになるので沸かせない
- 最近の電気ポットは空焚き防止機能がついているそうなので電源を落とす処理を実装する
やってみた感想
Int?をasを使ったりして型変換しようとしたり、デリゲートパターンなど機能を色々と盛り込もうとしたが、実現したいのは、電気ポットのお湯を沸かす仕組みをSwiftを使ってプログラムの使用を作るという単純なことなので、色々なパターンを考えたが、シンプルにしてみました。
こちらのサイトを参考にguart文を書いてみました。
数値を扱う場合、letと書いて定数に引数を代入しようとしたら、エラーが出てくるので、guard storage > 0 else { といった感じで書いてみました。
// if文を使用した例
class DeLonghi {
var product: String = "デロンギ社のケトル"
func check(water: Int) {
if water > 0 {
print("0を超えているときの処理")
print("\(water)mlの水を入れました")
print("スイッチが押されてランプが点灯しました")
print("お湯が沸いて「カチッ」と音がなりました\n")
} else {
print("0を超えていないときの処理")
print("スイッチが押されてランプが点灯しました")
print("空焚き防止機能が作動して電源が落ちました\n")
}
}
}
let dp = DeLonghi()
print("\(dp.product)\n")
// ケトルに水が入っているときに実行される処理
dp.check(water: 400)
// ケトルに水が入っていないときに実行される処理
dp.check(water: 0)
// guard文を使用した例
class Kettle {
// 後で製品名で答えるかもしれないのでOptional型にしてみる
var japan: String?
func waterCheck(storage: Int) {
guard storage > 0 else {
print("スイッチが押されてランプが点灯しました")
print("空焚き防止機能が作動して電源が落ちました\n")
return
}
print("\(storage)mlの水を入れました")
print("スイッチが押されてランプが点灯しました")
print("お湯が沸いて「カチッ」と音がなりました\n")
}
}
let kc = Kettle()
// デフォルトでは国産のケトルにしておく
print(kc.japan ?? "国産のケトル\n")
// ケトルに水が入っていないときに実行される処理
kc.waterCheck(storage: 0)
// ケトルに水が入っているときに実行される処理
kc.waterCheck(storage: 600)
コンソールのログ
デロンギ社のケトル
0を超えているときの処理
400mlの水を入れました
スイッチが押されてランプが点灯しました
お湯が沸いて「カチッ」と音がなりました
0を超えていないときの処理
スイッチが押されてランプが点灯しました
空焚き防止機能が作動して電源が落ちました
国産のケトル
スイッチが押されてランプが点灯しました
空焚き防止機能が作動して電源が落ちました
600mlの水を入れました
スイッチが押されてランプが点灯しました
お湯が沸いて「カチッ」と音がなりました
最後に
今まで、JavaScriptやFlutterをやっていたときはアプリを作ることしか考えておらず、現場で必要な知識であるプログラムの使用を考えることはなかった😱
プログラミングスクールに通ってみて、現役のメンターさんから貴重なご意見を教わりました。