if else 문
var max = a
if (a < b) max = b
var max:Int
if(a > b){
max = a
}else {
max = b
}
val max = if (a > b) a else b // 3항 연산자랑 비슷하네?
val max = if(a > b) {
print("Choose a")
a
}
else{
print("Choose b")
b
}
when
when(x){
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // 1도, 2도 아닐 경우 되는놈. default와 같음.
print("x is neither 1 nor 2")
}
}
var res = when(x) {
100 -> "A"
90 -> "B"
80 -> "C"
else -> "F"
}
// when이 식으로 사용된 경우 컴파일러가 else 문이 없다고 된다는 것을 입증할 수 있으면
// else를 생략 가능. -> else가 없어도 모든 케이스를 커버 가능한 경우..
var res = when(x) {
true -> "맞다"
false -> "틀리다"
}
when(x){
0,1 -> print("x == 0 or x == 1")
else -> print("Otherwise")
}
when(x) {
parseInt(x) -> print("s encodes x")
1 + 3 -> print("4")
else -> print("s does not encode x")
}
val validNumbers = listOf(3,6,9)
when(x){
in validNumbers -> print("x is valid")
// x라는 놈이 validNumbers 컬렉션 안에 있는 숫자인지?
in 1..10 -> print("x is in the range")
// x라는 놈이 1부터 10 사이에 있는 숫자인지?
!in 10..20 -> print("x is outside the range")
// 10 ~ 20범위에 들어있지 않은 숫자인지?
else -> print("none of the above")
}
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix") // string 타입이면 prefix라는 문자열로 시작해라.
else -> false // 아니면 false
}
when{
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}
For Loops
for (item in collection)
print(item)
for (item in collection){
print(item.id)
print(item.name)
}
val myData = MyData()
for(item in myData) {
print(item)
}
class MyData{
operator fun iterator(): MyIterator{
return MyIterator()
}
}
class MyIterator {
val data = listOf(1,2,3,4,5)
var idx = 0
operator fun hasNext(): Boolean{
return data.size > idx
}
operator fun next() : Int{
return data[idx++]
}
}
val array = arrayOf("가", "나", "다")
for(i in array.indices) {
println("$i: ${array[i\\}")
}
val array = arrayOf("가", "나", "다")
for((index, value) in array.withIndex()) {
println("$index: ${value}")
}
While Loops
while(x > 0){
x--
}
do{
val y = retrieveData()
}while(y != null) // 안에 있는 y를 그대로 사용함.