[기본]
val max2 = if (a > b) {
val c = 4
a
} else {
b
}
[간단히]
val max2=if(a>b) a else b
//val max2=if(a>b) val c=4,a else b =>불가능!
[if문 쓸 때 return 주의]
val max2 = if (a > b) {
val c = 4
a
} else if(a==b){
println("같음")
} else{...} // =>return 경우의 수 코드 모두 작성 필수! else없으면 에러
[null타입 프로퍼티]
val max2:Int? = if (a > b) {
val c = 4
a
} else if(a==b){
println("같음")
} else null
class Nullable {
var nullable: String? =null
// var notNullable:String=null
}
int strLen(String s){ return s.length(); }
위의 자바코드는 s에 null 값이 들어오면 NullPointerException이 발생하지만 컴파일 오류 발생 X
fun strLen(s:String) : Int = s.length
위의 코틀린 코드는 s에는 null이 될 수 없는 변수인데 s.length는 null가능성 있는 메서드라 컴파일시 오류 발생 O
fun strLen(s:String?) : Int = s.length
함수 파라미터를 null타입으로 바꿔줘도, 위 코드는 오류 발생함 s가 null을 인자로 받을 수 있는 상태에서 변수 s에 대한 메서드 length를 직접 호출 X
fun strLen(s:String?) : Int = if(s !== null) s.length else 0
결과적으로 위처럼 null일때를 구분해서 코드 작성 필요!
fun nullReturn():String?{
return null
}
fun test(str:String?):Int?{ //리턴값이 null일수도 있어서 Int?
var resultNull:Int?=str?.length
return resultNull
} //str변수가 null일경우
//length를 호출하지 않고 null을 리턴함
fun test(str:String?):Int?{
var resultNull:Int?=str?.length ?:0
return resultNull
}
val number1:Int?=null
val number2:Int=5
val sum=number1?.plus(number2) ?:10
// val sum=number1+number2 ?:10
//null이 될 수 있는 타입은 일반 연산식으로 하면 안되지
//?.로null 아닌지 체크 후 연산해야지!!
null값 허용하기 | 안전한 호출 연산자 | 엘비스 연산자 | |
---|---|---|---|
표기 | 선언하는 변수 타입 뒤에 ? | 선언된 변수 이름 뒤에 ?. | 선언된 변수 이름 뒤에 ?: |
목적 | null입력 받기 위해 | null일때 ?.다음에 나오는 명령어 처리 X | null일때 ?: 뒤에 오는 값을 기본값으로 사용 |
예 | var nullable:String? | var result:Int?=str?.length | var result:Int?=str?.length ?:0 |
val num=14
if(num is Int){
println(num)
}else if(num !is Int){
println("안돼")}
is
연산자를 통해 대상 값이 해당 타입으로 변환 가능한 타입인지 체크해야 하지만 코틀린에서는 훨씬 더 간결한 기능으로 as?
연산자를 제공합니다.as?
연산자는 어떤 값을 지정한 타입으로 캐스트를 하고, 만약 대상 타입으로 캐스트 할 수 없으면 null을 반환val x="kotlin"
val y:Int?=x as? Int
//Int형으로 캐스팅 실해시 null로 초기화 하므로 exception발생 안함
참고: https://jeongupark-study-house.tistory.com/156#recentEntries