[Swift] 기초문법 02

최정은·2023년 8월 15일
0

Swift

목록 보기
2/27

함수 (functions)

  • 어떤 태스크를 수행하기 위한 코드 블록

함수 작성

func makeDouble(num: Int) -> Int {
	return num * 2
}

let result = makeDouble(3)
print(result) // 6

input parameter label

  • input parameter 의 이름을 정해줌
  • parameter 를 호출하는 외부, 내부 관점에서 보았을때 이름을 다르게 하는 것이 더 자연스러울때가 있음
    → 결국 코드는 가독성을 높여, 동료 개발자들이 이해하기 쉬워야 하니까

// 외/내부 paramter label 변경 -> 호출할때 더 읽기 쉬움
func printName(of name: String) {
	print("name is \(name)")
}

printName(of: "Jason") // "name is Jason"


// 외부 paramter 를 생략하고 싶은 경우 -> 호출할때 더 읽기 쉬움
func printName(_ name: String) {
	print("name is \(name)")
}

printName("Jason") // "name is Jason"

default parameter

  • 파라미터에 기본값을 설정
func discount(price: Double, ratio: Double = 0.2) -> Double {
	return price * (1 - ratio)
}

let defaultRatioApplied = discount(price: 2000)
print(defaultRatioApplied)  

variadic function

  • 정해지지 않은 수의 여러 파라미터를 받을수 있은 형태의 함수를 의미
  • 대표적으로 print() 함수가 있음
  • 함수 내부적으로 이렇게 받은 파라미터를 배열의 형태로 받음
func printNames(_ names: String...) {
    for name in names {
        print("name is \(name)")
    }
}

printNames("James", "Roy", "Jake")
// name is James
// name is Roy
// name is Jake

throwing function

  • 함수 수행간에 예외 상황이 일어날수 있음
    • 따라서, 제대로 함수를 수행할수 없는 경우 Error 을 내보내게 됨
    • → 예를 들어, 잘못된 인풋, 네트워크 끊김
  • throws 키워드를 이용해서 만들수 있음
  • throws 가 있는 함수는 try 를 이용해 호출하고, do-catch 를 이용해 에러 감지를 할수 있음
enum DivideError: Error {
    case cannotZero
}

func divide(dividend: Int, divisor: Int) throws -> Int {
    if divisor == 0 {
        throw DivideError.cannotZero
    }
    
    return Int(dividend / divisor)
}


do {
    let result = try divide(dividend: 80, divisor: 6)
    // let result = try divide(dividend: 80, divisor: 0)
    print(result)
} catch {
    print(error.localizedDescription)
}

in-out parameter

  • 함수에서 넘겨 받는 input parameter 는 constant 임
  • 따라서 값을 변경할수 없음
  • inout 을 이용하면 변경가능함, 그리고 원래 오리지널 값도 변경이됨
func makeTriple(num: inout Int) {
    num *= 3
}

var num = 8
makeTriple(num: &num)

print(num)

0개의 댓글