Jenerik Fonksiyon Kullanımı
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası — ders 59 / 73.
identity'e T'nin ne olduğunu asla söylemezsiniz — denetleyici bunu kendi kendine çözer. Bu tür çıkarımıdır (type inference): her çağrı noktasında Luau bağımsız değişkene bakar ve T için çözümleme yapar:
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 iken bir sonrakinde number olabilir. Çıkarılan sonuç, elle yazılmış bir tür belirtimi kadar güvenlidir: word, tam otomatik tamamlama ve hata denetimi ile denetleyici için bir string'dir.
TypeScript'ten önemli bir farkı şudur: TS, çağrı noktasında identity<number>(5) ile türü zorlamanıza izin verir. Luau'da çağrı noktası tür bağımsız değişkenleri yoktur — bu satır özel bir sözdizimi değildir, bu nedenle Luau açılı ayraçları küçüktür/büyüktür karşılaştırmaları (comparisons) olarak okur ve kod başarısız olur (fails). Türü açıkça belirtmek istediğinizde, bunun yerine değişkeni tür belirtimi ile tanımlayın:
local count: number = identity(12)Tanıdık bir araçla çıkarımın çalışmasını izleyebilirsiniz: typeof bir değerin çalışma zamanı tür adını döndürür, bu nedenle print(typeof(identity(12))) ifadesi number yazdırır — değer generic fonksiyon üzerinden tamamen değişmeden geçmiştir.
Görev
KolayÖnceki dersteki jenerik identity fonksiyonu zaten düzenleyicinizde bulunmaktadır. Şimdi bunun çıkarımını (inference) çalıştırın.
Denetleyicinin (checker) T tipini çıkarmasına izin vererek üç değişken oluşturun (tür belirtimine gerek yoktur):
word—identityfonksiyonunu"Luau"ile çağırıncount—identityfonksiyonunu12ile çağırınflag—identityfonksiyonunufalseile çağırın
Aşağıdakileri, her biri ayrı bir satırda olacak şekilde yazdırın:
wordtypeof(word)sonucucounttypeof(count)sonucuflagtypeof(flag)sonucu
Kendin dene
-- Önceki dersteki jenerik identity fonksiyonu
local function identity<T>(value: T): T
return value
end
-- Buraya kod yazın
-- 1) word, count ve flag'i identity çağrılarıyla oluştur (T çıkarılsın)
-- 2) her değeri ardından typeof'u ile yazdır
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 Fonksiyonlar