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.

Birlleşimler (Unions) bir değerin bir tür veya başka bir tür olduğunu söyler. Kesişim türleri (Intersection types) ise aksi yöne işaret eder: ampersand & işareti, tablo şekillerini tüm parçaların bütün alanlarına sahip tek bir türde birleştirir:

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

type Person = HasName & HasAge

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

age alanını dışarıda bırakırsanız denetleyici hata verir — kesişim bir "ve" ilişkisidir, asla seç-beğen-al değildir. Bu, küçük ve yeniden kullanılabilir parçalardan büyük şekiller oluşturmanıza olanak tanır: ayrı konular için odaklanmış türler tanımlayın, ardından bunları gerektiği gibi bir araya getirin:

type HasEmail = { email: string }

type Employee = HasName & HasAge & HasEmail

Önemli bir Luau notu: ilkel (primitive) türleri değil, tablo şekillerini (ve fonksiyon türlerini) kesiştirin. number & string gibi bir şey anlamsızdır, çünkü hiçbir değer aynı anda her ikisi birden olamaz. "Bu şekil artı şu şekil" istediğinizde, & aracınızdır.

Çalışma zamanında (runtime), elbette bir Person sadece normal bir Lua tablosudur — kesişim yalnızca denetleyici için mevcuttur.

challenge icon

Görev

Kolay

İki tip takma adı (shape alias) oluşturun: name: string alanına sahip HasName ve age: number alanına sahip HasAge.

HasName & HasAge kesişimi olarak Person tipini oluşturun.

email: string alanına sahip HasEmail tipini ve üçünün kesişimi olan Employee tipini oluşturun: HasName & HasAge & HasEmail.

Tanımlayın:

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

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

Ayrı satırlarda displayPerson(user) ve displayEmployee(worker) değerlerini yazdırın (print).

Kendin dene

-- Buraya kod yazın
-- type HasName = { name: string }, HasAge, HasEmail
-- type Person = HasName & HasAge
-- type Employee = HasName & HasAge & HasEmail
-- user ve worker'ı tanımla, 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