단일 표현(Single expression)의 함수
fun max(a:Int = 3, b:Int = 6):Int{
return if(a>b) a else b
}
return if(a>b) a else b
}
위 max함수의 본문은return() 문내에 값을 나타내는 단일 표현(single expression)을 전달하는 구조 입니다.
이와같이 단일 표현으로 구성된 함수의 경우 중괄호({ })를 삭제하고 함수에 결과를 직접적으로 할당할 수 있습니다.
즉, 할당연산자(“=”)를 사용하여 본문을 직접 함수의 헤드와 연결하는 방식입니다.
fun max1(a:Int = 3, b:Int = 6):Int=if(a>b) a else b
max1(10, 12)
12
max1(10, 12)
12
위의 경우는 결과형을 명시하였지만 컴파일 동안 유추할 수 있으므로 결과형(return type)은 생략할 수 있습니다.
fun max1(a:Int = 3, b:Int = 6)=if(a>b) a else b
max1(10, 12)
12
max1(10, 12)
12
그러나 중괄호로 시작되는 본문 내에 return문 존재하는 함수의 경우 결과형(return type)은 반드시 명시하여야 합니다.
Infix 함수
두개의 변수 가운데 오는 함수입니다.map이라는 자료구조를 생성할 경우 사용되는 ‘to’역시 infix함수입니다.
이 함수는 다음의 형식으로 직접 정의할 수 있습니다.
infix fun 매개변수1자료형.함수이름(매개변수2): 반환형 {
본문
}
본문
}
두개의 매개변수 중 매개변수1은 ‘this’라는 키워드로 본문에 호출됩니다.
다음은 두 정수의 합을 반환하는 함수입니다.
infix fun Int.Total(x: Int): Int {
return this+x //this는 매개변수 1을 의미
}
12.Total(3)//dot(.) 연산자 적용
15
12 Total 3 // dot 연산자 없이 적용
15
return this+x //this는 매개변수 1을 의미
}
12.Total(3)//dot(.) 연산자 적용
15
12 Total 3 // dot 연산자 없이 적용
15
이 infix 함수의 적용은 dot(.) 연산자와 ‘( )’연산자 없이 사용이 가능합니다.
연산자함수(operator function)
연산자 사용을 재정의(overloading)하기 위해 작성하는 함수즉, 이 함수는 이미 선언된 함수를 다시 선언하기 위해 사용됩니다.
연산자 수정자(modifier)인 ‘operator’와 함께 infix 함수 형식으로 작성합니다.
operator fun 매개변수1자료형.함수이름(매개변수2: 자료형) = 내용
위 구조 역시 함수의 헤드와 결과가 직접연결되는 형태로서
컴파일 동안 반환 자료형이 유추가능 하므로 명시하지 않아도 됩니다.
operator fun Int.times(x:Int):Int = this*x
12.times(3)
36
operator fun Int.times(a:String)=a.repeat(this)
2.times("demo")
demodemo
12.times(3)
36
operator fun Int.times(a:String)=a.repeat(this)
2.times("demo")
demodemo
위 코드에서
str.repeat(n): 문자열을 n번 반복합니다.
"abs".repeat(3)
absabsabs
absabsabs
댓글
댓글 쓰기