CoffeeScript'in gelişmiş kullanımı

İçindekiler
Geçmiş eğitimlerde sınıflarla çalışıyorduk, böylece uygulamamızı daha modüler hale getiriyorduk, hatta asenkron çalışmanın nasıl yapılacağını derinlemesine görüyorduk. Kahve Komut Dosyası bir dil olarak, böylece bize onunla çalışmak için daha fazla seçenek sunuyor.
Bu kavramlara hakim olduktan sonra, bir adım daha ileri gitmenin ve bildiklerimizi daha temiz, daha işlevsel ve elbette daha güçlü kod yazmak için kullanmanın zamanı geldi. Nasıl güçlü kullanıcılar olunacağını öğrenmenin zamanı geldi. Kahve Komut Dosyası.
Artık uygulamamızda sınıfları nasıl kullanacağımızı bildiğimize göre, onunla sorun yaşamamız an meselesi. bağlam. Basit fonksiyonlara sahip olduğumuzda, bu fonksiyonun kapsamında hangi verilere sahip olduğunu görmek oldukça kolaydır, global değişkenleri, fonksiyon içinde tanımlanan değişkenleri ve fonksiyon oluşturulurken yerel kapsamda tanımlanan herhangi bir değişkeni bilir.
Ancak yöntemler nesnelere bağlı olduğunda, bu biraz daha karmaşık hale gelir. Bunu göstermek için, bu sorunu görebileceğimiz bir örnek görelim ve sonra nasıl olduğunu göreceğiz. Kahve Komut Dosyası bize yardımcı olabilir:
 sınıf Gemi kaldırma demiri: (doneCallback) -> console.log "Çapa kaldırma." setVel: (hız) -> console.log "Hızı # {speed} olarak ayarlamak" yelken açmak: -> @levantarAncla @ fixVel 70
Diyelim ki kodumuza göre hemen yola çıkmak istiyoruz, bunun için fonksiyonumuzu çağırmak için aşağıdakileri yapıyoruz:
 bot = yeni Barco bot.zarpar ()
Yakından bakarsak ve bu kodu gerçek dünyaya aktarırsak anlayabiliriz ki, çapa kaldırma hemen olmaz, yelken açabilmek için çapanın tamamen kalkmasını beklememiz gerekir. ekleyerek bu sorunu çözebiliriz. geri çağırmak ve tamamlanıp tamamlanmadığını soruyoruz, böylece bu eylemin ne kadar sürdüğünü öğreneceğiz ve bittiğinde işlevimizi çağıracağız, görelim:
 liftAnchor: (doneCallback) -> console.log "Çapa kaldırılıyor." geri arama yapılırsa? setTimeout doneCallback, 1000
Gördüğümüz gibi, sadece geri arama varsa çağırıyoruz, bu şekilde bu işlemin tamamlandığından emin oluyoruz ve bu nedenle işlevimizi değiştirmeliyiz. yelken açmak:
 yelken açın: -> @levantarAncla -> @ fixVel 70
Şimdi yaptığımız şey işlevi çağırmak yelken açmak Bu, çapayı kaldırdıktan sonra, çapa tamamen yükselene kadar hareket etmememizi sağlar. Bu oldukça iyi görünüyor, kodumuzu derleyeceğiz ve oluşturulan .js dosyasını bir HTML'ye ekleyerek yanıtı konsola göre göreceğiz:

