ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift] fp - fizz buzz 리펙토링
    Programming/iOS 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)) }
    

     

    'Programming > iOS' 카테고리의 다른 글

    swift] fp - LowHigh  (0) 2020.03.05
    cocoaPods] 외부 라이브러리 제거후 다시 설치하기  (0) 2020.03.04
    swift] fp - 함수형 프로그래밍 기초  (0) 2020.03.03
    Timer 만들기  (0) 2019.11.06
    Struct & Class  (0) 2019.11.06

    댓글

Designed by Tistory.