Menu
Coddy logo textTech

Kesişim Tipleri (Intersection Types)

Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 34 / 73.

Birleşimler, bir değerin bir tür veya başka bir tür olduğunu belirtir. Kesişim türleri ise bunun tersini ifade eder: ampersand &, tablo şekillerini her parçanın tüm alanlarına sahip bir türde birleştirir:

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

type Person = HasName & HasAge

-- bir Person her iki alana da sahip olmalıdır
local user: Person = {
    name = "Alice",
    age = 25,
}

age alanını çıkarırsan denetleyici şikâyet eder: kesişim bir "and" ifadesidir; asla istediğini seçebileceğin bir yapı değildir. Bu, büyük şekilleri küçük ve yeniden kullanılabilir parçalardan oluşturmanı sağlar: ayrı sorumluluklar için odaklanmış türler tanımlayıp gerektiğinde bunları bir araya getirebilirsin:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Önemli bir Luau notu: ilkel türler yerine tablo şekişlerini (ve işlev türlerini) kesiştir. number & string gibi bir ifade anlamsızdır; çünkü hiçbir değer aynı anda her ikisi birden olamaz. "Bu şekle ek olarak şu şekil" istediğinde, & senin aracındır.

Çalışma zamanında elbette bir Person yalnızca sıradan bir Lua tablosudur: kesişim yalnızca denetleyici için vardır.

challenge icon

Görev

Kolay

İki şekil takma adı oluştur: HasName ile bir name: string alanı ve HasAge ile bir age: number alanı.

Kesişim olarak Person oluştur: HasName & HasAge.

Bir email: string alanı ile HasEmail oluştur ve üç türün tümünün kesişimi olarak Employee oluştur: HasName & HasAge & HasEmail.

Şunları tanımla:

  • adı "Alice" ve yaşı 25 olan user: Person
  • adı "Bob", yaşı 30 ve e-posta adresi "bob@company.com" olan worker: Employee

"Name: [name], Age: [age]" döndüren displayPerson(person: Person): string ve "Name: [name], Age: [age], Email: [email]" döndüren displayEmployee(employee: Employee): string oluştur.

displayPerson(user) ve displayEmployee(worker) ifadelerini ayrı satırlarda yazdır.

Kendin dene

-- Kodu buraya yaz
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- user ve worker'ı bildir, iki display fonksiyonunu yaz,
-- displayPerson(user) ve displayEmployee(worker) yazdır
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Luau'ya Giriş bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi