Masalah yang Diatasi Generics
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 57 dari 73.
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 fungsinya 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 baru, dan bug yang diperbaiki pada satu salinan harus diperbaiki pada semuanya. Duplikasi seperti inilah yang ingin kamu hindari saat menulis fungsi.
Pilihan kedua: gabungkan semuanya menjadi satu fungsi dengan tipe any:
local function echo(value: any): any
return value
endSekarang satu fungsi menangani semuanya, tetapi kamu harus mengorbankan keamanan tipe. Saat kamu memanggil echo("hello"), pemeriksa tidak lagi mengetahui bahwa hasilnya berupa string. Pemeriksa hanya mengetahui any, sehingga pelengkapan otomatis tidak berfungsi dan error tipe luput terdeteksi: hubungan antara nilai yang masuk dan yang keluar hilang.
Yang sebenarnya kamu inginkan adalah fungsi yang bekerja untuk setiap tipe dan mengingat tipe yang digunakan pada setiap pemanggilan. Itulah yang diberikan oleh generik, dan topik itulah yang dibahas dalam bab ini.
Coba sendiri
Pelajaran ini tidak memiliki tantangan kode.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
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
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & 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 dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: 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