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 Luau'nun tür denetleyicisinden (checker) bir değer hakkında daha fazla şey bilirsiniz — örneğin any olarak türlendirilmiş (typed) ancak aslında bir kullanıcı kaydı olduğunu bildiğiniz bir değer. Bir tür dönüştürme (type assertion veya cast), denetleyiciye "bana güven, bu değere şu türde muamele et" demenizi sağlar. Luau'nun cast operatörü :: simgesidir:
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 işlemi yalnızca tür denetleyicisinin inandığı şeyi değiştirir — çalışma zamanında (runtime) hiçbir şey yapmaz. Hiçbir zaman bir değeri dönüştürmez: "5" :: any ifadesi number olan 5 değil, still "5" olan string değeridir (gerçek dönüşüm için tonumber kullanın). Ve asla doğrulamaz: wrong türü iddia ederseniz (assert), cast işleminin kendisi hata vermez — kodunuz daha sonra, orada olmayan alanlara erişmeye çalıştığında hatalı davranacaktır.
Ne zaman kullanılır: Bir değer any (veya geniş bir birleşim/union) olarak geldiğinde ve değerin yapısını (shape) gerçekten bildiğinizde. Ne zaman kullanılmaz: Anlamadığınız bir tür hatasını susturmak için — hata genellikle size gerçek bir hata (bug) hakkında bilgi verir ve bunu bir cast ile gizlemek sadece hatayı saklar. Çalışma zamanında doğrulayabildiğiniz zamanlarda gerçek denetimleri (bir sonraki dersteki typeof korumaları gibi) tercih edin.
Görev
KolayHerhangi bir tür bilgisi olmadan harici bir kaynaktan gelen verileri işlemeyi simüle edin.
type User = {id: number, username: string, isActive: boolean}tanımlayın.dataparametresini::kullanarakUsertürüne dönüştüren (cast) ve metin içi değişken kullanarak (string interpolation)User [id]: [username] (Active: [isActive])döndüren birdescribeUser(data: any): stringfonksiyonu yazın.
Başlangıç kodu, any türünde tanımlanmış üç ham kaydı zaten içermektedir. Her biri üzerinde describeUser fonksiyonunu ç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ın
-- 1) User tipini tanımla
-- 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'ler