Menu
CoddyTech

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.

challenge icon

Görev

Kolay

İki yöntemi iki nokta üst üste söz dizimini kullanarak bir hesaba ekle.

  1. Tablonun altında, function account:deposit(amount: number) tanımla; bu yöntem amount değerini self.balance değerine ekler.
  2. function account:getBalance(): number tanımla; bu yöntem self.balance değerini döndürür.
  3. account:getBalance() değerini yazdır, account:deposit(120) çağrısını yap, ardından account: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

Kendi başına pratik yap: Online Luau derleyicisi