Jeneriklerin Çözdüğü Problem
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 61 / 80.
Sana, kendisine aktardığın değeri olduğu gibi döndüren basit bir işlev gerektiğini düşün: bir özdeşlik işlevi. Şimdiye kadar öğrendiğin türlerle iki seçeneğin var ve ikisi de sorunlu.
Birinci seçenek: her tür için ayrı bir kopya yazmak. Gövdeler aynı; yalnızca tür bildirimleri farklı:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endHer yeni tür başka bir kopya anlamına gelir ve birinde düzeltilen bir hatanın hepsinde düzeltilmesi gerekir. İşlevleri tam da bu tür yinelemelerden kaçınmak için yazarsın.
İkinci seçenek: bunları any türüyle tanımlanmış tek bir işlevde birleştirmek:
local function echo(value: any): any
return value
endArtık tek bir işlev her şeyi hallediyor, ama bunun bedelini tür güvenliğinden ödüyorsun. echo("hello") çağrısını yaptığında denetleyici artık sonucun bir metin dizisi olduğunu bilmiyor. Yalnızca any olduğunu biliyor; bu yüzden otomatik tamamlama devre dışı kalıyor ve tür hataları gözden kaçıyor: içeri giren değer ile dışarı çıkan değer arasındaki bağlantı kayboluyor.
Aslında istediğin, her türle çalışan ve her çağrıda hangi türün kullanıldığını hatırlayan bir işlev. Jenerikler tam olarak bunu sağlar ve bu bölümün konusu da budur.
Görev
Kolayecho işlevinin any sürümünün neleri unuttuğunu görün.
valuedeğerini döndürenlocal function echo(value: any): anyyazın.echo("hello")ifadesinilocal resultdeğişkenine kaydedin.- Önce
result, ardındantypeof(result)değerini yazdırın.
Run Code düğmesine basın: çıktı hello ve string değerlerini gösterir.
Kendin dene
-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) result ve typeof(result) değerlerini print ile 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ı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 Luau derleyicisi