16 Nisan 2021 Cuma

Lambda ve Yerel Değişken

Lambda Yerel Değişkene Erişebilir
Ancak bu değişken "effectively final" olmalı. Açıklaması şöyle.
Any local variable, formal parameter, or exception parameter used but not declared in a lambda expression must either be declared final or be effectively final (§4.12.4), or a compile-time error occurs where the use is attempted.
Örnek
Şu kod derlenmez. Çünkü lambda içinde yerel değişken değiştiriliyor.
int ordinal = 0;
list.forEach(s -> {
  ...
  ordinal++;
});
Örnek
Şu kod derlenmez. Çünkü lambda içinde yerel değişken değiştiriliyor.
int sum = 0;
list.forEach(e -> { sum += e.size(); });
Aynı Kısıtlama Instance Member İçin Geçerli Değil
Açıklaması şöyle
There's a simple, straightforward answer to why instance variables can always be captured: this is always effectively final. That is, there is always one known fixed object at the time of the creation of a lambda accessing an instance variable
Yerel Değişken Capture Ediliyorsa Her Seferinde Yeni Lambda Instance Yaratılır
Açıklaması şöyle
Simply said, if a lambda expression does not capture values, it will be a singleton that is re-used on every invocation.

Hiç yorum yok:

Yorum Gönder