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
endSetiap 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
endSekarang 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.
Tantangan
MudahLihat apa yang terlupakan oleh versi any dari echo.
- Tulis
local function echo(value: any): anyyang mengembalikanvalue. - Simpan
echo("hello")dalamlocal result. - Cetak
result, lalutypeof(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
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Mengetik Parameter dan Nilai KembalianMengetik Fungsi AnonimFungsi Tanpa Nilai KembalianParameter OpsionalNilai Parameter DefaultNilai Default untuk BooleanFungsi VariadikMendefinisikan Tipe FungsiUlasan: Fungsi Bertipe2Tipe Inti
Number, String, dan BooleanTipe 'any': Jalan KeluarTipe 'unknown'Nil dan Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan3Tabel Bertipe: array & map
Array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMenelusuri TabelTabel dengan Bentuk CampuranMembaca GridMembuat Gridtable.unpackRangkuman: array dan map6Pengetikan Bentuk Tabel
Anotasi Bentuk Secara InlineAlias Tipe untuk BentukProperty OpsionalBentuk vs. Tabel LonggarMemperluas BentukMenambahkan method ke BentukMethod self dan Method Titik DuaUlasan: Mendefinisikan Bentuk Tabel9Generics: Pengenalan Awal
Masalah yang Diatasi GenericsFungsi Identitas GenericMenggunakan Fungsi GenericArray GenericAlias Tipe GenericRangkuman: Fungsi GenericLatihan sendiri: Compiler Luau online