8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kotlinの短絡評価

Last updated at Posted at 2018-06-22

【移行のお知らせ】プライバシー上の懸念により、Qiitaアカウントの削除を検討しています。
各投稿は個人blog( https://gateau.hatenablog.com/archive/category/Qiita )に移行しました。
今後も参照される方は、ブックマークなど移行をお願い致します。


短絡評価とは https://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1

「≪左辺≫ ≪論理演算子≫ ≪右辺≫」というような、論理演算子による式(論理演算子式)があるとする。左辺(第一引数)を評価した段階で式全体の値が定まらない場合のみ右辺(第二引数)を評価する、というのが短絡評価である。例えば、論理ANDの第一引数を評価した結果が false であれば、式全体は必ず false になるし、論理ORの第一引数が true であれば、式全体は必ず true になるので、第二引数を評価するまでもないので、そこで打切るのである。

どういうときに嬉しいのかもWikipediaに書いてある。

1つは、後半の部分式に時間のかかる処理を置き、最初の部分式でその処理が必要か否かのチェックをするようにすれば、無駄な関数呼び出しなどを減らすことができる。2つめとして、後半の部分式が実行時エラーを起こすかどうかのチェックを前半で行うというコーディングが考えられる。

言語によって評価順は異なるので、新しく言語を学ぶときには知っておきたい。
Wikipediaにもある通り、Javaは&& ||が短絡評価あり、 & | が短絡評価なし。
そしてKotlinの場合は、&& ||が短絡評価あり、 and or が短絡評価なし。

Try Kotlin 上で試してみる。

fun main(args: Array<String>) {

    println("短絡評価する")
    if ( returnTrue() && returnFalse() ){}
    println("")    
    if ( returnFalse() && returnTrue() ){}

    println("\n短絡評価しない")    
    if ( returnTrue() and returnFalse() ){}
    println("")
    if ( returnFalse() and returnTrue() ){}    
    
}

fun returnTrue(): Boolean{
    print("true")
    return true
}

fun returnFalse(): Boolean{
    print("false")
    return false
}

実行結果

短絡評価する
truefalse
false       // 左辺の時点でfalseが確定するので右辺は実行しない
短絡評価しない
truefalse
falsetrue   // 左辺がfalseでも右辺を実行する
8
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?