Resimde gördüğümüz gibi, fonksiyonun mevcut olmadığını söyleyen bir hata aldık. Ne oldu? O çok basit, JavaScript değeri belirledi Este çağrıldığından beri fonksiyonun çağrılma biçiminde bot.zarpar değer Este nesneye bağlı bot, yani bu küresel bağlama bağlı ve bizim istediğimiz bu değil.
Yapmak istediğimiz şey bundan emin olmak Este her zaman örneğine bağlıdır bot geri arama gövdesinin içinde ve şanslıyız, çünkü Kahve Komut Dosyası bu durumda bir işlevi vardır. Bunun için fonksiyonu ile bildireceğiz. şişman ok veya kalın ok, bu şekilde fonksiyon Este bildirildiği bağlamla bağlantılı olarak, bu değişiklikle kodumuzun nasıl göründüğüne bakalım:
 sınıf Gemi kaldırma demiri: (doneCallback) -> console.log "Çapa kaldırma." geri arama yapılırsa? setTimeout doneCallback, 1000 setVel: (hız) -> console.log "Hızı # {speed} olarak ayarlamak" yelken açmak: -> @levantarAncla => @fixVel 70 bot = yeni Barco bot.zarpar ()
Dosyamızı derleyelim ve nasıl olduğunu görelim Kahve Komut Dosyası Kalın ok işleviyle başarı bağlama:

Bu ne yapar Kahve Komut Dosyası ilan etmeden önce geri çağırmak yerel bir değişken ayarlamaktır _Este, hangi anlamına gelir Esteolmasına rağmen, geri çağırmak değere dinamik olarak bağlıdır, hala bildirildiği yerel bağlamı yükler. Son olarak, oluşturulan dosyamızı çalıştıracağız ve ardından hatanın nasıl çözüldüğünü göreceğiz:

İle uygulamalarımızda bağlam sorununun nasıl çözüleceğini zaten gördükten sonra Kahve Komut Dosyası İşten tasarruf etmemize yardımcı olacak oldukça basit ama güçlü bir teknik göreceğiz. Bu gelişmiş bir teknik değildir, ancak bizim tarafımızdan fazla çaba harcamadan kodumuzda iyileştirme yapmanın mantıklı bir yoludur.
not almane tekniği not alma fonksiyon her çağrıldığında yeniden hesaplamak yerine bir fonksiyonun değerlerini saklamaktır. Artık sınıfları ve nesneleri nasıl kullanacağımızı bildiğimize göre, bu bilgiyi bunları kendi içinde uygulamak için kullanabiliriz. Kahve Komut Dosyası ve söz konusu tekniği kullanın.
işlemini gerçekleştirmenin birçok yolu vardır. not alma, bu eğitimde her şeyi basit tutacağız. Bunun için yapacağımız şey, belirli bilgiler istendiğinde saklanıp saklanmadığını doğrulayacağız, varsa hemen iade edeceğiz, aksi takdirde hesaplayabilir ve ileride kullanmak üzere saklayabiliriz. Bu teknik, bir yanıt almak için karmaşık bir algoritma kullanmamız gerektiğinde veya bilgi elde etmek için yavaş bir ağ kullandığımızda son derece kullanışlıdır.
Bu tekniği göstermek için koda bakalım:
 class Rocket getPath: -> @path? = @doMathComplexProcess ()
Kodun bu bölümünü daha iyi açıklamak için, nasıl olduğunu görmek için onu derleyeceğiz. Kahve Komut Dosyası inşa etmek JavaScript tekniğimizin geliştirmemizde bizi kurtarmak zorunda kalacağına göre, kodumuzun neye benzediğini görelim:

BÜYÜT

Kodumuzda görebileceğimiz gibi, yörünge hesaplaması yalnızca ilk kez gerçekleştirilecektir. rica etmek ve saklanan değer bundan sonra kullanılacaktır. Kodumuzda da görebiliriz Kahve Komut Dosyası üçüncül operatörün yardımını aldığımızı ?= yolun boş olması durumunda ifadeyi değerlendirecek olan, ayrıca ifadenin sonucunu döndürecek fonksiyonların örtük dönüşünden de yardım alacağız, bu durumda değeri @Yörünge önceden saklanmış mı yoksa yeni hesaplanmış mı.
Ancak yeni tekniğimizle yapabileceğimiz tek şey bu değil. Kahve Komut Dosyası, bir veri yapısı kullanarak birden fazla değer bile depolayabiliyoruz, gelin bunu nasıl yapabileceğimize bir bakalım:
 class SecurityGateway hasAccess: (guard) -> @access? = {} @access [guard.plate_number]? = doğrulamaCredentials guard.plate_number
