# ES14 nedir? ECMAScript 2023 nedir?

> ECMAScript 2023 (ES14) ile gelen yenilikler. (İçerik hazırlanıyor.)

[ECMAscript](/tr/ecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler), kısa adıyla ES, Ecma-International tarafından ECMA-262 dokümanında yayınlanan ve her yıl yenilenen JavaScript standardıdır. Bu yazıda ECMAScript 2023 (ES14) sürümüyle gelen yenilikleri inceliyoruz.

**ES14 (ECMAScript 2023), 2023 yılında yayınlanan 14. ECMAScript sürümüdür.**

## ES14 ile gelen yenilikler

ES14 ile birlikte tanımlanan yeni özellikler şunlar;

- `Array.prototype.findLast()` ve `findLastIndex()` (Sondan arama metotları)
- Change Array by Copy (`toSorted()`, `toReversed()`, `toSpliced()`, `with()`)
- Hashbang (`#!`) desteği
- Sembollerin (Symbols) WeakMap anahtarı olarak kullanılabilmesi

### findLast() ve findLastIndex() Metotları

Dizilerde arama yaparken ilk eşleşen elemanı bulmak için `find()` ve `findIndex()` metotlarını kullanıyorduk. Ancak aramayı dizinin başından değil de **sonundan** başlatmak istediğimizde diziyi ters çevirmek (`reverse()`) gibi zahmetli ve performansı düşüren yollara başvuruyorduk. ES14 ile gelen `findLast()` ve `findLastIndex()` metotları bu sorunu doğrudan çözüyor.

```javascript
const numbers = [5, 12, 50, 130, 44];

// Koşulu sağlayan dizideki SON elemanı bulalım
const lastLargeNumber = numbers.findLast(num => num > 45);
console.log(lastLargeNumber); // 130

// Koşulu sağlayan SON elemanın indeksini alalım
const lastLargeIndex = numbers.findLastIndex(num => num > 45);
console.log(lastLargeIndex); // 3
```

### Change Array by Copy (Kopyalayarak Değiştirme Metotları)

JavaScript'te `sort()`, `reverse()` ve `splice()` gibi geleneksel dizi metotları, üzerinde çalıştıkları orijinal diziyi doğrudan mutasyona uğratır (değiştirir). Bu durum, özellikle reaktif kütüphanelerde (React, Vue vb.) beklenmedik hatalara neden olabiliyordu. ES14, dizinin orijinal halini bozmadan, **değiştirilmiş yeni bir kopyasını** dönen 4 yeni metot sunuyor:

* **`toSorted()`**: Orijinal diziyi değiştirmeden sıralanmış yeni bir dizi döner.
* **`toReversed()`**: Orijinal diziyi değiştirmeden ters çevrilmiş yeni bir dizi döner.
* **`toSpliced()`**: Orijinal diziyi değiştirmeden eleman eklenmiş/silinmiş yeni bir dizi döner.
* **`with(index, value)`**: Orijinal diziyi değiştirmeden, sadece belirtilen indeksteki elemanı güncellenmiş yeni bir dizi döner.

```javascript
const originalArray = ['red', 'blue', 'green'];

// Orijinal diziyi bozmadan sıralayalım
const sortedArray = originalArray.toSorted();
console.log(originalArray); // ['red', 'blue', 'green'] (Değişmedi)
console.log(sortedArray);   // ['blue', 'green', 'red'] (Sıralandı)

// Sadece 1. indeksteki elemanı güncelleyerek kopyasını alalım
const updatedArray = originalArray.with(1, 'yellow');
console.log(updatedArray); // ['red', 'yellow', 'green']
```

### Hashbang (Shebang) Desteği

Sunucu tarafı veya CLI araçları geliştirirken, JavaScript dosyalarının doğrudan terminalden çalıştırılabilmesi için dosyanın en başına eklenen `#!/usr/bin/env node` (hashbang) satırı, artık ECMAScript standardının resmi bir parçası haline geldi. Böylece JavaScript motorları bu satırı yorumlarken hata fırlatmak yerine doğrudan pas geçiyor.

```javascript
#!/usr/bin/env node

// Bu dosya artık doğrudan terminalden ./app.js şeklinde çalıştırılabilir.
console.log("CLI aracı başarıyla çalıştı!");
```

### Sembollerin (Symbols) WeakMap Anahtarı Olarak Kullanımı

ES14 öncesinde, `WeakMap` anahtarları (keys) yalnızca nesneler (Objects) olabiliyordu. Semboller (Symbols) benzersiz olmalarına rağmen anahtar olarak kullanılamıyordu. Artık benzersiz sembolleri de WeakMap'lerde anahtar olarak konumlandırabiliyoruz.

```javascript
const weakMap = new WeakMap();
const uniqueSymbol = Symbol('metaKey');

const metadata = { version: '1.0.0' };
weakMap.set(uniqueSymbol, metadata);

console.log(weakMap.get(uniqueSymbol)); // { version: '1.0.0' }
```

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/es14-nedir-ecmascript-2023-nedir
