Menu
CoddyTech

Masalah yang Diatasi Generics

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 61 dari 80.

Bayangkan kamu membutuhkan fungsi yang hanya mengembalikan nilai apa pun yang kamu berikan kepadanya: fungsi identitas. Dengan tipe yang sudah kamu ketahui sejauh ini, ada dua pilihan, dan keduanya merepotkan.

Pilihan pertama: tulis salinan terpisah untuk setiap tipe. Isi fungsi sama, hanya anotasinya yang berbeda:

local function echoNumber(value: number): number
    return value
end

local function echoString(value: string): string
    return value
end

Setiap tipe baru berarti salinan tambahan, dan bug yang diperbaiki di satu salinan harus diperbaiki di semuanya. Itulah duplikasi yang seharusnya kamu hindari dengan menulis fungsi.

Pilihan kedua: satukan semuanya menjadi satu fungsi dengan tipe any:

local function echo(value: any): any
    return value
end

Sekarang satu fungsi menangani semuanya, tetapi kamu mengorbankan keamanan tipe. Saat kamu memanggil echo("hello"), pemeriksa tidak lagi mengetahui bahwa hasilnya berupa string. Pemeriksa hanya mengetahui any, sehingga pelengkapan otomatis tidak lagi membantu dan error tipe lolos begitu saja: hubungan antara nilai yang masuk dan yang keluar pun hilang.

Yang sebenarnya kamu inginkan adalah fungsi yang bekerja untuk setiap tipe dan mengingat tipe yang digunakan pada setiap pemanggilan. Itulah tepatnya yang diberikan oleh generik, dan itulah topik bab ini.

challenge icon

Tantangan

Mudah

Lihat apa yang terlupakan oleh versi any dari echo.

  1. Tulis local function echo(value: any): any yang mengembalikan value.
  2. Simpan echo("hello") dalam local result.
  3. Cetak result, lalu typeof(result).

Tekan Jalankan Kode: output menampilkan hello dan string.

Coba sendiri

-- 1) echo(value: any): any
-- 2) local result = echo("hello")
-- 3) print result dan typeof(result)

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online