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.
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şı25olanuser: Person - İsmi
"Bob", yaşı30ve e-postası"bob@company.com"olanworker: 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
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
1Luau ile Başlarken
Luau Nedir?Neden Luau Kullanılmalı?İlk Luau KodunuzTip Denetimi ve Hata ModlarıÖzet: Luau'ya Giriş4Fonksiyonlarla Çalışmak
Parametreleri ve Geri Dönüş Değerlerini TiplendirmeAnonim Fonksiyonları TiplendirmeHiçbir Şey Döndürmeyen Fonksiyonlarİsteğe Bağlı ParametrelerVarsayılan Parametre DeğerleriDeğişken Sayıda Parametre Alan Fonksiyonlar (Variadic)Fonksiyon Tiplerini TanımlamaÖzet: Tiplendirilmiş Fonksiyonlar2Temel Tipler
Temel Tipler: num, str, bool'any' Tipi: Kaçış Yolu'unknown' TipiNil ve İsteğe Bağlı (Optional) TiplerUygulamada Tip ÇıkarımıAçık Tip BelirteçleriÖzet: Temel Tipler Pratiği5Diğer Adlar (Aliases), Birleşimler, Kesişimler
İlkel Tipler için Tip Diğer Adları (Type Aliases)Birleşim Tipleri (Union Types)Birleşim Tipleri ile ÇalışmakLiteral (Sabit) TiplerKesişim Tipleri (Intersection Types)Tip Diğer Adlarını BirleştirmeÖzet: Gelişmiş Tip Kombinasyonları3Tipli Tablolar: Diziler ve Map'ler
Tipli DizilerEleman Ekleme ve OkumaMap Tipi Nedir?Map Bildirimi ve Map'lere ErişimTablolar Üzerinde YinelemeKarma Biçimli TablolarÇok Boyutlu Tipli Dizilertable.unpack ve VarargsÖzet: Diziler ve Map'ler