ECMAScript nedir ve ECMA6 ile gelen yenilikler

ECMAScript. Ya da şöyle diyelim: Javasript

ECMA International

Ecma kar amacı gütmeyen bir standardizasyon firmasıdır. Standartlarını koyduğu diller arasında Javascript, C#, C++ gibi günümüzde yoğun bir şekilde kullanılan diller bulunmaktadır. Aynı zamanda ISO dosya standardı, CLR, birçok floopy disk standartı da bulunmaktadır.

Javascript’in tarihi

Javascript ilk olarak, Web için yapacağı geliştirmelerde, kendi ihtiyaçlarını karşılamak adına Netscape’ten Brendan Eich’in Mocha adı ile geliştirdiği bir dildir. Daha sonra ismi Livescript olmuştur. Ama o dönemin geliştiricileri Livescript’i kabul etmek istememişlerdir. Yeni bir dile gerek olmadığını düşünen birçok yazılımcı vardır. Çünkü o dönemde Livescript’in yaptığı işleri “Java Applet” onlara göre pekala yapmaktadır. Ama gerçekte olan ise Java Applet’in yeterli ve iyi bir dil olmadığıdır. Java Applet’i savunan yazılım geliştiricileri kazanmak adına, Livescript ismi Javascript yapılmıştır. Bu da tamamen küçük bir pazarlama stratejidir. Ve işe yaramıştır.

Daha sonra Javascript’in standardize edilmesi için ECMA’ya başvurulur. ECMA, ECMA-262 kodu ile bu dili standartlaştırır. İsmini de ECMAScript olarak değiştirir. Ama dil hala geliştiriciler arasında Javascript olarak anılmaya devam eder. Hatta bu durum ile ilgili Eich daha sonra şöyle demiştir, “ECMAScript ismi küçük bir deri hastalığı ismini andırıyordu. Kimse aslında bu ismi benimsemedi”.

ECMA-International, şimdiye kadar ECMAScript’in 5 versiyonunu yayımlamıştır. Ve 6. sürümü(Harmony veya ES.Next kod adı ile) yoldadır. Bu ne anlama geliyor? ECMAScript’in(yani Javascript’in) yeni versiyonu yolda. ECMA’nın 6. sürümü ile birlikte Javascript’te yeni özellikler eklenecek.

İlk 5 versiyona kısa bir bakış ve ECMA6 ile birlikte gelecek olan özellikler

ECMAScript’in ilk versiyonu 1997 yılında yayımlandı.

1999 yılında çıkartılan 3. versiyonunda regular expression, try/catch bloğu gibi son derece önemli şeyler geldi.

4.versiyon, dilin kompleksliğine dair olan görüş farklılıkları nedeniyle tamamen hazır olmasına rağmen çıkartılmadı ve iptal edildi. Ama bu versiyondaki bazı özellikler, ECMA6(Harmony)’nın bünyesinde bulunması için önerilmekte.

5.versiyon(4.’sü iptal edildiği için bu versiyonu 4 olarak kabul edebiliriz) ile gelen en büyük özellik ise JSON desteği oldu. Bununla birlikte, bazı yeni özellikler ve 3. versiyondaki karmaşık durumların düzeltilmesi gibi şeyler de geldi.

ECMAScript 6 ile gelen özellikler

1- Const

Hepimizin aşina olduğu “sabit” kavramı ECMA6 ile birlikte geliyor. Örn:

const a = 2;
alert(a);

dediğimizde ekrana 2 yazıyor. Daha sonraki satırda ise a’yı setlediğimizde, değişkenin değerinin değişmemiş olduğunu görüyoruz.

2- Let

Sadece tanımlandığı blok içersinde geçerli bir değişken tipi ve expression olarak kullanılabilen bir ifade. Bu sayede Javascript’te global değişkenler tanımlayabiliyor olacağız. Örn:

var a=2;
let(a=3) alert(a);

bunun sonucunda ekrana 3 yazılacaktır. Ama hemen altında tekrar alert(a) dersek, bu kez ekrana 2 yazdıracaktır. Çünkü let ile sadece ilgili satırda geçerli olacak şekilde bir tanımlama yaptık. Yine başka bir örnek:

var a=2;
if(true)
{
let a = 3;
alert(a);
}
alert(a);

burada ise if bloğu içersinde ekrana 3 yazılacakken, if bloğu dışarsındaki alert için ekrana 2 yazılacaktır. Let’in bir diğer kullanımı da expression şeklinde. Örn:

var a=3;
var b=2;
alert(let( a=a+7,b=b+8  ) a+b);//20
alert(a+b);//5

3- Iterators

Array’ler içersinde bulunan objelere erişimi sağlayan iterator kavramı Ecma6 ile gelecekler arasında. Örn:

var obj = [1,1,2,3,5];
var it = Iterator(obj);
while(true){
alert(it.next());
}

böylelikle obj içersindeki elemanlar, index’leri ile birlikte dönüyor. Aynı şekilde bir Json nesnelerimizin içinde veya bir Array içersinde bu şekilde dolaşabiliyoruz.

Nesnelerimiz içersinde keyValuePair şeklinde dolaşmak için ise şu şekilde bir yol izlememiz gerekiyor:

var obj = {Ad:”Onur”, Soyad:”Aykaç”,Konu:”Ecma6”};
for(var[key,value] in Iterator(obj)){
alert(key+”= “+value);
}

Iterator’ler ile birlikte yield kavramı da geliyor. Bir örnek üzerinden gidelim. 1 ile 10 arasındaki sayıların karelerini geri dönen bir function düşünelim. Bunun için daha önceden yapmamız gereken, tüm sayıların karelerinin bulunduğu bir array döndürmekti. Ama yield keyword’ü ile şunu yapabiliyoruz:

for(var i = 1; i<=10;i++){
yield i * i;
}

yeni yield bir return işlemi yapmakta ama return keyword’unden farkı, döngüyü devam ettirmesinde. Bu sayede bir Array’e ihtiyaç duymadan 1 ile 10 arasındaki tüm sayıların karelerine ulaşabiliyoruz. Veya bir function içersinde: yield “1. Sonuç”; yield “2. Sonuç”; yazdığımızda, geriye “1. Sonuç” ve “2. Sonuç” döndürmüş oluruz.

4- Set

Set bir dizi. Fakat Array’den farklı, içindeki bulundurduğu kayıtlarda dublicate’e izin vermemesi. Örn:

var items=new Set();
items.add(1);
items.add(2);
items.add(2);

Burada items instance’ının length’i 2 olacaktır (items.size() şeklinde ulaşılabilir). Set, içindeki verinin tipine göre hareket eder. Örn:

var items=new Set();
items.add(1);
items.add(2);
items.add(“2”);

bunun sonucunda items.size() bize 3 döndürecektir. Çünkü son eklenen verinin tipi string’tir. Diğerleriyse sayıdır. Set türünden bir dizi içersinde verinin var olup olmadığını has metodu ile kontrol edebiliriz.

var items=new Set();
items.add(1);
items.add(2);
items.has(2);//true
items.has(3);//false

5- for...of ve for...in

Iterator uygulanabilen(array gibi) nesnelerin elemanları arasında dolaşmayı sağlayan loop yapısı.

6- Multi-line strings

