SORU
8 Mart 2012, PERŞEMBE


Nedir &;*" JavaScript " fonksiyonu?

this sayfa içinde yeni bir JavaScript işlevi bir tür buldum:

// NOTE: "function*" is not supported yet in Firefox.
// Remove the asterisk in order for this code to work in Firefox 13 

function* fibonacci() { // !!! this is the interesting line !!!
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev   curr];
        yield curr;
    }
}

Ben function* olmanın ne demek olduğunu zaten what yield, let and [?,?]=[?,?] do, biliyorum ama hiçbir fikrim yok. Ne oldu?

P. S. impossible yıldız işareti ile ifadeleri aramak için Google çalışıyor, (they're used as placeholders) rahatsız etmeyin.

CEVAP
8 Mart 2012, PERŞEMBE


ECMA için önerilen bir sözdizimi.gelecek.

Mozilla Dave Herman EcmaScript.next hakkında bir konuşma yaptı. 30:15 jeneratörler hakkında konuşuyor. Daha önce Mozilla deneysel olarak önerilen dil değişiklikleri Komitesi yönlendirmek yardımcı olmak için nasıl uyguladığını anlatıyor. Dave yakından Brendan Eich, Mozilla CTO (sanırım), ve orijinal JavaScript tasarımcı ile çalışır.

ECMA çalışma grubu wiki hakkında daha fazla ayrıntı bulabilirsiniz: http://wiki.ecmascript.org/doku.php?id=harmony:generators

Çalışma grubu (TC-39) ECMA dair genel bir kabul vardır.bir sonraki jeneratör yineleyici teklifi falan olmalı, ama bu bir son değildir. Bu dili sonraki sürümünde bir değişiklik olmadan gösterilmesini düşünmemelisiniz, ve eğer değiştirmek değil ise bile, muhtemelen yaygın bir süreliğine diğer tarayıcılarda görünmez.

Genel bakış

Birinci sınıf, nesneleri askıya yürütme bağlamı (yani, fonksiyon aktivasyon) şifrelenmiş olarak temsil coroutines. Önce sanat: Python, Simge, Lua, Düzeni, Smalltalk.

Örnekler

“Fibonacci sayıları 2. (davranış rağmen sıra sonsuz ^sup>53):

function* fibonacci() {
    let [prev, curr] = [0, 1];
    for (;;) {
        [prev, curr] = [curr, prev   curr];
        yield curr;
    }
}

Jeneratörler döngüler tekrarlanır üzerinde olabilir:

for (n of fibonacci()) {
    // truncate the sequence at 1000
    if (n > 1000)
        break;
    print(n);
}

Jeneratör kullanımına

let seq = fibonacci();
print(seq.next()); // 1
print(seq.next()); // 2
print(seq.next()); // 3
print(seq.next()); // 5
print(seq.next()); // 8

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • midomansour

    midomansour

    19 EYLÜL 2009