Kodun bu bölümünün yaptığı şey, nesnemizde, erişim talep eden her koruma için sonucun saklanmasıdır, onları nesnemizde tanımlayabilmek için yalnızca benzersiz bir şeye ihtiyacımız olacak, bu nedenle bu görev için plaka numarasını kullanalım, bakalım. derlediğimizde kodumuz nasıl çevrilir:

BÜYÜT

Bu tekniğin yalnızca programımızın yürütülmesi sırasında değişmeyecek bilgilerle kullanılması gerektiğini belirtmek önemlidir, böyle olması durumunda, buna dayalı bir çözüm uygulamanızı öneririz. önbellek.
Sonunda seçenekleri bir fonksiyona geçirmenin bir yolunu göreceğiz, bu özel bir fonksiyon değil. Kahve Komut DosyasıDaha çok, dilin birçok özelliğinden yararlanan, bunları anlaşılması kolay bir kalıpta kullanan ve ortaya çıkabilecek birçok durumda aynı derecede yararlı olan bir gelenektir.
O nasıl çalışır?Bunun arkasındaki fikir basittir, bunu kabul eden bir fonksiyona sahip olmaktır. seçenekler nesnesi bu işlevin bağımsız değişkenleri için ilişkisel anahtarlar içerebilir. Bu, seçeneklerin çağrıldıkları koddan anlaşılmasını kolaylaştırır çünkü her bir değerin ne yaptığını tanımlayan küme parantezleri vardır. Bu aynı zamanda, nesne anahtarları buna bağlı olmadığından ve gerekmediğinde atlanabileceğinden, argümanların yanı sıra sıralarına da göz atma zorluğunu azaltır.
uygulamak için seçenekler nesneleri ilk önce boş bir argümana varsayılan olarak isteğe bağlı argümanlar kullanacağız. Bu sayede arama yaparken değerlere ihtiyaç duyulmaması durumunda seçenekleri atlayabiliriz:
 launchNave = (isim, seçenekler = {}) -> seçeneklerse dönüş.drift kuru kalkış ()
Şimdi üçüncül operatörü kullanacağız ?= özel bir varsayılan değere sahip olmasını istediğimiz seçeneklerin değerlerini doldurmak için:
 launchNave = (name, options = {}) -> options.count? = 10 console.log "# {i}…" i için [options.count… 0] dönüş if options.drift kuru kalkış ()
Son bir değer tanımlıyoruz ve operatörü kullanıyoruz ? tek bir yerde kullanılması durumunda:
 launchSave = (name, options = {}) -> checkFuel (options.waitComb? 100) options.count? = 10 console.log [options.count… 0]'da i için "# {i}…" seçenekler ise döndürür. kuru kalkış ()
Son olarak, izin verilen sözdiziminden yararlanıyoruz. Kahve Komut Dosyası seçenekleri fonksiyonumuza parantez olmadan göndermek, bize oldukça basit ve doğal bir çağrı yapmak için:
 launchShip "Millennium Falcon", DryGear: doğru, geri sayım: 15
Bitirmek için dosyamızı derleyeceğiz ve kodumuzun çıktısını JavaScript:

BÜYÜT

İkincisi ile, yalnızca ileri düzey kullanım yöntemlerini öğrenemeyeceğimiz bu öğreticiyi bitirdik. Kahve Komut Dosyası daha ziyade daha iyi kod yazmamıza yardımcı olacak teknikler, sürekli kullanım ve araştırma ile uygulama geliştirmek için en iyi uygulamaları kullanan daha iyi geliştiriciler olabiliriz.
wave wave wave wave wave