JavaScript ES6+ Özellikleri: Modern JavaScript Rehberi

JavaScript ES6+ Özellikleri: Modern JavaScript Rehberi

Modern JavaScript denildiğinde kastedilen şey, 2015 yılında yayımlanan ES6 (ECMAScript 2015) ve sonrasındaki sürümlerle dile eklenen özelliklerdir. ES6, JavaScript tarihindeki en büyük güncellemeydi: blok kapsamlı değişkenler, arrow function'lar, modüller, Promise ve daha fazlası bu sürümle geldi. Bugün React, Vue veya Node.js ile yazılan hemen her kod bu özelliklere dayanır. Bu rehberde en çok kullanacağınız ES6+ özelliklerini gerçek kod örnekleriyle ele alıyoruz.

let ve const: Modern JavaScript Değişkenleri

Eski var anahtar kelimesinin iki büyük sorunu vardı: fonksiyon kapsamlı olması ve bildirimden önce erişilebilmesi (hoisting davranışı). ES6 ile gelen let ve const blok kapsamlıdır:

if (true) {
  let sayi = 5;
  const PI = 3.14159;
}
// console.log(sayi); // ReferenceError: sayi is not defined

Kural basittir: varsayılan olarak const kullanın, değeri değişecekse let tercih edin. const referansı sabitler ama nesne içeriğini dondurmaz:

const kullanici = { ad: "Ayşe" };
kullanici.ad = "Mehmet"; // geçerli
// kullanici = {};       // TypeError: Assignment to constant variable

Arrow Function'lar

Arrow function'lar daha kısa bir sözdizimi sunar ve kendi this bağlamlarını oluşturmaz; this değerini tanımlandıkları kapsamdan alırlar:

// Klasik fonksiyon
function topla(a, b) {
  return a + b;
}

// Arrow function
const topla2 = (a, b) => a + b;

// Dizi metotlarıyla birlikte çok kullanışlıdır
const sayilar = [1, 2, 3, 4, 5];
const kareler = sayilar.map(n => n * n);     // [1, 4, 9, 16, 25]
const ciftler = sayilar.filter(n => n % 2 === 0); // [2, 4]

Tek parametre varsa parantez, tek ifade varsa süslü parantez ve return yazmanız gerekmez. Ancak nesne metotlarında dikkatli olun: metodun this ile nesneye erişmesi gerekiyorsa klasik fonksiyon kullanmak daha doğrudur.

Template Literal'ler

Ters tırnak (backtick) ile yazılan template literal'ler, string birleştirme derdini bitirir ve çok satırlı metin destekler:

const ad = "Zeynep";
const yas = 28;

const mesaj = `Merhaba ${ad}, ${yas} yaşındasın.
Gelecek yıl ${yas + 1} olacaksın.`;

${} içine herhangi bir JavaScript ifadesi yazılabilir: değişken, fonksiyon çağrısı, aritmetik işlem.

Destructuring: Değerleri Ayrıştırma

Destructuring, dizi ve nesnelerden değerleri tek satırda değişkenlere çıkarmanızı sağlar:

// Nesne destructuring
const urun = { isim: "Klavye", fiyat: 750, stok: 12 };
const { isim, fiyat } = urun;

// Varsayılan değer ve yeniden adlandırma
const { stok: adet = 0 } = urun;

// Dizi destructuring
const [ilk, ikinci] = ["elma", "armut", "kiraz"];

// Fonksiyon parametrelerinde
function yazdir({ isim, fiyat }) {
  console.log(`${isim}: ${fiyat} TL`);
}
yazdir(urun);

Buna yakından ilişkili iki operatör daha vardır: spread (...) bir dizi veya nesneyi açar, rest ise kalan elemanları toplar:

const a = [1, 2];
const b = [...a, 3, 4];          // [1, 2, 3, 4]
const yeniUrun = { ...urun, fiyat: 800 }; // kopyala ve güncelle
const [bas, ...kalan] = [10, 20, 30];     // bas=10, kalan=[20, 30]

async/await ile Asenkron Kod

JavaScript'te ağ istekleri gibi uzun süren işlemler asenkrondur. ES2017 ile gelen async/await, Promise tabanlı kodu senkron kod gibi okunur hale getirir:

async function kullaniciGetir(id) {
  try {
    const yanit = await fetch(`https://api.example.com/users/${id}`);
    if (!yanit.ok) {
      throw new Error(`HTTP hatası: ${yanit.status}`);
    }
    const veri = await yanit.json();
    return veri;
  } catch (hata) {
    console.error("İstek başarısız:", hata.message);
  }
}

