1. 조건문의 사용
1
2
3
4
5
6
7
8
|
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
|
cs |
if문은 뭐. 그냥 보셔도 아시겠죠?
: Int 이건 리턴형이 int라는 말입니다.
다음은 when 입니다. 자바에서 switch case 라고 생각하시면 좋을것같네요.
1
2
3
4
5
6
7
8
9
10
|
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
|
cs |
어때요? 좀더 명확하고 간결한 느낌이네요.
코틀린에서 하나 특이한게 있는데요. 바로 nullable에 대한 표현식입니다.
1
2
3
4
|
fun parseInt(str: String): Int? {
// ...
}
|
cs |
Int 옆에 ? 는 리턴값이 null 일수도 있다는 표현식이 되겠습니다.
이걸 null-safety 라고 부릅니다... 아래와 같은 문법들은 NPE 를 예방하기 위한 코드라고 코틀린에서 설명하고 있습니다. (https://kotlinlang.org/docs/reference/null-safety.html)
1
2
3
4
|
fun main(args: Array<String>) {
var a: String = "abc"
a = null // compilation error
}
|
cs |
오... 변수 a는 null로 초기화 할수 없습니다.
1
2
3
4
5
6
|
fun main(args: Array<String>) {
var b: String? = "abc"
b = null // ok
print(b)
}
|
cs |
이렇게 해줘야 null 대입이 가능하죠.
그렇다면 과연 어떤식으로 null 체크를 해야할까요?
1. 명시적으로 null을 체크한다.
1
|
val l = if (b != null) b.length else -1
|
cs |
2. call할때 안전하게 해라.
1
2
3
4
5
6
7
|
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length)
|
cs |
이렇게 하면 콜 시점에서 safe 하게 처리가 가능합니다.
이런 문법은 체인식의 문장에서 유용하게 쓰입니다.
1
|
bob?.department?.head?.name
|
cs |
null이 아닌경우의 name 을 불러오게 되겠죠.
2. 타입체크와 자동 캐스팅
1
2
3
4
5
6
7
8
9
|
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` is automatically cast to `String` in this branch
return obj.length
}
// `obj` is still of type `Any` outside of the type-checked branch
return null
}
|
cs |
obj: Any 보이시죠? Any 는 자바에서 Object 같은 느낌으로 쓴다고 보면 될것 같습니다.
그리하여 if (obj is String) { 이렇게 타입을 골라내고 return obj.length 를 하게됩니다.
이때 obj는 자동으로 string 으로 캐스팅 되게 됩니다.(형검사후)
헷갈리는 부분이 많네요^^; 기초 이니 몇번이고 다시 보면서 공부 해야겠습니다.
https://kotlinlang.org/docs/reference/
'개발 코딩 정보 공유 > 안드로이드 자바 코틀린' 카테고리의 다른 글
함수형 프로그래밍? 그게 뭔데 일급객체 일급시민 고차함수 람다 (0) | 2018.09.17 |
---|---|
코틀린 기초 공부 해보기 3 (0) | 2018.09.16 |
코틀린 기초 같이 공부하기 1 (0) | 2018.09.16 |
안드로이드 프래그먼트 라이프 사이클(생명주기) 알고 쓰기~!! (0) | 2018.09.10 |
안드로이드 웹뷰 기초 ~ 알아보기 (0) | 2018.09.01 |