// 1) 함수 정의문
func sayhello() {
print("Hello, world!")
print("Hello, Swift!")
print("Hello, what's up, bro!")
}
// 2) 함수 실행문(call)
// 소문자로 시작하고, 뒤에 () 소괄호(퍼렌서시스)가 오면
// 이것은 함수의 실행문이라는 것을 인지해야 함
sayhello()
⭐️소괄호 ()는 함수의 실행
//sayhello1함수는 Input도 없고 Output도 없는 상태
func sayhello1() -> Void {
print("Hello, Swift!")
}
=
func sayhello1() {
print("Hello, Swift!")
}
plusFunction(a: 5, b: 7)
func printName1(first name: String) {
print("나의 이름은 \(name) 입니다.")
}
//원래 파라미터는 name인데 아규먼트 레이블을 사용해 input을 first로 받는다
printName1(first: "뉴턴")
//first는 아규먼트레이블을 사용한 "파라미터"
//"뉴턴"은 아규먼트
//아규먼트레이블을 생략하는 와일드카드패턴을 사용할 수있음
func addPrintFunction(_ firstNum: Int, _ secondNum: Int) {
print(firstNum + secondNum)
}
addPrintFunction(1, 2)
func arithmeticAverage(_ numbers: Double...) -> Double {
//Double...의 뜻은 "Double형식의 아규먼트를 2개이상 전달하겠다"
var total = 0.0
for n in numbers {
total += n
}
return total / Double(numbers.count)
}
arithmeticAverage(5, 6, 7, 8, 9)
//함수의 파라미터에 기본값을 정할 수 있다
func numFunction(num1: Int, num2: Int = 5) -> Int {
var result = num1 + num2
return result
}
numFunction(num1: 3)
numFunction(num1: 3, num2: 7)
func someAdd(a: Int) -> Int {
// let a: Int (값의 변경이 불가능)
// 아규먼트값을 파라미터(상수)에 바인딩한다는 개념
a = a + 1
// 이상황에서 a라는 값 자체가 변하기 때문에 오류발생
// var b = a 로 선언해서 변수b를 사용해야 가능
// b = b + 1
// return b
return a
}
someAdd(a: 5)
func sumOfNum(a: Int) -> Int {
var sum = 0
sum += a
return sum
}
//내부 변수를 밖에서 선언이나 사용 불가능
sum
// 리턴타입이 있는 함수의 경우엔 return이 값을 리턴하고 함수를 끝낸다는 의미
// 리턴타입이 없는 함수의 경우엔 return이 함수를 끝낸다는 개념
// 결국 return은 함수를 끝낸다는 의미
func numberPrint(n num: Int) {
if num >= 5 {
print("숫자가 5이상입니다.")
return
// 함수가 끝나는 개념
// return이 없으면
// 숫자가5이상입니다, 숫자가 5미만입니다 둘다 출력됨
}
print("숫자가 5미만입니다.")
}
// 함수의 표기법(함수를 지칭시)
func doSomething() {
print("출력")
}
func numberPrint(n num: Int) {
if num >= 5 {
print("숫자가 5이상입니다.")
return
}
print("숫자가 5미만입니다.")
}
// 1) 파라미터가 없는 경우, ()를 삭제
//함수를 가리키는 경우
var some = doSomething
//가리킨 함수를 실행시키는 경우
some()
// 2) 아규먼트 레이블이 있는 경우, 아규먼트 레이블까지를 함수의 이름으로 봄
numberPrint(n:) // "numberPrint n 함수이다."
// 3) 파라미터가 여러개인 경우, **콤마없이** 아규먼트이름과 콜론을 표기
chooseStepFunction(backward:value:)
var some1 = chooseStepFunction(backward:value:)
some1(true, 5)
// 4) 아규먼트 레이블이 생략된 경우, 아래와 같이 표기
addPrintFunction(_:_:)
var function1: (Int) -> () = numberPrint(n:)
// (Int) -> () : Input은 Int타입 Output은 Void타입
var function2: (Int, Int) -> () = addPrintFunction(_:_:)
// (Int, Int) -> () : Input은 Int타입 두개 Output은 Void타입