LoginSignup
1
2

More than 1 year has passed since last update.

Swift初学者が自動販売機ロジックを書いてみたら1…(未リファクタリング)

Last updated at Posted at 2021-07-25

今回は自動販売機ロジックについて学習したのでアウトプットします。
ちなみに私はMac触り始めて半年の者です。(ガチガチの初心者です)
初学者のアウトプット記事ですので、間違っている点など多々あるかと思いますが、暖かい目で見守っていただけますと幸いです。

はじめに

現在、私はMENTAで、ヤマタクメンターにご指導いただいております。
ヤマタクメンターのURL https://menta.work/user/1840

今回は課題として、自動販売機のロジックをXcodeのPlaygroundでコーディングしてみました。
簡単に言うと自動販売機の仕組みをコードで表現しましたみたいなことですね。

サンプルコードは一切見ずに、あーだこーだ言いながら作りました(笑)
初学者が作ったものなので、ツッコミどころ満載だと思いますがご容赦ください💦
ちなみに例外ケースは考えずに、とりあえず一発目のコードを掲載してます。
今後、改善するつもりです。

仕様

・お金を入力する(0以上)
・飲み物は3種類(水100円、コーヒー150円、エナジードリンク200円)から選べる
・入力したお金が飲み物の値段より高ければ(お釣りが0以上だったら)、選択した飲み物とお釣りが出力される
・各飲み物の初期在庫数を5本とし、飲み物が買われたら、その飲み物の在庫数を-1する
・飲み物を選択しなかったら、”飲み物を選んでね”と出力
・飲み物が買えなかったら(お金が足りなかったら)、”お金が足りません”と出力
・在庫数に変化がなければ(減らなかったら)、”在庫変動はありません”と出力

今後は ・在庫がなかった場合の挙動 ・釣り銭切れの挙動 ・使えないお金が入力された場合の挙動    以上を追加していこうと思っています。

実装コード

qiita.swift
import UIKit

//入れるお金
var inputedYen:Int = 200
//飲み物を選択 ※Drink.water,Drink.coffee or Drink.energyDrinkで選択する
var wantedDrink:Drink? = nil

//飲み物の種類
enum Drink{
case water
case coffee
case energyDrink
}

//飲み物の値段
var drinkPrice = 0
//お釣り
var change = 0

//各飲み物の初期在庫数
var stockOfWater = 5
var stockOfCoffee = 5
var stockOfEnergyDrink = 5

//飲み物の在庫を減らす関数
func reduceStock () {
    switch wantedDrink {
    case .water:
        stockOfWater = stockOfWater - 1
    case .coffee:
        stockOfCoffee = stockOfCoffee - 1
    case .energyDrink:
        stockOfEnergyDrink = stockOfEnergyDrink - 1
    case .none: break
    }
}

//飲み物の在庫数を確認する関数
func checkStock() {
    print("waterの在庫は\(stockOfWater)個です")
    print("coffeeの在庫は\(stockOfCoffee)個です")
    print("energyDrinkの在庫は\(stockOfEnergyDrink)個です")
}

//飲み物を選択した時に、その値段を決める関数。選択しなければ選ぶよう出力する
switch wantedDrink {
case .water:
    drinkPrice = 100
case .coffee:
    drinkPrice = 150
case .energyDrink:
    drinkPrice = 200
case nil:
    print("飲み物を選んでね")
    checkStock()
    print("在庫変動はありません")
}

//お釣りを計算する関数
func calculatedChange () {
    change = inputedYen - drinkPrice
}

//入れたお金が0円以上かつ、飲み物を選択した場合、お釣りと飲み物を出力
if inputedYen >= 0 && wantedDrink != nil{
    calculatedChange()
//お釣りが0円以上であれば飲み物とお釣りを出し、お金が足りなければエラーメッセージを出力
    if change >= 0 {
        print(wantedDrink!)
        print("お釣りは\(change)です")
        reduceStock()
        checkStock()
    }else{
        print("お金が足りません")
        checkStock()
        print("在庫変動はありません")
    }
}

おわりに

最初は自動販売機ロジックってなんですか??から始まり、ほんとに作れるのかと不安でしたが、やってみるとすごく楽しいんです!
自分の期待している挙動になるよう、もっとまとまったコードになるようにと、今まで読んだ参考書をめくりながら、試行錯誤しながら作りました。
まだ改善の余地はいっぱいあると思うので、頑張りたいと思います!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2