String tanımlamalarımızı çoklu satırda yazabilme imkanı sunuluyor. `(kesme işareti ALT GR+,) sembolü ile kullanılıyor. Örn:

var msg = `merhaba
dünya`;

7- String format

String ifadelerin içine parametre ile başka değişkenleri sokmamıza yarıyor. Örn:

var ad = “Onur”;
var soyad=”Aykaç”;
var fullName=`Merhaba ${ad} ${soyad}`;

bunun sonucunda “Merhaba Onur Aykaç” döner. Yine C’den hatırladığımız %s de string format’la beraber gelen özellikler arasında. Örn:

alert(“merhaba %s”,”ecma6”);

Integer için %i ve %d, Float içinse %f kullanılıyor. Örn:

alert(“bu cümle %d harfli bir cümledir”,31);

8- Proxy

Yarattığımız objelerin property’lerini dinamik olarak yaratıp erişme imkanı sunuyor. Örn:

var sayHello = Proxy.create({
  get: function(obj, propertyName) {
  return 'Merhaba '+ propertyName;
  }
});
alert(sayHello.Onur);//Merhaba Onur döner.

9- Maps ve WeakMap

Key/value olarak veri tutan bir dizi türü. Yani dictionary. Map ile WeakMap arasındaki fark ise, WeakMap’in enumerable olmaması. Örn:

var wm = WeakMap();
var myObj= “merhaba”;
wm.set(myObj,”dünya);
wm.get(myObj);//dünya döndürür

10- Class

Class tanımlamaları da Ecma6 ile gelen özellikler arasında. Örn:

class Hayvan{
constructor(tur){
this._ tur = tur;
}
}

Tabii class’larla birlikte inheritance kavramı da geliyor.

class Kedi extends Hayvan{
constructor(tur,ses){
super.constructor(tur);
this._ses=ses; 
}
}

Kullanımı ise:

let pise = new Kedi(“Kedi”,”miyav”);

11- is ve isnt operatörü

Class ve inheritance ile birlikte gelmesi elzem olan is ve isnt da Ecma6 ile gelen operatörler arasında. Örn:

if(pise is Kedi)//true
if(pise is Kopek)//false

12- Destructuring Assignment

Dairesel bir şekilde verileri değiştirme/atama işlemi için kullanılır. Örn:

let x = 1;
let y = 2;
[x,y] =[y,x]

bu durumda x=2 olacak ve y=1 olacak.

13- Args (parameters)

Sayısı bilinmeyen function parametreleri için kullanılır. “...theArgs” olarak kullanılır. Örn:

function argsTester(...theArgs){
alert(theArgs.length);
}
argsTester(a,b,c);//3 döndürür
argsTester(a,b);//2 döndürür
argsTester();//0 döner

Gelen diğer fonksiyon ve özelliklerse şöyle:

  • RegExp

  • Bazı matematiksel fonksiyonlar: pi, cos...

  • Datetime için fonksiyonlar: setFullYear, setDate, getMinutes...

  • String için fonksiyonlar: lastIndexOf, match, replace, tolowercase, touppercase...

  • Try/catch mekanizması

Ecma6 özellikleri henüz tasarı aşamasında. Yani standartlaşmadı. Ama yine de bazı browser’lar yenilikleri implemente etmiş durumda. Firefox bu konuda en hızlı ilerleyen browser sanırım. Chrome ise, Chrome Canary ile birçok şeyi implemente etmiş. Veya normal Chrome’dan chrome://flags’e girerek, Experimental Javascript’i enable etmeniz gerekiyor. Tabi tüm bunlar, draft’ta belirtilen yeni özellikleri denemeye yetmiyor. Büyük çoğunluğu ya implemente edilmemiş ya hatalı çalışıyor ya da bug bulunduruyor. En iyisi Ecma6’nın standartlaşmasını beklemek. O gün geldiğinde her şey daha güzel olacak.

ecma6ecmajavascriptecmascript
onur aykac tarafından yazıldı.

Yorumlar

bir isim
bir isim
12 Şub, 2013 05:37

https://developer.mozilla.org/en-US/docs/JavaScript/ECMAScript6supportinMozilla

23 Şub, 2016 08:41

Fantastik!

reyiz k&#246;kl&#252;
reyiz köklü
18 Mar, 2016 05:51

eline saglık reis

no name
no name
20 May, 2016 02:24

bir gelişme var mı acep son durum nedir standartlaşmışlıkla ilgili

16 Oca, 2017 11:46

Cok guzel bir yazi. Tesekkurler.

17 Şub, 2017 01:02

Thank you for a very enlightening and informative post, it seems a shame that certain types use these posts for link building campaigns, and neglect to read....

fgLaf
fgLaf
10 Nis, 2017 03:51

http://buycialisph.review/ buy real cialis

Yorumlarınız

Yorum

Önizleme