본문
170607(수) - Kotlin docs (Basic Types)
Kotlin docs
Basic Types
Numbers
- Java와 완전히 같지는 않다.
- 숫자에 대한 implicit 한 widening conversions가 없음
- literals 도 약간 다름
- characters는 코틀린의 numbers가 아님
Type | Bit width |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
Literal Constants
- Decimals : 123
- Long : 123L
- Hexadecimals : 0x0F
- Binaries : 0b0001011
- Octal 는 지원하지 않음
- floating-point numbers 지원
- Doubles가 기본 : 123.5e10
- Floats는 f or F : 123.5f
Underscores in numeric literals
- 밑줄을 사용하면 literals를 좀 더 쉽게 읽을 수 있다.
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
Representation
- 숫자는 nullable number 또는 generics가 아니면 JVM에 primitive type으로 저장된다.
- 숫자의 boxing이 반드시 identity를 보장하지는 않는다.
val a: Int = 10000
print(a === a) // print true
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA === anotherBoxedA) // print false
- equality는 유지
val a: Int = 10000
print(a == a) // print true
val boxedA: Int? = a
val anotherBoxedA: Int? = a
print(boxedA == anotherBoxedA) // print true
Explicit Conversions
- smaller type은 bigger의 subtypes가 아니다
val a: Int? = 1
val b: Long? = a
print(a == b) // false
- explicit conversion 없이 Byte type을 Int type으로 형변환 할 수 없다.
val b: Byte = 1
val i: Int = b // Error occur
- explicit conversions
val i: Int = b.toInt()
- conversions
toByte() : Byte
toShort() : Short
toInt() : Int
toLong() : Long
toFloat() : Float
toDouble() : Double
toChar() : Char
- Absence of implicit conversions 는 거의 없다고 보면 된다.
val l = 1L + 3 // Long + Int => Long
Operations
- bitwise operations
val x = (1 shl 2) and 0x000FF000
- shl : signed shift left (<<)
- shr : signed shift right (>>)
- ushr : unsigned shift right (>>>)
- and : bitwise and
- or : bitwise or
- xor : bitwise xor
- inv : bitwise inversion
Characters
fun check(c: Char) {
if (c == 1) { // Error
...
}
}
- \t, \b, \n, \r, \', \", \\, \$
- '1' single quotes 형식으로 표시
- '\uFF00'
- Explicit conversions to numbers
fun decimalToDigitValue(c: Char) : Int {
if (c !in '0'..'9') {
throw IllegalArgumentException("out of range")
}
return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}
Booleans
- || : lazy disjunction
- && : lazy confunction
- ! : negation
Array
- Array class
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator<T>
//...
}
- arrayOf()
arrayOf(1, 2, 3) : array[1, 2, 3]
- arrayOfNulls()
null로 채워진 array 반환
- Creates an Array<String> with values ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })
- [] 는 get() 과 set()의 호출을 의미한다.
- Java와는 다르게 invariant 하다.
Array<Any>를 할당하지 못하게 하여 runtime failure를 방지한다.
대신에 Array<out Any>를 사용 가능
- Boxing overhead 없이 primitive type의 array를 제공
- ByteArray
- ShortArray
- IntArray
- Array class의 inheritance 없이 동일한 method 사용 가능
- factory function도 사용 가능
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
Strings
- String elements는 indexing operation에서 접근 가능하다.
s[i]
- for-loop로 접근 가능
for (c in str) {
println(c)
}
- escaped strings
val s = "Hello, world!\n"
- raw strings
- arbitrary text와 newlines text를 포함할 수 있는 strings
- """(triple quote)로 구분
- escape가 없고 기타 문자를 포함 가능
val text = """
for (c in "foo") {
print(c)
}
"""
- trimMargin() 을 사용해서 leading whitespace 제거 가능
| 이 기본적으로 margin prefix로 사용되지만 다른 문자인 trimMargine(">")로 전달 가능
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargine()
String Templates
val i = 10
val s = "i = $i"
val s = "abc"
val str = "$s.length is ${s.length} // "abc.length is 3"
- raw strings와 escaped strings 모두 지원
- (ex) $ 표시
- raw strings에서 backslash escaping은 지원되지 않는다.
val price = """
${'$'}9.99 // {'$'} 여기 안에 있는 문자를 표시하는 듯. 근데 그냥 $9.99 해도 똑같이 expression 되는데?
"""
'Mobile > Kotlin' 카테고리의 다른 글
170619(월) - Kotlin docs (Control Flow) (0) | 2017.06.19 |
---|---|
170614(수) - Kotlin docs (Packages) (0) | 2017.06.14 |
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 |
댓글