Bilmeniz gereken kurallar:

  • await yalnızca async fonksiyonların içinde (veya modül üst düzeyinde) kullanılabilir.
  • Bir async fonksiyon her zaman Promise döndürür.
  • Hata yönetimi için try/catch blokları kullanılır.
  • Birbirinden bağımsız istekleri Promise.all ile paralel çalıştırmak daha hızlıdır:
  • const [kullanici, siparisler] = await Promise.all([
      fetch("/api/user").then(r => r.json()),
      fetch("/api/orders").then(r => r.json()),
    ]);
    

    ES Modules: import ve export

    ES6 modülleri, kodu dosyalara bölüp paylaşmanın standart yoludur:

    // matematik.js
    export const PI = 3.14159;
    export function topla(a, b) {
      return a + b;
    }
    export default function carp(a, b) {
      return a * b;
    }
    
    // app.js
    import carp, { PI, topla } from "./matematik.js";
    console.log(carp(2, PI));
    

    Tarayıcıda kullanmak için script etiketine type="module" eklenir; Node.js tarafında ise package.json dosyasına "type": "module" yazılır veya .mjs uzantısı kullanılır. export default her dosyada bir tane olabilir, adlandırılmış export ise istediğiniz kadar.

    ES6 Sonrası Gelen Diğer Yenilikler

    ECMAScript 2015'ten bu yana dil her yıl güncellenmektedir ve bazı küçük ama çok kullanışlı eklemeler günlük kodunuzu sadeleştirir:

    // Optional chaining (ES2020): iç içe alanlara güvenli erişim
    const sehir = kullanici?.adres?.sehir; // alan yoksa undefined döner, hata fırlatmaz
    
    // Nullish coalescing (ES2020): yalnızca null/undefined için varsayılan
    const adet = girilenAdet ?? 1; // 0 girilirse 0 kalır, || operatöründen farkı budur
    
    // Array.prototype.includes (ES2016)
    const izinli = ["admin", "editor"].includes(rol);
    

    Özellikle ?. ve ?? operatörleri, API'den gelen ve bazı alanları eksik olabilen verilerle çalışırken yazdığınız savunmacı kontrol kodunu büyük ölçüde azaltır.

    Nereden Devam Etmeli?

    Bu yazıda değindiğimiz özelliklerin tamamı bugün tüm güncel tarayıcılar ve Node.js tarafından desteklenmektedir. En güvenilir başvuru kaynağı MDN Web Docs adresidir; her özelliğin sözdizimini, örneklerini ve tarayıcı uyumluluk tablolarını orada bulabilirsiniz. Öğrendiklerinizi pekiştirmek için küçük bir proje önerisi: fetch ve async/await kullanarak halka açık bir API'den veri çeken, sonuçları map ve template literal ile listeleyen bir sayfa yazın. Modern JavaScript'i öğrenmenin en kalıcı yolu, bu özellikleri gerçek bir problemde art arda kullanmaktır.

    Sıkça Sorulan Sorular

    ES6 nedir ve neden önemlidir?
    ES6 (ECMAScript 2015), JavaScript diline let/const, arrow function, class, modül ve Promise gibi köklü yenilikler getiren büyük güncellemedir. Bugün yazılan neredeyse tüm modern JavaScript kodu bu özelliklerin üzerine kuruludur.
    let ile const arasındaki fark nedir?
    Her ikisi de blok kapsamlıdır; let ile tanımlanan değişkene yeniden değer atanabilir, const ile tanımlanana atanamaz. const bir nesneyi işaret ediyorsa nesnenin içeriği yine değiştirilebilir, yalnızca referans sabittir.
    async/await Promise yerine mi kullanılır?
    Hayır, async/await Promise mekanizmasının üzerine kurulu bir sözdizimidir. Bir async fonksiyon her zaman Promise döndürür; await ise Promise çözülene kadar bekler. Yani Promise bilgisi async/await kullanmak için de gereklidir.
    WxDigitals
    WxDigitals

    WebTeknoloji.net editör ekibi; web geliştirme, SEO, hosting ve yapay zeka alanlarında üretilen içeriklerin araştırma, test ve yayın süreçlerini yürütür. Tüm incelemeler gerçek kullanım deneyimine, karşılaştırmalar ise resmi dokümantasyon ve güncel fiyatlandırma sayfalarına dayanır.

    Bu içeriği faydalı bulduysanız…

    Haftalık teknoloji & SEO rehberlerimize katılın, 38 maddelik Teknik SEO Kontrol Listesi PDF'ini hediye olarak hemen indirin.

    Yorumlar (0)

    Henüz yorum yapılmamış. İlk yorumu siz yapın!

    Yorum Yazın