【KotlinとJava】複数言語での「Hello, world」
KotlinとJava
if
に続き、もうひとつの条件分岐であるwhen
の登場だ。
A multi-language Hello.kt
fun main(args: Array<String>) {
val language = if (args.size == 0) "EN" else args[0]
println(when (language) {
"EN" -> "Hello!"
"FR" -> "Salut!"
"IT" -> "Ciao!"
else -> "Sorry, I can't greet you in $language yet"
})
}
if
まずはif
文だ。この記述方法はJavaでいうところの三項演算子に似ている。しかし、ここで注目すべきなのは、if
文は式としても利用することができるということだ。リファレンスを見ると、通常のスタイルのif
文でも値を返却していることがわかる。
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
when
次にwhen
文である。Javaのswitch
文に似ているが、こちらも式扱いで、値を返すことができる。->(アロー演算子)
の先は{}
で囲むことで以下のように記述ができる。ただし、最後の Hey! が式の結果として返却されるため、Hello! はThe expression is unused
という警告が出る。
println(when (language) {
"EN" -> {
println("Hello!")
"Hello!"
"Hey!"
}
"FR" -> "Salut!"
"IT" -> "Ciao!"
else -> "Sorry, I can't greet you in $language yet"
})
whenに与える変数の型が決まっている場合、分岐先の型もそれに合わせる必要がある。つまり、次のような書き方はできない。(language
はString型
であるため、5 -> "Five"
のところでコンパイルエラーが出てしまう)
val launguage: String = args[0]
println(when (language) {
"EN" -> "Hello!"
"FR" -> "Salut!"
"IT" -> "Ciao!"
5 -> "Five!"
else -> "Sorry, I can't greet you in $language yet"
})
しかし式の結果は型がそろわなくとも許容してくれる(変数に代入する場合は警告が出る)
val result = when(language) {
"EN" -> "Hello"
"FR" -> 100
else -> false
}
println(result)
Javaで記述
public class Exp04 {
public static void main(String[] args) {
String language = args.length == 0 ? "EN" : args[0];
switch (language) {
case "EN":
System.out.println("Hello!");
break;
case "FR":
System.out.println("Salut!");
break;
case "IT":
System.out.println("Ciao!");
break;
default:
String template = "Sorry, I can't greet you in %s yet!";
System.out.println(String.format(template, language));
break;
}
}
}
だいぶ記述量が増えてきた。
式記述のif
文のところは三項演算子を利用したが、場合によっては使えないこともあるだろう。
when
文はswitch
文1を利用した。
switch文のインデントには流派があると思うが、スペースを優先させていただいた。 ↩︎
コメント
コメントを投稿