dev-tools
Sözlük ↗Tip Güvenliği (Type Safety)
Tip güvenliği, bir programlama dilinin veya araç zincirinin değerlerin beklenen tipleriyle eşleştiğini ne kadar sıkı şekilde zorladığını ifade eder — bir sayı üzerinde `.toUpperCase()` çağırmak ya da bir fonksiyona kullanıcı ID'lerinden oluşan bir dizi beklerken string geçmek gibi, belirli bir tip için anlamsız işlemlerin, tam olarak o hatalı kod yolu çalışırken runtime'da patlamasındansa, derleme veya çalıştırma aşamasında baştan engellenmesini sağlar. Statik tipli diller (Java, Go, Rust, TypeScript) tipleri derleme/build aşamasında kontrol eder, böylece koddaki bir dizi hata daha çalışmadan yakalanır; dinamik tipli diller (saf JavaScript, Python, Ruby) tipleri runtime'da kontrol eder, yani bir tip uyuşmazlığı, o hatalı satır production'da fiilen çalışana kadar fark edilmeden sızabilir. TypeScript, JavaScript ekosisteminde tam olarak bu yüzden baskın hale geldi — zaten dinamik tipli olan JavaScript'in üzerine statik bir tip kontrol katmanı ekliyor. AI/SaaS kuran ekipler için neden önemli: tip güvenliği, hataları erken ve ucuza yakalamanın en yüksek getirili yollarından biridir — editörde derleyicinin yakaladığı bir tip hatasının düzeltilmesi saniyeler sürer; aynı hata production'a sızarsa saatler süren debug ve gerçek kullanıcı etkisine mal olabilir. Bu konu özellikle AI kod ajanlarıyla çalışırken giderek daha kritik hale geliyor: güçlü tipli bir kod tabanı, bir AI ajanı mevcut bir fonksiyonun imzasıyla veya bir veri şekliyle uyuşmayan kod ürettiğinde ona anında, mekanik bir geri bildirim (derleme hatası) verir — bu da ajanın hatayı bir insan görmeden kendi araç kullanım döngüsü içinde kendini düzeltmesini sağlar. Dinamik tipli bir kod tabanında ise aynı sınıftaki hatalar sessizce sızar ve ancak bir test tam o yolu tetiklediğinde ya da daha kötüsü production'da keşfedilir. Nasıl çalışır: statik tipli bir dilin derleyicisi, her değişkenin, fonksiyon parametresinin ve dönüş değerinin bildirilen veya çıkarılan tipinin tam resmini oluşturur ve kod build edilmeden önce her işlemi bu tiplerle karşılaştırır — bir `string` değerin `number` bekleyen bir fonksiyona geçirildiği bir çağrı noktası, runtime'da değil, derleme aşamasında hata verir. TypeScript bunu bir derleme/tip kontrol adımıyla (`tsc`) JavaScript'in üzerine katmanlar; geliştirme ve CI sırasında uyuşmazlıkları yakalarken, kodun fiilen çalışması için tip bilgisi silinmiş sade JavaScript üretir. Örnek üzerinden: bir geliştirici `function applyDiscount(price: number, percentage: number): number` şeklinde bir fonksiyon tanımlıyor. Kod tabanının başka bir yerinde, başka bir geliştirici (veya bir AI kod ajanı) yanlışlıkla `applyDiscount(order.total, "10%")` çağırıyor — fonksiyonun beklediği `10` sayısı yerine `"10%"` string'ini geçiriyor. Saf bir JavaScript kod tabanında bu hata, tam o kod yolu çalışıp nihai fiyat için `NaN` gibi anlamsız bir sonuç üretene kadar — belki de production'da — ortaya çıkmaz. Bir TypeScript kod tabanında ise derleyici bunu editörde anında işaretler — "Argument of type 'string' is not assignable to parameter of type 'number'" — ve geliştirici editör uyarısını görmezden gelse bile CI'daki build başarısız olur; bu da hatanın bir müşteri bozuk bir checkout tutarı görmeden önce, merge edilmeden önce yakalanmasını garanti eder.
İlgili terimler