연산자 | 의미 | 예시 | 결과 |
---|---|---|---|
> | 왼쪽이 크면 true, 작으면 false | 7 > 9 | false |
< | 왼쪽이 작면 true, 크면 false | 7 < 9 | true |
>= | 왼쪽이 크거나 같으면 true, 아니면 false | 7 >= 9 | false |
<= | 왼쪽이 작거나 같으면 true, 아니면 false | 7 <= 7 | true |
== | 2개 항의 값이 같으면 true, 아니면 false | 7 == 9 | false |
!= | 2개 항의 값이 다르면 true, 아니면 false | 7 != 9 | true |
연산자 | 의미 | 예시 | 결과 |
---|---|---|---|
&& | 논리곱. 두 항이 모두 true라면 true, 아니면 false | (7 < 9) && (2 < 1) | false |
|| | 논리합. 두 항 중 하나의 항이라도 true라면 true, 아니면 false | (7 > 9) || (2 < 1) | true |
! | 부정 단항 연산자. true를 false로, false를 true로 바꿈 | ! (7 > 9) | true |
// java
int x = 2;
int b = 7;
int maxValue = x;
if (x > y) {
maxValue = x;
} else {
maxValue = y;
}
// kotlin
val x = 2
val y = 7
var max: Int
if (x > y) {
max = x
} else {
max = y
}
// 표현식으로서의 사용
val max = if (x > y) x else y
// java
int x = 1;
switch (x) {
case 1:
system.out.println(1);
break;
case 2:
system.out.println(2);
break;
default:
system.out.println(default);
break;
}
// kotlin
val x = 1
when {
x == 1 -> print("x == 1")
x == 2 -> print("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}
//위에 조건을 줄여서 표기 가능
// 1.
when(x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> {
print("x is neither 1 nor 2")
}
}
//2.
when(x) {
0, 1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
//3.
val s = "1"
val x = 1
when(x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
fun parseInt(value: String): Int = 1
//4.
val x = 129
val validNumbers = 100..120
//when의 조건에 표현식이 들어갈 수 있음
when(x) {
in 1..10 -> println("x is in the range")
in validNumbers -> println("x is valid")
!in 10..20 -> println("x is outSide the range")
else -> println("none of the above")
}
when (week) {
mon -> red
tue -> orange
wed -> yellow
thu -> green
fri -> blue
sat -> navy
else -> purple
}
위 코드를 if문으로 작성한다면 아래와 같음
if (week == mon) {
red
} else if (week == tue) {
orange
} else if (week == tue) {
yellow
} else if (week == tue) {
green
} else if (week == tue) {
blue
} else if (week == tue) {
navy
} else {
purple
}
가독성이 떨어지고 효율성이 떨어짐
이처럼 사용하려는 값을 특정할 수 있고 값의 범위가 넓지 않다면 when문을 사용하는 것이 더 좋음
// java
String value = "text"
int ParsedInt;
try {
parsedInt = Integer.parseInt(value);
} catch (NumberFormatException e) {
e.printStactTrace();
parsedInt = -1;
}
System.out.println(parsedInt); // -1
// kotlin - 표현식으로서의 사용
val value = "test"
val parsedInt: Int? = try {
value.toInt()
} catch (e: NumberFormatException) {
-1
}
println(parsedInt) // -1
// java
// while
int x = 0;
int y = 7;
while (x < y) {
Log.d("Number", "x=" + x + "y=" + y);
x += 2;
y ++;
}
// do while
int x = 0;
int b = 7;
do {
Log.d("Number", "x=", + x + "y=" + b);
x += 2;
y ++;
} while (x < y);
// kotlin
var x: Int = 0
var y: Int = 7
while (x < y) {
Log.d("Number", "x=$x y=$y");
x += 2
y ++
}
// do while
var x: Int = 0
var y: Int = 7
do {
Log.d("Number", "x=$x y=$y")
x += 2
y ++
} while (x < y)
// java
List<String> names = ... // 이름 목록
// for-each
for (String name : names) {
Log.d("Name:", "name = " + name);
}
// kotlin
val names: List<String> = ...
// 변수 name의 타입은 List names를 통해 String으로 추론하므로
// 타입을 굳이 명시하지 않아도 됨
val names: List<String> = ...
for (i in names.indicies) {
// 인덱스 인자로 배열 내 항목 접근
Log.e("Name", "name=${names[i]}")
}
val myRange : IntRange = 0..10
for (i in myRange) {
// Do smething
}
// for문 안에서 바로 범위 지정
for (i in 0..10) {
// Do somthing
}
val items: List<String> = ...
val myRange: IntRange = 0..4 // 0, 1, 2, 3, 4
val myRange: IntRange = 0 util 4 // 0, 1, 2, 3
for (i in 7 downTo 3) print(i) // prints "76543"
for (i in 3..8 step 2) print(i) // prints "357"
for (i in 8 downTo 1 step 2) print(i) // prints "8642"
[참고 사이트]