Jeneriklerin Çözdüğü Problem
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası — ders 57 / 73.
Tek yapması gereken, kendisine ilettiğiniz değeri olduğu gibi geri döndürmek olan bir işlev — yani bir özdeşlik (identity) işlevi — gerektiğinizi hayal edin. Şimdiye kadar öğrendiğiniz türlerle iki seçeneğiniz var ve ikisi de sıkıntılıdır.
Birinci seçenek: her tür için ayrı bir kopya yazmak. Gövdeler birebir aynıdır; yalnızca tür açıklamaları farklıdır:
local function echoNumber(value: number): number
return value
end
local function echoString(value: string): string
return value
endHer yeni tür, yeni bir kopya demektir ve birinde düzeltilen bir hata hepsinde tek tek düzeltilmelidir. Bu, tam da fonksiyon yazarak kaçınmaya çalıştığınız kod tekrarıdır.
İkinci seçenek: bunları any ile türlendirilmiş tek bir fonksiyonda birleştirmek:
local function echo(value: any): any
return value
endArtık tek bir fonksiyon her şeyi halleder — ama bedelini tür güvenliği (type safety) ile ödersiniz. echo("hello") fonksiyonunu çağırdığınızda, checker artık sonucun bir string olduğunu bilemez. Sadece any olduğunu bilir, bu nedenle otomatik tamamlama çalışmaz ve tür hataları gözden kaçar: içeri giren ile dışarı çıkan arasındaki bağlantı kopmuş olur.
Asıl istediğiniz şey, her tür için çalışan ve her çağrıda hangi türün kullanıldığını hatırlayan bir fonksiyondur. İşte jenerikler (generics) size tam olarak bunu sağlar — ve bu bölümün konusudurlar.
Kendin dene
Bu ders bir kod alıştırması içermiyor.
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