---
title: 'Dil Sürümleri ve Standartlaşma'
source: 'https://academia.sh/tr/kurslar/javascript-temelleri/dil-surumleri-ve-standartlasma'
course: 'JavaScript Temelleri'
language: tr
updated: '2026-08-17T18:09:47+00:00'
license: 'CC BY-SA 4.0'
---

# Dil Sürümleri ve Standartlaşma

ECMAScript baskılarının sürümlenmesi, öneri aşamaları, geriye dönük uyumluluğun dile bıraktığı izler ve özellik saptama.

Önceki derste modül kipi, `const` bildirimi ve `for...of` döngüsü kullanıldı. Bunların
hiçbiri dilin ilk halinde yoktu; her biri standarda belirli bir baskıyla girdi. Bir
özelliğin "dilde olması" ile "elinizdeki ortamda çalışması" ayrı sorulardır ve ikisinin
yanıtı farklı yerlerden gelir.

Bu ders, standardın nasıl sürümlendiğini, bir önerinin hangi aşamalardan geçtiğini ve
uyumluluk kaygısının dile hangi kalıcı izleri bıraktığını ele alır. Sonunda pratik bir
teknik kurulur: bir yeteneğin varlığını sürüm adına bakmadan sınamak.

## Standardın Sürümlenmesi

Dilin tanımı, ECMA-262 numaralı belgedir. Belge **baskı (edition)** olarak sürümlenir;
bir baskı, o noktada standarda alınmış bütün özellikleri içeren tam bir metindir.
Baskılar önceki baskıların üzerine ekleme yapar; yayımlanmış bir özellik sonraki
baskıda kaldırılmaz.

Baskılar ECMAScript 2015 ile birlikte yıllık bir düzene geçti ve o baskıdan itibaren
yayım yılıyla anılır. Bu, teknik bir adlandırma sözleşmesidir: "ES2015 itibarıyla blok
kapsamlı bildirim vardır" cümlesi, hangi metinde tanımlandığını söyler. Bir baskının adı
o özelliğin nerede kullanılabildiği hakkında hiçbir şey söylemez; o soru ortamın
sorusudur.

Sürüm adları bu kursta yalnızca bir davranışın kaynağını göstermek gerektiğinde
kullanılacaktır. Örneğin "blok kapsamı ES2015 ile geldi" cümlesi, `var` ile `let`
arasındaki farkın neden var olduğunu açıklar.

## Bir Özellik Dile Nasıl Girer

Öneriler, dili sürdüren teknik komitede aşamalı bir süreçten geçer. Aşamalar sıfırdan
dörde numaralanır ve her aşamanın giriş ölçütü vardır:

- **Aşama 0 — fikir.** Komiteye sunulmuş, biçimlendirilmemiş bir öneri.
- **Aşama 1 — öneri.** Çözülmek istenen problem, örnek kullanım ve olası zorluklar
  yazılıdır. Komite problemi ele almaya değer bulmuştur.
- **Aşama 2 — taslak.** Sözdizimi ve anlambilim, standardın diliyle biçimsel olarak
  yazılmıştır. Bu aşamadan sonra yapılan değişiklikler ayrıntı düzeyindedir.
- **Aşama 3 — aday.** Metin tamamdır; sıra gerçekleştirim ve kullanım geri bildirimine
  gelmiştir. En az bir motor özelliği uygular.
- **Aşama 4 — tamamlanmış.** Bağımsız gerçekleştirimler ve uyum sınamaları hazırdır.
  Öneri bir sonraki baskıya girer.

Sürecin iki sonucu vardır. Birincisi, bir özellik standarda girmeden önce bazı
ortamlarda çalışabilir; ikincisi, aşama 4'e ulaşmamış bir öneri hâlâ değişebilir.
"Sözdizimi şu anda şöyle çalışıyor" gözlemi, o sözdiziminin kalıcı olduğunu göstermez.

## Geriye Dönük Uyumluluğun Bedeli

