Teknik Detaylar

ES16 nedir? ECMAScript 2025 nedir?

← Teknik Detaylar
2026-06-20 · 3 dk okuma
ES16 nedir? ECMAScript 2025 nedir?
Bu yazıyı yapay zekâ ile tartış
Sayfayı kopyala

ECMAscript, 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.

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.
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.

// 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.

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.

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.

// 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.

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