İç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 70Diyelim 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, 1000Gö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:
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:
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
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_numberKodun 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
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: 15Bitirmek için dosyamızı derleyeceğiz ve kodumuzun çıktısını JavaScript:
BÜYÜT