Standardın taşıdığı en güçlü kısıt, daha önce yayımlanmış sayfaların çalışmaya devam
etmesidir. Bu kısıt, hatalı olduğu kabul edilen davranışların bile düzeltilmemesine yol
açar. Programlama Temelleri kursundaki Bir Dil Seçmek dersinde tanımlanan geriye dönük
uyumluluk kavramının en görünür örneklerinden biridir.

```js
console.log(typeof null);
console.log([] + {});
```

```
object
[object Object]
```

İlk satırdaki sonuç bir tanım gereği değil, dilin ilk gerçekleştirimindeki bir
kodlamanın sonucudur. `null` bir nesne değildir; ama `typeof null` ifadesinin `"null"`
üretmesi, bu ifadenin sonucuna dayanan kodları bozardı. İkinci satır, tip zorlama
kurallarının bir dizi ile bir nesneyi metne çevirip birleştirmesidir; Tip Dönüşümü ve
Zorlama dersinde adım adım çözümlenecektir.

Bu davranışlar "tuhaflık" olarak değil, **kural** olarak öğrenilmelidir. Her biri
standartta açıkça yazılıdır ve adım adım izlenebilir. Kursun Değerler ve Tipler konusu
bu adımları okur.

Uyumluluk kısıtının ikinci sonucu, yeni yeteneklerin çoğunlukla **ekleme** biçiminde
gelmesidir: eski davranış kaldırılmaz, yanına yeni bir yol açılır. `var` bildiriminin
yanına `let` ve `const` gelmesi bu kalıbın örneğidir; eskisi çalışmayı sürdürür, yenisi
farklı bir kapsam kuralı sunar. İki bildirim türü arasındaki fark bir sonraki dersin
konusudur.

## Özellik Saptama

"Bu ortamda şu yetenek var mı" sorusu, sürüm adına bakarak yanıtlanmaz. Bir ortamın
hangi baskıyı ne ölçüde uyguladığı, ortamın kendisine sorularak öğrenilir. Yerleşik
nesnelere eklenen yöntemler için yoklama doğrudandır:

```js
console.log(typeof Array.prototype.map);
console.log(typeof Array.prototype.at);
console.log(typeof Object.groupBy);
```

Örneklerin çalıştırıldığı ortamda üçü de bulunur:

```
function
function
function
```

Aynı yoklama, yeteneği bulunmayan bir ortamda `undefined` üretir. Bu, yedekli kod
yazmanın temelidir:

```js
const sicakliklar = [21.5, 19.75, 23, 18.25];

function sonEleman(dizi) {
  if (typeof dizi.at === "function") {
    return dizi.at(-1);
  }
  return dizi[dizi.length - 1];
}

console.log(sonEleman(sicakliklar));
```

```
18.25
```

Yoklamanın `typeof` ile yapılması önemlidir: bildirilmemiş bir ada doğrudan bakmak
`ReferenceError` verirken, `typeof` hata vermeden `"undefined"` üretir. Nesne
özelliklerinde bu risk yoktur, ama alışkanlığı tek biçimde tutmak yanlış yoklamayı
önler.

## Eksik Yeteneği Tamamlamak

Saptama, eksikliği bildirir; onu gidermez. Eksik bir yeteneğin yerine geçen koda **dolgu
(polyfill)** denir. Dolgu, yalnızca yetenek yoksa tanımlanmalı ve var olan gerçekleştirimi
ezmemelidir.

```js
const yerlesikVar = typeof Array.prototype.at === "function";
console.log("at yerleşiği:", yerlesikVar);

if (typeof Array.prototype.sonuncu !== "function") {
  Object.defineProperty(Array.prototype, "sonuncu", {
    value: function () { return this[this.length - 1]; },
    writable: true, configurable: true, enumerable: false,
  });
}
console.log([3, 7, 9].sonuncu());

const anahtarlar = [];
for (const k in [1, 2]) anahtarlar.push(k);
console.log("for...in anahtarları:", anahtarlar);
```

```
at yerleşiği: true
9
for...in anahtarları: [ '0', '1' ]
```

Üçüncü satır, dolgunun neden doğrudan atamayla yazılmadığını gösterir. Prototipe düz
atamayla eklenen bir özellik sayılabilir olur ve `for...in` gezinmesine karışır; buradaki
tanımlama `enumerable: false` verdiği için dizinin anahtarları değişmeden kalır.

