Jenerik Bir Kimlik (Identity) Fonksiyonu
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 58 / 73.
İşte doğru şekilde yapılmış identity fonksiyonu — bir generic function olarak:
local function identity<T>(value: T): T
return value
endFonksiyon adından sonra gelen <T>, bir type parameter bildirir — "her bir çağrıda karar verilen bir tür" anlamına gelen bir yer tutucudur. İmza içerisinde T ifadesini tıpkı gerçek bir tür gibi kullanırsınız: parametre bir T türündedir ve fonksiyon bir T döndürür.
Girdi ve çıktı için aynı T ifadesini kullanmak işin bütün püf noktasıdır — bunları birbirine bağlar. identity("hello") fonksiyonunu çağırın; denetleyici o çağrı için T = string olduğuna karar verir, böylece sonuç bir string olur. identity(42) fonksiyonunu çağırın; T = number olur, böylece sonuç bir number olur. Tek gövde, her tür, hiçbir kayıp yok.
T yalnızca geleneksel bir isimdir ("Type" sözcüğünün kısaltmasıdır) — <Item> veya <Value> da aynı derecede işe yarar. Ve Luau üzerinde her zaman olduğu gibi, açılı ayraçlar yalnızca denetleyici için mevcuttur: çalışma zamanında bu sadece yalın bir Lua fonksiyonudur: function identity(value) return value end.
Görev
KolayŞunları gerçekleştiren identity adında generic bir fonksiyon oluşturun:
Tadında bir tip parametresi bildirsinTtipindevalueadında bir parametre kabul etsinTdönüş tipi ile bu değeri geri döndürsün
Ardından fonksiyonunuzu kullanarak şu tiplendirilmiş değişkenleri oluşturun:
numbertipindeluckyNumber—7değeri ileidentityfonksiyonunu çağırınstringtipindegreeting—"Hello, Luau!"değeri ileidentityfonksiyonunu çağırınbooleantipindeisReady—truedeğeri ileidentityfonksiyonunu çağırın
Her biri ayrı bir satırda olacak şekilde şunları yazdırın:
luckyNumbergreetingisReady- doğrudan
printiçinde"<code>generics" değeri ileidentityçağrısının sonucu - doğrudan
printiçinde99değeri ileidentityçağrısının sonucu
Kendin dene
-- Kodu buraya yaz
-- 1) identity<T>(value: T): T tanımla
-- 2) luckyNumber, greeting ve isReady'i identity çağrılarıyla oluştur
-- 3) bunları yazdır, sonra identity(talimatlardaki tam metin) ve identity(99) 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 FonksiyonlarKendi başına pratik yap: Online Lua derleyicisi