javascript arrow function yazımı öğrenirken "neden iki farklı sözdizimi var?" sorusu akla gelir. Cevap yalnızca yazım kısalığından ibaret değil, `this` davranışı da farklıdır. Her ikisini ne zaman kullanacağınızı öğrenin. **Geleneksel fonksiyon sözdizimi** ```javascript function topla(a, b) { return a + b; } ``` **Arrow function sözdizimi** ```javascript const topla = (a, b) => a + b; ``` Tek satırda ifade varsa `return` ve süslü parantez yazmaya gerek yok. **Adım 1, Temel yazım kuralları** java script arrow function yazımında şu kısaltmalar var: - Tek parametre: `x => x * 2` (parametre etrafında parantez isteğe bağlı) - Parametresiz: `() => console.log("merhaba")` - Çok satırlı gövde: `(a, b) => { const x = a + b; return x; }` - Nesne döndürme: `() => ({ id: 1 })`, nesne literalini paranteze alın **Adım 2, `this` farkını anlayın** Geleneksel fonksiyonlarda `this`, fonksiyonu kimin çağırdığına göre değişir. Arrow function'larda `this` tanımlandığı kapsam (lexical scope) bağlanır. ```javascript class Sayac { constructor() { this.n = 0; } baslat() { // Geleneksel: setTimeout içinde this kaybolur setTimeout(function() { this.n++; }, 1000); // hata! // Arrow: this korunur setTimeout(() => { this.n++; }, 1000); // doğru } } ``` **Adım 3, Ne zaman arrow function kullanılır?** - Callback ve olay dinleyicileri (`.map()`, `.filter()`, `.then()`) - `this` değerini korumak istediğinizde - Kısa, tek satır dönüşümler **Adım 4, Ne zaman geleneksel fonksiyon?** - Constructor olarak kullanılacak fonksiyonlar (`new` ile çağrılacak) - `arguments` nesnesine ihtiyaç duyulan durumlar - Nesne metodu olarak yazıldığında ve `this`'e ihtiyaç varsa ```javascript const nesne = { ad: "Ahmet", selamla: function() { return "Merhaba, " + this.ad; } // doğru // selamla: () => "Merhaba, " + this.ad // bu undefined verir! }; ``` **Yaygın hatalar** - Arrow function'ı `new` ile kullanmaya çalışmak, hata verir, arrow constructor olamaz - Nesne döndürürken süslü parantezi atlayıp gövde sanmak: `() => {a: 1}` çalışmaz, `() => ({a: 1})` gerekir - Arrow'u her yerde kullanıp `this` sorunlarına yol açmak