İki kural buradan çıkar. Birincisi, yerleşik bir yetenek varsa ona dokunulmaz — davranışı
standarttakinden farklı bir dolgu, sonradan gelen kodun varsayımlarını bozar. İkincisi,
standart olmayan bir ad ekleniyorsa (`sonuncu` gibi) bunun standartla çakışma riski
taşıdığı bilinmelidir; ileride aynı ad standarda girerse iki tanım karşı karşıya gelir.

## Sözdizimi Neden Saptanamaz

Yöntem yoklaması yalnızca **çalışma zamanında var olan** şeyler için işe yarar. Yeni bir
sözdizimi bu yolla sınanamaz, çünkü dosyanın tamamı yürütmeden önce ayrıştırılır. İlk
derste görüldüğü gibi, ayrıştırma hatası dosyanın hiçbir satırını çalıştırmaz. Bir
sözdizimini tanımayan ortamda, o sözdizimini içeren dosya bütünüyle reddedilir; içine
yazılmış bir denetim de çalışma fırsatı bulamaz.

Bu yüzden yetenek eksiğini kapatmanın iki ayrı araç sınıfı vardır:

- **Kaynaktan kaynağa çevirici (transpiler)**, yeni sözdizimini eski sözdizimine
  çevirir. Ayrıştırma sorununu kaynağı değiştirerek çözer.
- **Dolgu (polyfill)**, eksik yerleşik yöntemi çalışma zamanında tanımlar. Sözdizimini
  değiştiremez; yalnızca eksik nesne ve yöntemleri ekler.

İkisi farklı problemleri çözer ve birbirinin yerine geçmez. Bu kurs her ikisini de
kullanmaz; örnekler doğrudan çalıştırılabilecek sözdizimiyle yazılmıştır.

## Standardın Kendisini Okumak

Standart metni bir öğretim kitabı değildir; kesin bir tanım belgesidir. Yapısı
öğrenildiğinde, "bu ifade neden bu sonucu verdi" sorusunun tartışmasız yanıtını verir.
Metinde her işleç ve her yerleşik yöntem, numaralanmış adımlarla tanımlanmış bir **soyut
işlem** çağrısına indirgenir. Örneğin toplama işleci, önce her iki işleneni ilkel değere
çeviren bir soyut işlemi çağırır; sonucun sayı toplaması mı yoksa metin birleştirmesi mi
olacağına o adımın sonucuna göre karar verir.

Kursun Değerler ve Tipler konusu bu adımları Türkçeleştirerek izleyecek. Amaç, sonucu
ezberlemek değil, sonucu üreten adımları takip edebilmektir. Bir kez izlendiğinde,
karşılaşılmamış bir ifadenin sonucu da aynı yöntemle bulunabilir.

## Özet

- Dilin tanımı ECMA-262 belgesidir; baskılar birikimlidir ve yayımlanmış özellikler
  kaldırılmaz.
- Öneriler sıfırdan dörde numaralanmış beş aşamadan geçer; aşama 4'e ulaşan öneri bir
  sonraki baskıya girer.
- Geriye dönük uyumluluk, hatalı kabul edilen davranışların da korunmasına yol açar;
  `typeof null` sonucunun `"object"` olması bunun örneğidir.
- Yeni yetenekler çoğunlukla eskisinin yerine değil yanına eklenir; `var` yanında `let`
  ve `const` bulunması bu kalıptır.
- Yerleşik bir yeteneğin varlığı `typeof` yoklamasıyla sınanır; sözdizimi ise
  ayrıştırma aşamasında değerlendirildiği için çalışma zamanında sınanamaz.

## Sonraki Adım

Bildirim türlerinin yan yana durması bu dersin son gözlemiydi. Sonraki ders bu üç
bildirimi karşılaştırır: `var`, `let` ve `const` arasındaki fark yalnızca yazım tercihi
değildir; adın hangi bölgede görüldüğünü, ne zaman erişilebilir olduğunu ve yeniden
bağlanıp bağlanamayacağını belirler. Ölçüm betiği bu farkın gözlemlenebildiği bir
biçime getirilecek.
