ES12 nedir? ECMAScript 2021 nedir?

Bu yazıda ECMAScript 2021 olarak da bilinen ES12 ile birlikte gelen yenilikleri inceliyoruz.


ES12 nedir? ECMAScript 2021 nedir?

ECMAscript, kısa adıyla ES, Ecma-International tarafından ECMA-262 dokümanında yayınlanan ve her yıl yenilenen JavaScript standartıdır. Asıl amacı javascript için bir standart geliştirerek tüm tarayıcılarda çalışabilen kodlar yazılmasına olanak vermektir. (Ah neydi o Internet Explorer günleri, her browsera ayrı kod yazardık) Bununla birlikte Node.Js gibi sunucu tabanlı motorlarda ECMAScript’le uyum göstermektedir.

ES12 (ESCMAScript 2021) Haziran 2021’de yayınlanan 12. EcmaScript sürümüdür.

ES 12 ile gelen yenilikler

ES 12 ile birlikte tanımlanan yeni özellikler şunlar;

  • String.prototype.replaceAll()
  • Promise.any
  • WeakRef
  • &&=, ||= ve ??= operatörleri
  • Numeric separators

String.prototype.replaceAll()

replaceAll metodu inanılmaz büyük bir yenilik değil fakat sizi regular expressionlar kullanmaktan kurtaracak basit bir ekleme. İsminden de anlaşılabileceği gibi bu metot ile bir string içerisinde aradığınız bir alt stringi bulunduğu her konumda başka bir stringle değiştirebilirsiniz. Örnekle incelersek;

// Tüm x'leri e ile değiştirelim
// xvrxnbal evrenbal haline dönüşecektir.
'xvrxnbal'.replaceAll('x', 'e');

Promise.any

ES 12 ile birlikte yeni bir Promise metodu – Promise.any – geldi. Bu metod birden fazla pormise’i alıp, herhangi biri çözümlendiğinde çözümlenmiş kabul ediliyor. Örnekle incelersek;

