JavaScript'te arayüzler yerine ne kullanılabilir?
sobes.tech yapay zeka
AI'dan gelen yanıt
JavaScript'te arabirimler yerel olarak desteklenmez, ancak şu şekilde yerine geçebilirler:
-
Çalışma zamanında tip kontrolü (Runtime type checking): Zod, Yup veya Joi gibi kütüphaneler kullanarak veri yapısını tanımlama ve gelen değerleri doğrulama.
// Zod ile örnek import { z } from 'zod'; const UserSchema = z.object({ id: z.number(), name: z.string(), email: z.string().email(), }); try { const validUserData = UserSchema.parse({ id: 1, name: 'Alice', email: 'alice@example.com' }); console.log('Geçerli kullanıcı verisi:', validUserData); } catch (error) { console.error('Doğrulama hatası:', error.errors); } -
JSDoc: IDE'ler ve statik analiz araçları için bilgi sağlayan tip açıklamaları içeren yorumlar.
/** * @typedef {Object} Product * @property {number} id - Ürünün benzersiz kimliği. * @property {string} name - Ürün adı. * @property {number} price - Ürün fiyatı. */ /** * Ürün bilgilerini gösterir. * @param {Product} product - Ürün nesnesi. */ function displayProduct(product) { console.log(`Ürün: ${product.name}, Fiyat: ${product.price}`); } const myProduct = { id: 101, name: 'Kitap', price: 500 }; displayProduct(myProduct); -
İsimlendirme ve belgeleme anlaşmaları: Kod belgelerinde tanımlanan nesnelerin özellik ve metodlarının nasıl isimlendirileceğine dair net kurallar.
-
TypeScript: Geliştirme sırasında tam arayüzler ve statik tip kontrolü kullanmaya olanak tanıyan en etkili yöntem.
interface IProduct { id: number; name: string; price: number; displayInfo(): void; // Metod tanımı } class Book implements IProduct { id: number; name: string; price: number; constructor(id: number, name: string, price: number) { this.id = id; this.name = name; this.price = price; } displayInfo(): void { console.log(`Ürün: ${this.name}, Fiyat: ${this.price}`); } } const myBook: IProduct = new Book(102, 'Roman', 700); myBook.displayInfo(); -
Soyut sınıflar (bir ölçüde): JavaScript'te gerçek soyut sınıflar olmasa da, soyut sınıf örneği oluşturma veya "soyut" metodları çağırma girişiminde hata üreterek taklit edilebilir.
class AbstractShape { constructor() { if (new.target === AbstractShape) { throw new Error("AbstractShape soyut sınıfının örneği oluşturulamaz"); } } area() { throw new Error("area metodu, alt sınıfta uygulanmalıdır"); } } class Circle extends AbstractShape { radius: number; constructor(radius: number) { super(); this.radius = radius; } area(): number { // Soyut metodun uygulanması return Math.PI * this.radius * this.radius; } } // const shape = new AbstractShape(); // Hata verir const circle = new Circle(5); console.log("Dairenin alanı:", circle.area());
Bu metodların farklı katmanlarda katıksızlık ve doğrulama seviyeleri sağladığını anlamak önemlidir. TypeScript, derleme zamanında en güçlü statik doğrulamayı sağlar, diğerleri ise daha çok çalışma zamanında doğrulama veya belgelemeye yöneliktir.