Menu
Coddy logo textTech

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ı biliyor

Bir 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.

challenge icon

Görev

Kolay

Herhangi 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.
  • data parametresini :: kullanarak User tü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 bir describeUser(data: any): string fonksiyonu 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
quiz iconKendini test et

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