Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

혼자 있고 싶네요. 모두 나가주세요.

[Kotlin]002. 기본 문법 후려치기 - 2 본문

타닥타닥/Kotlin Extention

[Kotlin]002. 기본 문법 후려치기 - 2

아무것도몰라양 2017. 9. 19. 22:41

참조 : https://try.kotlinlang.org

if와 슬픈 소식

fun main(args: Array<String>) {
    println(max(args[0].toInt(), args[1].toInt()))
}
 
fun max(a: Int, b: Int) = if (a > b) a else b

if else가 하나의 표현으로써 값을 리턴함을 알 수 있다. 특히 저 함수에다 직접 때려박아 정의하는 부분은 보면 볼수록 js가 떠오른다. 여기서 슬픈 소식은 Kotlin은 삼항연산자가 없다고 한다. ?를 쓸수가 없는 것이다. 대신 ?는 다른 의미로 자주 쓰인다.

  • ?
    • Kotlin은 기본적으로 변수들이 null값을 가질 수 없다.(컴파일 에러 발생)
    • var temp :String? 라고 하면 temp는 null이 될수도 있다.
    • temp?.length 라고 하면 temp가 null일 경우 null을 리턴하지만 아니라면 length를 리턴한다.
    • val size = temp?.length ?: 0 라고 하면 temp가 null이 아니라면 length를 리턴하고, null이라면 0을 리턴하게 된다.
  • !!
    • NPE(NullPointException)이 그리운 사람을 위해 변수에 ?대신 !!를 붙히면 NPE를 발생시킬 수 있다고 한다.

is

fun main(args: Array<String>) {
    println(getStringLength("aaa"))
    println(getStringLength(1))
}
 
fun getStringLength(obj: Any): Int? {
    if (obj is String)
        return obj.length // no cast to String is needed
    return null
}

is 연산자를 통해 변수가 어떤 타입인지 알 수 있다. 배운만큼 보인다고, 함수에 : Int?를 써주어 null값을 리턴할 수 있게 한 점을 볼 수 있다. 이어서 if를 보면 Any(아무거나!) 타입의 obj라는 이름의 변수가 String이면 길이를 리턴하게 되어있다. 결과는 다음과 같다.

3

null

while

fun main(args: Array<String>) {
    var i = 0
    while (i < args.size)
        println(args[i++])
}

냉무. do while도 똑같다.

in

fun main(args: Array<String>) {
    val x = args[0].toInt()
    //Check if a number lies within a range:
    val y = 10
    if (x in 1..y - 1)
        println("OK")
 
    //Iterate over a range:
    for (a in 1..5)
        print("${a} ")
 
    //Check if a number is out of range:
    println()
    val array = arrayListOf<String>()
    array.add("aaa")
    array.add("bbb")
    array.add("ccc")
 
    if (x !in 0..array.size - 1)
        println("Out: array has only ${array.size} elements. x = ${x}")
 
    //Check if a collection contains an object:
    if ("aaa" in array) // collection.contains(obj) is called
        println("Yes: array contains aaa")
 
    if ("ddd" in array) // collection.contains(obj) is called
        println("Yes: array contains ddd")
    else
        println("No: array doesn't contains ddd")
}

in은 for에서만 쓰는게 아니었다.

아래의 결과는 x == 4일 때이다. 찬찬히 읽어보면 별거 없다.

OK

1 2 3 4 5

Out: array has only 3 elements. x = 4

Yes: array contains aaa

No: array doesn't contains ddd

when

fun main(args: Array<String>) {
    cases("Hello")
    cases(1)
    cases(0L)
    cases(MyClass())
    cases("hello")
}
 
fun cases(obj: Any) {
    when (obj) {
        1 -> println("One")
        "Hello" -> println("Greeting")
        is Long -> println("Long")
        !is String -> println("Not a string")
        else -> println("Unknown")
    }
}
 
class MyClass() {
}

역시 찬찬히 읽어보면 이해가 간다. 이렇게 편할수가 있나...

Greeting

One

Long

Not a string

Unknown

Comments