fun showProgress(progress: Int) {
val percent = progress.coerceIn(0, 100)
println("We're $percent % done!")
}
fun main() {
showProgress(146)
// We're 100 % done!
}코틀린은 JVM의 일반적인 원시 타입을 확장해 부호 없는 타입을 제공
| 타입 | 크기 | 값 범위 |
|---|---|---|
| UByte | 8비트 | 0 ~ 255 |
| UShort | 16비트 | 0 ~ 65535 |
| UInt | 32비트 | 0 ~ 2^32 - 1 |
| ULong | 64비트 | 0 ~ 2^64 - 1 |
data class Person(
val name: String,
val age: Int? = null
) {
fun isOlderThan(other: Person): Boolean? {
if(age == null || other.age == null)
return null
return age > other.age
}
}
fun main() {
println(Person("sam", 35).isOlderThan(Person("Amy", 42)))
// false
println(Person("sam", 35).isOlderThan(Person("Jane")))
// null
}
코틀린 → 자동 변환이 안됨
val i = 1
val l: Long = i
// ERROR: type missmatch 오류 발생
직접 변환 메서드를 호출해야 함
val i = 1
val l: Long = i.toLong()
타입을 명시적으로 변환하여 같은 타입끼리 비교해야 함
fun main() {
val x = 1
val list = listOf(1L, 2L, 3L)
println(x.toLong() in list)
// true
}
fun printALong(l: Long) = println(l)
fun main() {
val b: Byte = 1
val l = b + 1L // +는 Byte와 Long을 인자로 받을 수 있음
printALong(42) // 컴파일러는 42를 Long으로 해석함
}
fun main() {
println(Int.MAX_VALUE + 1)
// -2147483648
println(Int.MIN_VALUE - 1)
// 2147483647
}
문자열 내용은 대소문자를 구분하지 않음
fun main() {
println("trUE".toBoolean())
// true
println("7".toBoolean())
// false
println(null.toBoolean())
// false
}
val answer: Any = 42 // 42가 박싱됨fun f(): Unit { /*...*/ }fun f() { /*...*/ }interface Processor<T> {
fun process(): T
}
class NoResultProcessor : Processor<Unit> {
override fun process() { // Unit을 반환하지만 타입을 지정하지 않아도 됨
// 처리 코드
} // 명시적으로 return해 줄 필요 없음
}
fun fail(message: String) : Nothing {
throw IllegalStateException (message)
}
fun main() {
fail("Error occurred")
// java.lang.IllegalStateException: Error occurred
}
val address = company.address ?: fail("No address")
println(address.city)