Biçimleri Genişletme
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 41 / 73.
İlişkili şekiller genellikle alanları paylaşır. Her Admin aynı zamanda bir User’dır; paylaşılan alanları her iki bildirime de kopyalamak, bunların zamanla birbirinden farklılaşmasına davetiye çıkarır.
Takma adları birleştirirken kesişim operatörü & ile karşılaştınız. Şekiller için de tamamen aynı şekilde çalışır. A & B, "A’daki her şeye ve B’deki her şeye sahiptir" anlamına gelir:
type User = {name: string, age: number}
type Admin = User & {level: number}
-- Admin artık name, age VE level gerektiriyor
local root: Admin = {name = "Root", age = 35, level = 9}TypeScript arayüzler için ayrı bir extends anahtar sözcüğüne ihtiyaç duyarken Luau’nun yeni bir şeye ihtiyacı yoktur: kesişimler zaten bu işi yapar. Birkaç parçayı zincirleyebilirsiniz:
type Contact = {email: string}
type Developer = User & Contact & {yearsExperience: number}& ile | işaretlerini karıştırmayın: bir birleşim olan A | B şekillerden herhangi biridir, oysa bir kesişim olan A & B aynı anda her ikisini de karşılamalıdır. Ayrıca Admin her User alanına sahip olduğundan, bir Admin değeri User beklenen her yerde kullanılabilir.
Görev
KolayŞu tür takma adlarını oluştur:
Employee:id(number),name(string),department(string)Manager:Employeearacılığıyla&(teamSize) ile genişletilmişnumberContact:email(string)Developer:Employee,Contactve{yearsExperience: number}türlerinin kesişimi
Şunları oluştur:
teamLeadtüründeManager: id101, name"Alice Johnson", department"Engineering", teamSize8devtüründeDeveloper: id102, name"Bob Smith", department"Engineering", email"bob@company.com", yearsExperience5
Bir getManagerSummary alan ve Manager döndüren [name] manages [teamSize] people adlı bir işlev oluştur.
Her birini ayrı bir satıra yazdır:
getManagerSummary(teamLead)sonucunu[name] has [yearsExperience] years of experienceiçindevifadesiniteamLead'in department değerinidev'in email değerini
Kendin dene
-- Kodu buraya yaz
-- 1) Employee'yi tanımla, sonra Manager / Contact / Developer'ı & ile
-- 2) teamLead ve dev oluştur
-- 3) getManagerSummary yaz
-- 4) istenen dört satırı 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'ler6Tablo Biçimlerini Tiplendirme
Satır İçi Biçim AçıklamalarıBiçimler İçin Tip Takma Adlarıİsteğe Bağlı ÖzelliklerBiçimler ve Serbest TablolarBiçimleri GenişletmeBiçimlere Metot EklemeSelf ve İki Nokta MetotlarıÖzet: Tablo Biçimlerini TanımlamaKendi başına pratik yap: Online Lua derleyicisi