Tür Doğrulamaları (Type Assertions)
Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 68 / 73.
Bazen bir değer hakkında Luau'nun tür denetleyicisinden daha fazla şey bilirsin: örneğin any türünde olan, ancak senin aslında bir kullanıcı kaydı olduğunu bildiğin bir değer. Tür iddiası (aynı zamanda cast olarak da adlandırılır), denetleyiciye "bana güven, bu değeri bu tür olarak ele al" demeni sağlar. Luau'nun cast işleci ::'dir:
type User = {id: number, username: string}
local raw: any = {id = 42, username = "alice_dev"}
local user = raw :: User
print(user.username) -- denetleyici artık alanları biliyorBir cast, sadece tür denetleyicisinin inandığı şeyi değiştirir. Çalışma zamanında hiçbir şey yapmaz. Bir değeri asla dönüştürmez: "5" :: any hâlâ "5" dizesidir, 5 sayısı değildir (gerçek dönüştürme için tonumber kullan). Ayrıca hiçbir zaman doğrulama yapmaz: yanlış türü iddia edersen cast işleminin kendisi hata vermez. Kodun, mevcut olmayan alanlara eriştiğinde daha sonra yalnızca hatalı davranır.
Ne zaman kullanılmalı: bir değer any (veya geniş bir birleşim türü) olarak geldiğinde ve yapısını gerçekten bildiğinde. Ne zaman kullanılmamalı: anlamadığın bir tür hatasını susturmak için: hata genellikle gerçek bir hataya işaret eder ve onu cast ile ortadan kaldırmak yalnızca hatayı gizler. Çalışma zamanında doğrulama yapabildiğinde gerçek denetimleri (bir sonraki dersteki typeof korumaları gibi) tercih et.
Görev
KolayTür bilgisi olmadan harici bir kaynaktan gelen kayıtların işlenmesini simüle edin.
type User = {id: number, username: string, isActive: boolean}bildirin.describeUser(data: any): stringdeğerinidataileUsertürüne dönüştüren ve dize interpolasyonuyla oluşturulmuş::değerini döndürenUser [id]: [username] (Active: [isActive])adlı bir işlev yazın.
Başlangıç kodu, any türünde üç ham kayıt tanımlar. Her biri üzerinde describeUser işlevini çağırın ve üç sonucu sırasıyla yazdırın.
Beklenen ilk satır: User 42: alice_dev (Active: true)
Kendin dene
-- Harici bir kaynaktan ham kayıtlar: `any` tipinde
local rawUser1: any = {id = 42, username = "alice_dev", isActive = true}
local rawUser2: any = {id = 15, username = "bob_admin", isActive = false}
local rawUser3: any = {id = 99, username = "charlie_user", isActive = true}
-- Kodu buraya yaz
-- 1) User tipini bildir
-- 2) describeUser(data: any): string — :: ile cast et ve mesajı oluştur
-- 3) üç kaydın da açıklamasını 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ı8Enum'lar: Luau Yöntemi
Luau'da Enum DeseniTablolar ile Sayısal Enum'larBirlik Olarak Metin Enum'larıHarfi Birlik Enum'larını KullanmaSabit Tabloları DondurmaÖzet: Enum'lar, Luau Yöntemi11İleri Düzey Konular
Tür Doğrulamaları (Type Assertions)typeof ile Tür Muhafızları (Type Guards)never TürüKatı Modda Nil GüvenliğiDizin İmzaları (Index Signatures)Özet: Türlerde İnce Ayar Yapma3Tipli 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