Menu
CoddyTech

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
end

Her 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
end

Artı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.

challenge icon

Görev

Kolay

echo işlevinin any sürümünün neleri unuttuğunu görün.

  1. value değerini döndüren local function echo(value: any): any yazın.
  2. echo("hello") ifadesini local result değişkenine kaydedin.
  3. Önce result, ardından typeof(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

Kendi başına pratik yap: Online Luau derleyicisi