본문

170410(월) - Kotiln-docs (Basic Syntax)

Kotlin-docs


Udemy kotiln 과정은 기초였다. 

공식 Docs로 복습하는셈 치고 정리한다.


Basic Syntax


함수

- 리턴 타입 유추

fun sum(a: Int, b: Int) = a + b


- Unit-returning functions

함수가 제대로된 값을 리턴하지 않았을 때, 리턴 타입은 Unit이다.

Unit 사용시 return을 명시적으로 하지 않아도 된다.


fun printSum(a: Int, b: Int): Unit {

print(a + b)

// return Unit or return is optional

}


리턴타입 생략 가능

fun printSum(a: Int, b: Int) {

print(a + b)

}



local variables 정의

- Assign-once (read-only) 

val a: Int = 1

val b = 1


val c: Int

c = 1


- Mutable

var x = 5

x += 1



String templates

fun main(args: Array<String>) {

if (args.size == 0) return


print("First arg : ${args[0]}")

}


val i = 10

val s = "i = $i"


val s = "abc"

val str = "$s.length is ${s.length}"


$문자를 사용하고 싶으면 '$' (작은따옴표) 사용

back slash(\) 사용은 소용 없다.

val price = """ ${'$'}9.99 """



Conditional expressions

코틀린의 if는 값을 리턴 가능하다.

그러므로 ternary operator(삼항연산자) 는 없음.

if문이 역할을 대신함.


fun max(a: Int, b: Int): Int {

if (a > b) {

return a

} else {

return b

}

}


fun max(a: Int, b: Int) = if (a >  b) a else b


// traditional

var max = a

if (a < b) max = b


var max: Int

if (a > b) {

max = a

} else {

max = b

}


// As expression

val max = if (a > b) a else b


if 문이 block으로 구성되면 마지막 expression이 그 block의 값이 된다.

val max = if (a > b) {

print("choose a")

a

} else {

print("choose b")

b

}


 

Using nullable values and Checking for null

null value가 들어올 수 있으면, explicitly하게 nullable을 표시해줘야 한다.


Integer가 리턴되지 않는다.

fun parseInt(str: String): Int? {

//...

}


코틀린의 타입 시스템은 위험한 null refreence를 제거하는것에 목표를 두고 있다.

즉, NullPointerException 이 나지않게 하는것이 궁극적인 목표다.



코틀린은 

- nullable references

- non-null references

를 구별한다.


var a: String = "abc"

a = null    // compilation error!


// nullable 처리

var b: String? = "abc"

b = null


여기서 b.length 를 호출하게 되면 컴파일러는 error를 뱉어낸다.

그래서 필요한게 Safe calls 다.



Safe Calls

?.  operator를 사용해서 safe call을 한다.


b?.length


- b 가 null이 아닐경우에 b.length를 반환

- null이면 null 리턴


chain 식의 호출에 매우 유용하다.


with "let"

val listWithNulls: List<String?> = listOf("A", null) 

for (item in listWithNulls) {

item?.let {

// it -> println(it) 생략된것 같다.

println(it)

}

}



Type checks 및 Automatic casts

fun getStringLength(obj: Any): Int? {

if (obj !is String) return null


// obj is automatically cast String

return obj.length

}


fun getStringLength(obj: Any): Int? {

// obj is automatically cast to String on the right-hand side of '&&'

if (obj is String && obj.length > 0) {

return obj.length

}


return null

}



'Mobile > Kotlin' 카테고리의 다른 글

170607(수) - Kotlin docs (Basic Types)  (0) 2017.05.31
170530(화) - Kotlin docs(Coding Conventions)  (0) 2017.05.30
170529(월) - Kotlin docs (Idioms)  (0) 2017.05.29
170417(월) - Kotlin docs (Basic Syntax)  (0) 2017.04.17
161118(금)  (0) 2016.11.18

공유

댓글