print("capturing values")
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var running = 0
func incrementer() -> Int {
running += amount
return running
}
return incrementer
}
let tambahSatu = makeIncrementer(forIncrement: 1)
print("Nilai sekarang: \(tambahSatu())")
print("Nilai sekarang: \(tambahSatu())")
print("Nilai sekarang: \(tambahSatu())")
let anotherTambahSatu = tambahSatu
print("Nilai sekarang: \(anotherTambahSatu())")
print("Autoclosures!")
var customerInLine = ["Joko", "Joseph", "Josua", "Jeffry", "Justin", "John"]
print(customerInLine.count)
let customerProvider = {
customerInLine.remove(at: 0)
}
func serve(customer customerProvider: () -> String) {
print("Now serving: \(customerProvider())")
}
print("Now serving: \(serve(customer: {customerInLine.remove(at: 0)}))")
func getInput(message: String) -> String? {
print(message, terminator: ": ");
return readLine()
}
func getInputInt(message: String) -> Int? {
if let inputString = getInput(message: message) {
return Int(inputString)
} else {
return nil
}
}
var speedTotal = 0
func tambahKecepatan(forIncrement tambah: Int) -> () -> Int {
func incrementer() -> Int {
speedTotal += tambah
return speedTotal
}
return incrementer
}
func kurangKecepatan(forDecrement kurang: Int) -> () -> Int {
func decrement() -> Int {
speedTotal -= kurang
return speedTotal
}
return decrement
}
let naikkanSepuluh = tambahKecepatan(forIncrement: 10)
let kurangiSepuluh = kurangKecepatan(forDecrement: 10)
// menyalakan mesin motor listrik
func turnOn() {
print("Menghidupkan mesin...")
print("Selamat datang di Motor Listrik Dicoding!")
print("Let's get started!")
}
func turnOff() {
print("Let's take a break!")
print("Mematikan mesin...")
}
func showSpeed() {
print("Kecepatan saat ini: \(speedTotal)")
}
func action() {
print("=======================================================")
print("Pilih aksi:")
print("[1] Tambahkan kecepatan!")
print("[2] Kurangi kecepatan!")
print("[3] Matikan mesin!")
if let state = getInputInt(message: "Masukkan aksi Anda"), state <= 3 {
switch state {
case 1:
speedTotal = naikkanSepuluh()
showSpeed()
action()
case 2:
if speedTotal > 0 {
speedTotal = kurangiSepuluh()
showSpeed()
action()
} else {
turnOff()
break
}
case 3:
turnOff()
break
default:
break
}
} else {
print("Input tidak valid!")
}
}
turnOn
action()