Jenerik Fonksiyon Kullanımı
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 59 / 73.
identity'ye T'nin ne olduğunu hiçbir zaman söylemezsin: denetleyici bunu kendi başına çözer. Buna tür çıkarımı denir: Luau, her çağrı noktasında bağıma bakar ve T için çözüm bulur:
local word = identity("Luau") -- T string olarak çıkarıldı
local count = identity(12) -- T number olarak çıkarıldı
local flag = identity(false) -- T boolean olarak çıkarıldıHer çağrı bağımsızdır: T bir satırda string, sonraki satırda number olabilir. Çıkarılan sonuç, elle yazılmış bir ek açıklama kadar güvenlidir: denetleyiciye göre word bir string'dir; tam otomatik tamamlama ve hata denetimi sunar.
TypeScript'ten önemli bir fark vardır: TS, çağrı noktasında türü identity<number>(5) ile zorlamana izin verir. Luau'da çağrı noktası tür bağımsız değişkenleri yoktur. Bu satır özel bir söz dizimi değildir; bu nedenle Luau açılı parantezleri küçüktür/büyüktür karşılaştırmaları olarak okur ve kod başarısız olur. Türü açıkça belirtmek istediğinde bunun yerine değişkene ek açıklama ekle:
local count: number = identity(12)Tanıdık bir araçla çıkarımın işleyişini görebilirsin: typeof bir değerin çalışma zamanı tür adını döndürür; bu nedenle print(typeof(identity(12))) number yazdırır: değer, genel işlevden tamamen değiştirilmeden geçti.
Görev
KolayÖnceki dersteki genel identity işlevi zaten düzenleyicinizde. Tür çıkarımını kullanın.
Denetleyicinin T türünü çıkarmasına izin vererek üç değişken oluşturun (açıklama gerekmez):
word:identityişlevini"Luau"ile çağırıncount:identityişlevini12ile çağırınflag:identityişlevinifalseile çağırın
Aşağıdakileri her biri kendi satırında olacak şekilde yazdırın:
wordtypeof(word)sonucunucounttypeof(count)sonucunuflagtypeof(flag)sonucunu
Kendin dene
-- Önceki dersteki genel identity fonksiyonu
local function identity<T>(value: T): T
return value
end
-- Kodunuzu buraya yazın
-- 1) word, count ve flag'i identity çağrılarıyla oluşturun (T çıkarılsın)
-- 2) her değeri ardından typeof'u ile yazdırın
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
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ışmak
Parametreleri ve Geri Dönüş Değerlerini TiplendirmeAnonim Fonksiyonları TiplendirmeHiçbir Şey Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriDeğişken Sayıda Parametre Alan Fonksiyonlar (Variadic)Fonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar2Temel Tipler
Temel Tipler: num, str, bool'any' Tipi: Kaçış Yolu'unknown' TipiNil ve İsteğe Bağlı (Optional) TiplerUygulamada Tip ÇıkarımıAçık Tip BelirteçleriÖzet: Temel Tipler Pratiği5Diğ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ı3Tipli Tablolar: Diziler ve Map'ler
Tipli DizilerEleman Ekleme ve OkumaMap Tipi Nedir?Map Bildirimi ve Map'lere ErişimTablolar Üzerinde YinelemeKarma Biçimli TablolarÇok Boyutlu Tipli Dizilertable.unpack ve VarargsÖ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ımlama9Jenerikler: İlk Bakış
Jeneriklerin Çözdüğü ProblemJenerik Bir Kimlik (Identity) FonksiyonuJenerik Fonksiyon KullanımıJenerik DizilerJenerik Tip Takma Adları (Type Aliases)Özet: Jenerik FonksiyonlarKendi başına pratik yap: Online Lua derleyicisi