# ES16 nedir? ECMAScript 2025 nedir?

> ECMAScript 2025 (ES16) 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 2025 (ES16) sürümüyle gelen yenilikleri inceliyoruz.

**ES16 (ECMAScript 2025), 2025 yılında yayınlanan 16. ECMAScript sürümüdür.**

## ES16 ile gelen yenilikler

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

- Iterator Helpers (`map`, `filter`, `take`, `drop` vb.)
- Yeni Set metotları (`union`, `intersection`, `difference` vb.)
- Import Attributes (`with` sözdizimi ve JSON modülleri)
- `Promise.try()` (Senkron/Asenkron kodlar için ortak hata yakalama)
- `RegExp.escape()` (Metinleri Regex için güvenli hale getirme)
- Duplicate Named Capture Groups (Aynı isimli yakalama grupları)
- `Float16Array` ve `Math.f16round()` (16-bit hassasiyetli ondalık sayılar)

### Iterator Helpers (Yineleyici Yardımcıları)

JavaScript'te jeneratörlerin ve yineleyicilerin (Iterators) diziler (Arrays) gibi doğrudan zincirlenebilir `map`, `filter`, `take` veya `drop` metotları yoktu. Bu metotları kullanmak için yineleyiciyi önce `[...iterator]` veya `Array.from()` ile bellekte diziye çevirmemiz gerekiyordu. ES16 ile gelen yardımcılar sayesinde artık yineleyiciler üzerinde belleği doldurmadan doğrudan bu metotları çalıştırabiliyoruz.

```javascript
function* naturalNumbers() {
    let i = 1;
    while (true) yield i++;
}

// İlk 5 tek sayının karesini alalım
const oddSquares = naturalNumbers()
    .filter(x => x % 2 !== 0)
    .map(x => x * x)
    .take(5);

for (const num of oddSquares) {
    console.log(num); // 1, 9, 25, 49, 81
}
```

### Yeni Set Metotları

Küme işlemleri yaparken iki `Set` nesnesinin kesişimini veya farkını almak için döngüler kurmak zorundaydık. ES16 ile birlikte matematiksel küme metotları yerleşik hale geldi:
* **`union()`**: İki kümeyi birleştirir.
* **`intersection()`**: İki kümenin kesişimini döner.
* **`difference()`**: Birinci kümenin ikinciden farkını döner.
* **`symmetricDifference()`**: Ortak olmayan elemanları döner.
* **`isSubsetOf()`**: Alt küme kontrolü yapar.
* **`isSupersetOf()`**: Üst küme kontrolü yapar.

```javascript
const evrensLikes = new Set(['javascript', 'golang', 'docker']);
const sorumansLikes = new Set(['golang', 'python', 'docker']);

// İkimizin de sevdiği dilleri (kesişimi) bulalım
const common = evrensLikes.intersection(sorumansLikes);
console.log(common); // Set(2) { 'golang', 'docker' }

// Sadece benim sevdiğim dilleri (farkı) bulalım
const onlyEvren = evrensLikes.difference(sorumansLikes);
console.log(onlyEvren); // Set(1) { 'javascript' }
```

### Import Attributes (with Sözdizimi)

Modül import ederken modülün türü hakkında ek metadata sağlamak için kullanılan deneysel `assert` kelimesi, güvenlik açıkları ve semantik nedenlerle revize edilerek `with` kelimesine dönüştürüldü. Bu özellik özellikle JSON modüllerinin güvenli bir şekilde içe aktarılmasını standartlaştırır.

```javascript
// JSON dosyasını güvenli bir şekilde import ediyoruz
import config from './config.json' with { type: 'json' };

console.log(config.appName);
```

### Promise.try()

Herhangi bir fonksiyonun (senkron veya asenkron fark etmeksizin) çalıştırılmasını ve fırlatabileceği olası hataların standart bir Promise hata zinciri (`.catch()`) içinde yakalanmasını sağlamak için `Promise.try()` metodu eklenmiştir.

```javascript
function riskyFunction(id) {
    if (id < 0) throw new Error("Negatif id geçersiz!");
    return Promise.resolve({ success: true });
}

// Senkron hata fırlatılsa bile .catch() bloğu bunu yakalar
Promise.try(() => riskyFunction(-1))
    .then(res => console.log(res))
    .catch(err => console.error("Hata yakalandı:", err.message));
```

### RegExp.escape()

Kullanıcıdan gelen bir metni (örneğin arama kutusuna yazılan girdiyi) düzenli ifadelerde (RegExp) güvenli bir şekilde kullanabilmek için, metindeki özel karakterleri (örneğin `.`, `*`, `?`, `+` vb.) ters eğik çizgiyle (`\`) kaçırmak gerekiyordu. `RegExp.escape()` bu işlemi hatasız ve otomatik olarak yapar.

```javascript
const userInput = "evrenbal.com?q=js+es16";

// Özel karakterleri kaçırır
const escaped = RegExp.escape(userInput);
console.log(escaped); // "evrenbal\\.com\\?q=js\\+es16"

const regex = new RegExp(escaped);
```

### Duplicate Named Capture Groups (Mükerrer Yakalama Grupları)

Regex eşleşmelerinde farklı alternatif kollarında (alternation) aynı yakalama grubu (named capture group) ismini tekrar kullanmamıza olanak tanır.

```javascript
// Tarih formatını YYYY-MM-DD veya DD/MM/YYYY olarak eşleştirelim
const regex = /(?<year>\d{4})-\d{2}-\d{2}|\d{2}-\d{2}-(?<year>\d{4})/;
const match = regex.exec("2026-06-20");

console.log(match.groups.year); // "2026"
```

### Float16Array ve Math.f16round()

Özellikle makine öğrenmesi, grafik programlama (WebGL) ve büyük veri setleri ile çalışırken, bellek alanından tasarruf etmek için 16-bit yarı hassasiyetli ondalık sayıları destekleyen `Float16Array` veri yapısı eklenmiştir.

```javascript
const float16 = new Float16Array([1.5, 2.75, 3.125]);
console.log(float16.byteLength); // 6 byte (32-bit olsaydı 12 byte olacaktı)
```

---

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/es16-nedir-ecmascript-2025-nedir
