Programming/iOS
swift] fp - fizz buzz 리펙토링
고양이의시간
2020. 3. 3. 18:27
FizzBuzz 프로그램?
1 ~ 100 까지의 숫자를 출력하되, 3으로 나누어 떨어진다면 fizz, 5로 나누어 떨어진다면 buzz,
3과 5 둘 다 나누어 떨어지면 fizzbuzz를 출력하는 프로그램.
리펙토링 전
var i = 1
while i <= 100 {
if i % 3 == 0 && i % 5 == 0 {
print("fizzbuzz")
}
else if i % 3 == 0 {
print("fizz")
}
else if i % 5 == 0 {
print("buzz")
}
else {
print(i)
}
i += 1
}
리펙토링1
func fizz(_ i : Int) -> String{
if(i % 3 == 0){
return "fizz"
}
return ""
}
func buzz(_ i : Int) -> String{
if(i % 5 == 0){
return "buzz"
}
return ""
}
func fizzbuzz(_ i: Int) -> String {
let result = fizz(i) + buzz(i)
return result.isEmpty ? "\(i)" : result
}
func loop(min: Int, max: Int, do f: (Int)-> Void) {
var i = min
while i <= max {
f(i)
i+=1
}
}
loop(min: 0, max: 100) { print(fizzbuzz($0)) }
리펙토링2
let fizz = { i in i % 3 == 0 ? "fizz" : "" }
let buzz = { i in i % 5 == 0 ? "buzz" : "" }
let fizzbuzz: (Int) -> String = { i in { a,b in b.isEmpty ? a: b }("\(i)", fizz(i) + buzz(i)) }
func loop(min: Int, max: Int, do f: (Int)-> Void) {
// min ~ max 까지 배열형태로 만듬
Array(min...max).forEach(f)
}
loop(min: 0, max: 100) { print(fizzbuzz($0)) }