X



Kotlin 2
■ このスレッドは過去ログ倉庫に格納されています
0319デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:24:09.99ID:f5KBk+Xr
Javaの無名スコープを表す構文が無いことから調べていってみたけど
色々と良く設計されてると感心した

構文が無い代わりにrun関数がある
ラムダ生成コストやブロック内でのreturnが気になったけど
inline関数に渡すラムダはそれごとインライン化されるため
コストも無くreturnはちゃんと呼び出し元関数から抜ける

そうするとinlineでない関数にラムダを渡す場合のreturnとで
区別出来なくて危険かと思ったけど
inlineでないラムダではラベル無しreturnが禁止されていた

returnにラベル必須だと面倒ではと思ったけど
最後のステートメントが戻り値になる仕様だからむしろ楽だった
0320デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:25:19.69ID:f5KBk+Xr
■Java
 int f(){
  {
   String a = "a";
   if(a.length() < 10){return 1;} // fから抜ける
  }
  return 2; //ここには来ない
 }

■Kotlin
 fun f(): Int {
  run {
   val a = "a"
   if(a.length < 10){ return 1 } // runでなくfから抜ける
  }
  return 2 //ここには来ない
 }
0321デフォルトの名無しさん
垢版 |
2017/12/19(火) 10:28:08.70ID:f5KBk+Xr
fun fcall(f1: () -> Int): Int = f1()

fun f(){
  val a = fcall {
    val a = "a"
    if(a.length < 10){ return@fcall 1 } //ラベル付き
    else { 2 } //returnキーワード無し
  }
}
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況