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.
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şı25olanuser: Person - adı
"Bob", yaşı30ve e-posta adresi"bob@company.com"olanworker: 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
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'lerKendi başına pratik yap: Online Lua derleyicisi