try {

    // Promise.any metoduna array içerisinde birden fazla promise gönderiyoruz.
    const firstPromiseResolved = Promise.any(promisesArray);

    // promiselerden herhangi biri çözüldüğünde kodun bu bölümü çalışır
catch(e) {
   // hata oluşursa burası çalışacak
}

Promise.any() Promise’lerden hiç biri çözümlenmezse AggregateError hatası fırlatır. (Catch blogunda hatayı yakalayıp işlem yapabiliriz)

WeakRef

WeakRef, Weak References (zayıf referanslar) için bir kısa yol ve amacı diğer bir nesneye ait zayıf referans tutmak. Normalde başka bir nesnenin referans gösterdiği nesneler ‘garbage collector’ tarafından temizlenmezken, weakref tipinde bir referans varsa garbage collector bu referansı temizleyebiliyor. Zayıf bağlantı kurduğunuz bir nesne, varsa başka bir nesne ile güçlü bağlantısını kaybettikten sonra her a temizlenebilir (veya uzun süre temizlenmeden kalabilir.) Javascript motorlarının garbage collection algoritmaları farklı çalıştığından veya aynı motorun bir sonraki versiyonunda değişebileceğinden davranışın nasıl olacağını kestirmek son derece güçtür. Bu nedenle Ecma mümkünse WeakReference kullanımından kaçınmanızı öneriyor. Her şeye rağmen WeakRef kullanmak isterseniz şöyle kullanabilirsiniz;

const largeObject = new WeakRef({
     name: "CacheMechanism",
     type: "Cache",
});

largeObject.deref();
largeObject.deref().name;
largeObject.deref().type;

Mantıksal Atama Operatörleri (Logical Assignment Operators)

ES12 ile birlikte üç yeni mantıksal atama operatörü geldi, bunlar &&=, ||= ve ??= . Bu opereatörler sayesinde bir değişkene değer atarken mantıksal ifadeler kullanabiliyoruz. Örneklerle inceleyelim;

ES12 &&= Operatörü

let number1 = 10;
let number2 = 15;

number1 &&= number2;

Bu kodu bu operatör olmadan önce şöyle yazmamız gerekiyordu

let number1 = 10;
let number2 = 15;

if (number1) {
    number1 = number2
}

Özetle soldaki değişkenin değeri true döndürüyorsa, sağdaki değişkenin değerini soldakine atıyoruz.

ES12 ||= Operatörü

let number1 = null
let number2 = 15;

number1 ||= number2;

Bu kodu bu operatör olmadan önce şöyle yazmamız gerekiyordu

let number1 = null
let number2 = 15;

if (!number1) {
    number1 = number2
}

Bir önceki örneğin aksine, soldaki değişken false ise sağdaki değişkenin değerini soldaki değişkene atıyoruz.

ES12 ??= Operatörü

let number1 = null
let number2 = 15;

number1 ??= number2;

Bu kodu bu operatör olmadan önce şöyle yazmamız gerekiyordu

let number1 = null
let number2 = 15;

if (number1 == null || number1 == undefined) {
    number1 = number2
}

Bu operatör soldaki değişken null veya tanımsız ise sağdaki değişkenin değerini soldakine atıyor. Bir önceki operatörde kontrol yalnızca false değerine karşı çalışırken, bu operatörün sadece null veya undefined için çalıştığına dikkat edin.

Nümerik Ayraçlar (Numeric Separators)

Büyük sayılarla çalışmak genelde zordur. Kod içerisinde 123456789473 şeklinde bir sayı gördüğünüzde bunun büyüklüğünü algılamak zor olur. ES12 ile birlikte bu tarz büyük sayılar için ayraç kullanma şansına sahip olduk. Aynı sayıyı 123_456_789_473 şeklinde yazabiliyoruz. Böylece 123 milyar, 456 milyon ….. şeklinde bir sayıyla muhattap olduğumuzu anlamak çok daha kolay oluyor.

// ES12'den önce
const number = 123456789473;

// ES12'den sonra
const number = 123_456_789_473;
Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.

Bir soru, öneri ya da yorumunuz mu var?

Evren Bal

Ben Evren BAL

1996'dan beri ‘Internet canlısıyım!’

Evren Bal Hakkında daha fazla bilgi.

Tanışmak isterseniz hemen sosyal medyadan iletişime geçebilirsiniz.

Bana Ulaşın

Bana Ulaşın

  • Bir sorunuz mu var?
  • Yazıda bir hata mı farkettiniz?
  • Sayfa ile ilgili bir öneriniz mi var?
  • Yazmamı önereceğiniz bir konu mu var?

Lütfen iletişim formunu kullanarak veya sosyal medya hesaplarımdan bana ulaşın.

Digital Ocean Logo

VPS sunucusu denemek ister misiniz?

Digital Ocean'a referans bağlantımdan kayıt olarak yeni oluşturacağınız hesabınızı 60 gün geçerli 100$ kredi ile açabilirsiniz. Bu miktar yüksek performanslı VPS'leri bile denemeniz için yeterlidir.

Yapacağınız onca kurulumun boşa gitmemesi için benim tavsiyem uzun vadede kullanabileceğiniz özellik ve maliyetlerde bir sunucu oluşturmanızdır.

Ücretsiz 100$ kredi bağlantısı

60 günlük denemeniz sonunda eğer devam etmek istemezseniz hiç bir ücret ödemeyeceksiniz. Hizmeti kullanmaya devam etmek isterseniz harcamanız 25$'a ulaştığında benim hesabıma da 25$ kredi yüklenecektir.

Diğer bir deyişle, siz 100$ ücretsiz krediyi her halükarda kazanırken, daha sonra ücretli devam etmeye karar verirseniz ben de 25$ kredi kazanacağım.

Copyright © 2022 - Evren BAL