Menu
CoddyTech

Tipe Intersection

Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 34 dari 73.

Union menyatakan bahwa sebuah nilai memiliki satu tipe atau tipe lainnya. Tipe irisan menyatakan kebalikannya: ampersand & menggabungkan bentuk tabel menjadi tipe yang memiliki semua field dari setiap bagiannya:

type HasName = { name: string }
type HasAge = { age: number }

type Person = HasName & HasAge

-- Person harus memiliki KEDUA field
local user: Person = {
    name = "Alice",
    age = 25,
}

Jika kamu tidak menyertakan age, pemeriksa akan mengeluh: irisan berarti "dan", bukan memilih sesuka hati. Dengan ini, kamu bisa menyusun bentuk besar dari bagian-bagian kecil yang dapat digunakan kembali: definisikan tipe khusus untuk hal-hal yang terpisah, lalu gabungkan sesuai kebutuhan:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Catatan penting tentang Luau: iriskan bentuk tabel (dan tipe fungsi), bukan tipe primitif. Sesuatu seperti number & string tidak bermakna, karena tidak ada nilai yang bisa menjadi keduanya sekaligus. Saat kamu menginginkan "bentuk ini ditambah bentuk itu", & adalah alat yang kamu perlukan.

Saat runtime, tentu saja, Person hanyalah tabel Lua biasa: irisan hanya ada untuk pemeriksa.

challenge icon

Tantangan

Mudah

Buat dua alias shape: HasName dengan field name: string, dan HasAge dengan field age: number.

Buat Person sebagai irisan HasName & HasAge.

Buat HasEmail dengan field email: string, dan Employee sebagai irisan ketiganya: HasName & HasAge & HasEmail.

Deklarasikan:

  • user: Person dengan nama "Alice" dan usia 25
  • worker: Employee dengan nama "Bob", usia 30, dan email "bob@company.com"

Buat displayPerson(person: Person): string yang mengembalikan "Name: [name], Age: [age]", dan displayEmployee(employee: Employee): string yang mengembalikan "Name: [name], Age: [age], Email: [email]".

Cetak displayPerson(user) dan displayEmployee(worker) pada baris terpisah.

Coba sendiri

-- Tulis kodemu di sini
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- Deklarasikan user dan worker, lalu tulis kedua fungsi tampilan,
-- Cetak displayPerson(user) dan displayEmployee(worker)
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pengantar Luau

Latihan sendiri: Compiler Luau online