Self ve İki Nokta Metotları
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 45 / 80.
rect.area(rect) yazımı işe yarar, ancak Lua OOP bölümünde daha iyi bir yöntem öğrendin: iki nokta üst üste. rect:area() tamamen aynı çağrıdır: Lua, iki nokta üst üstenin önündeki tabloyu ilk argüman olarak, yani self değerini otomatik olarak geçirir.
İki nokta üst üste, tanım yerinde de yardımcı olur. function account:deposit(amount), senin için self adlı gizli bir ilk parametre tanımlar:
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Maya", balance = 1500}
function account:deposit(amount: number)
self.balance += amount -- self örtük olarak kullanılır
end
function account:getBalance(): number
return self.balance
endŞeklin self değerini, uygulamada iki nokta üst üste gizlemesine rağmen, açıkça tanımladığına dikkat et: deposit: (self: Account, amount: number) -> (). İki nokta üst üste sözdizimsel bir kolaylıktır; parametre hâlâ vardır ve tür bunu açıkça belirtir. Değer döndürmeyen bir metot, boş dönüş türü -> () ile belirtilir.
Çağrı da zaten bildiğin kurala uyar: account:deposit(250), account.deposit(account, 250) ile aynıdır. OOP bölümündekiyle aynı çalışma zamanı davranışı: Luau yalnızca üzerine türleri ekler.
account değişkenine tür açıklaması eklenmediğine dikkat et. Account türü tamamlanmış tabloyu tanımlar ve tablo bu türe ancak her iki metot da eklendiğinde uyar; local account: Account = {owner = "Maya", balance = 1500} yazmak, katı kipte eksik metotlar için hata verilmesine neden olur.
Görev
Kolayİki yöntemi iki nokta üst üste söz dizimini kullanarak bir hesaba ekle.
- Tablonun altında,
function account:deposit(amount: number)tanımla; bu yöntemamountdeğeriniself.balancedeğerine ekler. function account:getBalance(): numbertanımla; bu yöntemself.balancedeğerini döndürür.account:getBalance()değerini yazdır,account:deposit(120)çağrısını yap, ardındanaccount:getBalance()değerini tekrar yazdır.
Kodu çalıştır düğmesine bas: çıktıda önce 300, ardından 420 görünür.
Kendin dene
type Account = {
owner: string,
balance: number,
deposit: (self: Account, amount: number) -> (),
getBalance: (self: Account) -> number,
}
local account = {owner = "Noah", balance = 300}
-- 1) function account:deposit(amount: number)
-- 2) function account:getBalance(): number
-- 3) balance değerini yazdır, 120 yatır, ardından tekrar yazdır
Luau'ya Giriş bölümündeki tüm dersler
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışma
Parametreleri ve Dönüş Değerlerini Tür BelirtmeAnonim Fonksiyonları Tür BelirtmeDeğer Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriBoolean Değerler için VarsayılanlarDeğişken Sayıda Parametre Alan FonksiyonlarFonksiyon Türlerini TanımlamaTekrar: Tür Belirtilmiş Fonksiyonlar2Temel Türler
Number, String ve Boolean'any' Türü: Kaçış Yolu'unknown' TürüNil ve İsteğe Bağlı TürlerTür Çıkarımı UygulamadaAçık Tür Ek AçıklamalarıTekrar: Temel Türler Alıştırması5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları3Türlenmiş Tablolar: Diziler ve Map’ler
Türlenmiş DizilerÖğe Ekleme ve OkumaMap Türü Nedir?Map’leri Tanımlama ve ErişmeTablolar Üzerinde YinelemeKarma Şekilli TablolarBir Izgarayı OkumaBir Izgara Oluşturmatable.unpackÖzet: Diziler ve Map’ler6Tablo Biçimlerini Tiplendirme
Satır İçi Biçim AçıklamalarıBiçimler İçin Tip Takma Adlarıİsteğe Bağlı ÖzelliklerBiçimler ve Serbest TablolarBiçimleri GenişletmeBiçimlere Metot EklemeSelf ve İki Nokta MetotlarıÖzet: Tablo Biçimlerini TanımlamaKendi başına pratik yap: Online Luau derleyicisi