익명 함수 정의 기법
val sum = {no1: Int, no2: Int -> no1 + no2}
// 함수 선언
sum(10, 20)
// 함수 호출
{not1: Int, no2: Int -> no1 + no2} (10, 20)
// 선언 및 호출
fun main() {
val some: (Int) -> Unit = {println(it)}
}
val someFun: (Int, Int) -> Boolean
= {no1, no2 -> no1 > no2}
매개변수의 타입이 유추 가능하면 타입 선언을 생략할 수 있다
함수를 매개변수로 전달받거나 반환하는 함수를 의미한다
널 포인트 예외가 발생하지 않도록 코드를 작성하는 것
var data1: String = "a"
data1 = null
// 오류
var data2: String? = "a"
data2 = null
// 성공
타입뒤에 ? 연산자를 붙임으로써 null을 대입할 수 있다
var data: String? = "a"
var length = data.length
// 오류
var data: String? = "a"
var length = data?.length
// 성공
널 허용으로 선언한 변수의 멤버에 접근 할 때는 반드시 ?. 연산자를 사용해야 한다.
?. 연산자는 변수가 null이 아니면 멤버에 접근하고, null이면 멤버에 접근하지 않고 null을 반환한다
var data: String? = "a"
println(data?.length ?: -1)
data가 null이 아니면 ?:앞의 값을, null인 경우 -1을 출력한다
!!는 객체가 널일 때 예외를 일으키는 연산자이다