Help us understand the problem. What is going on with this article?

Kotlinではエルビス演算子よりも、先に四則演算が優先される

More than 1 year has passed since last update.

この記事はZOZOテクノロジーズその2 Advent Calendar 20184日目の記事になります。

エルビス演算子は最後に評価される

例えば下記のコードを実行したときに print() で出力される結果は何でしょう。

fun main() {
    val x: Int? = 2
    val y: Int = 3
    val sum = x?:0 + y
    println(sum)
}
  • a) 3
  • b) 5
  • c) 2
  • d) 0

答えは c) です!!!

解説

タイトルにある通り、エルビス演算子より、四則演算が優先されます。

つまり、

val x: Int? = 2
val y: Int = 3

val sum = x?:0 + y

val sum = x ?: 0 + 3

val sum = x ?: 3

sumは `xはnullではない` ので答えが `2` です。

短いですが、こういうのも頭の片隅に置いておくとちょっとしたところで役立つかもしれません。

余談

Kotlinは他にも面白い問題があるので、紹介します。

fun main() {
    hello()
}

fun hello(): Boolean {
  println(print("Hello") == print("World") == return false)
}
  • a) HelloWorld
  • b) HelloWorldfalse
  • c) HelloWorldtrue
  • d) will not compile

答えは a) です!

Kotlinでは print は実行された瞬間コンソールに中の文字を出力します。
そしたら HelloWorld と表示され、一番外の println が実行される前に return されるので、外の println は実行されません。

ちなみに、 print("Hello") == print("World")true になります。

他の問題も下のスライドのアップしてますので、よろしければどうぞ

https://speakerdeck.com/yshogo/jin-rou-kt

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away