1. 선언
읽기전용
val -> final 변수 변경불가능
val a: Int=1
val b = 2
val c: Int
c = 3
var
-> 변경가능
var x = 5
x += 1
top-level
val PI = 3.14
var x = 0
fun incrementX() {
x+=1
}
2. Nullity
- 소모적인 널체크 로직을 문법적으로 일관화
!!
-> 절대 널이 아니며 널이면 에러발생
?
-> 널일 수 있다.
fun parseInt(str: String): Int? { // 반환값이 널일 수 있다
//
}
val files = File("Test").listFiles()
println(files?.size) // files가 널이더라도 에러가 발생하지 않음, 코드 생략됨
?: 널인 경우 실행
val email=values["email"] ?: throw IllegalStateException("Email is missing!")
val mainEmail=emails.firstOrNull() ?: ""
val mapped=value?.let {transformValue(it)} ?: defaultValueIfValueIsNull
3. 문자열
var a = 1
val s1 = "a is $a" // php와 비슷한 문자열 내 변수 - String Interpolation
a=2
val s2 = "${s1.replace("is","was")} , but now is $a" // ${ } 를 통해 계산 식의 결과를 문자열에 할당: 한줄 코딩
4. Any 형식
자바의 Object 형식과 유사
is 형식이 일치하면 true
fun getStringLength(obj: Any): Int? {
if (obj is String) {
return obj.length;
}
return null
}
fun getStringLength(obj: Any):Int? {
if (obj !is String) return null
return obj.length
}
fun getStringLength(obj: Any): Int? {
if (obj is String && obj.length > 0) {
return obj.length
}
return null
}
5. 인스턴스
val rect = Rectangle(5,2) // new는 필요없음




최근 덧글