Laravel Collections ile ilgili bir hata üzerine yazılan bir gönderide, düzeltmenin orijinal kodla neredeyse aynı göründüğü açıklanmıştır. Aşağıda, bu hatanın kaynağına ve çözümüne dair detaylar yer almaktadır.
Hatanın tetiklendiği kod:
collect([])
->each(fn (string $hash) => $this->taggedCache($this->tags)->forget($hash));
Düzeltmeden sonraki kod:
collect([])
->each(function (string $hash) {
$this->taggedCache($this->tags)->forget($hash);
});
Görünüşte, ok fonksiyonu, anonim bir fonksiyonla değiştirilmiştir. Ancak, bu küçük değişiklik yeterli olmuştur. Çünkü each() metodu, geri dönüş fonksiyonu false döndüğünde yineleme işlemini durdurur.
Ok fonksiyonu ile durum:
fn (string $hash) => $this->taggedCache($this->tags)->forget($hash)
Burada forget() işleminin sonucu dolaylı olarak geri döner. Eğer forget() false dönerse, each() bunu bir sinyal olarak algılar ve yinelemeyi durdurur.
Anonim fonksiyon ile durum:
function (string $hash) {
$this->taggedCache($this->tags)->forget($hash);
}
Burada ise, hiçbir şey açıkça döndürülmediği için, geri dönüş null olur. Bu durumda, each() işlemi durmaksızın devam eder.
Bu küçük bir fark gibi görünse de, anonim fonksiyonların her zaman ifadelerinin değerini döndürmesi gerektiğini hatırlatmaktadır. Bu, geri dönüş değerleri ile beklenmeyen kontrol akışı davranışları yaratabilir.
Kaynak: Orijinal Makale


