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

【Kotlin】for文、forEach文のインデックス(に限らずラムダの引数)はimmutable

内容はタイトルの通りです。
以下の記事を書いた時に気になったので調べました。

ソースコード

以下の通りです。
これに限らず、ラムダの引数は確認した限りimmutableです。

for (i in 1..4) {
    i = 0 // 再代入不可でコンパイルエラー
}

(1..4).forEach {
    it = 0 // 再代入不可でコンパイルエラー
}

デコンパイル結果

デコンパイルしてみると以下のようになりました。
当たり前っちゃ当たり前ですがJava側でfinal宣言されていたりはしません。

元コード
fun main() {
    for (i in 1..4) {
        println(i)
    }

    (1..4).forEach {
        println(it)
    }
}
デコンパイル結果(一部省略)
public final class KtrTestKt {
   public static final void main() {
      int i = 1;

      for(byte var1 = 4; i <= var1; ++i) {
         boolean var2 = false;
         System.out.println(i);
      }

      byte var7 = 1;
      Iterable $this$forEach$iv = (Iterable)(new IntRange(var7, 4));
      int $i$f$forEach = false;
      Iterator var10 = $this$forEach$iv.iterator();

      while(var10.hasNext()) {
         int element$iv = ((IntIterator)var10).nextInt();
         int var5 = false;
         boolean var6 = false;
         System.out.println(element$iv);
      }

   }

   // $FF: synthetic method
   public static void main(String[] var0) {
      main();
   }
}

感想

こういう部分が最初からimmutableなのは安心感が有っていいですね。
というかKotlinに触れてからJavaStream処理に触れたので、Javaのラムダの引数が素で書くとmutableだということを想像だにしていませんでした。

Why not register and get more from Qiita?
  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