CodeBlanks Logo Icon CodeBlanks

Namespace vs module

Namespace ile module farkını öğrenirsin.

Namespace vs module

Namespace, global kapsamda ilgili kodu bir ad altında gruplar. Module ise dosya tabanlıdır; her dosya kendi kapsamına sahiptir ve import/export ile bağlanır. Yeni projelerde module önerilir; namespace daha eski bir desendir.

// namespace deseni (eski)
namespace Hesap {
  export function topla(a, b) { return a + b; }
}

// module deseni (yeni)
// dosya: hesap.ts
export function topla(a, b) { return a + b; }

Ne zaman namespace?

Namespace, eski JavaScript kütüphanelerini TypeScript'e taşırken veya tek dosyalık yardımcı programlarda hâlâ işe yarar. Ancak birden çok dosyaya yayılacak modern bir projede module kullanmak daha uygundur; çünkü module dosya başına bağımsız kapsam ve açık bağımlılık bildirimi sağlar.

Uygulama Eski desen kütüphane başlığı

Bir namespace yapısının derleme sonrası eşdeğeri olan nesne desenini kullanarak Kutuphane adında bir nesne tanımla. İçinde ekle(): string ve sil(): string metotları olsun; ekle "eklendi", sil "silindi" döndürsün. Dışarıdan Kutuphane.ekle ve Kutuphane.sil biçiminde çağır, sonuçları ayrı satırlarda yazdır.

Başlangıç kodu

index.ts
// Kutuphane adında bir nesne tanımla
// ekle metodunu ekle, "eklendi" döndürsün
// sil metodunu ekle, "silindi" döndürsün
// her ikisini de çağır, sonuçları ayrı satırda yazdır

Örnek çözüm

index.ts
const Kutuphane = {
  ekle(): string {
    return "eklendi";
  },
  sil(): string {
    return "silindi";
  }
};
console.log(Kutuphane.ekle());
console.log(Kutuphane.sil());

Beklenen çıktı

eklendi
silindi

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Yeni bir TypeScript projesi için kod organizasyonu önerisi nedir?

  • Tek dosyada büyük bir namespace
  • Dosya tabanlı module kullanımı Doğru cevap
  • Yalnızca global değişkenler
  • Hiçbir organizasyon yapmamak

Açıklama: Yeni projelerde dosya tabanlı module kullanımı önerilir. Namespace eski bir desendir; global değişkenler ve organizasyonsuzluk kötü uygulamadır.

2 Namespace bildir

Soru
____ Hesap {
  export function topla(a: number, b: number): number {
    return a + b;
  }
}
Cevap
namespace Hesap {
  export function topla(a: number, b: number): number {
    return a + b;
  }
}

Açıklama: Global kapsamda gruplama için namespace anahtar kelimesi kullanılır. module dosya tabanlıdır; package ve scope TypeScript'te namespace bildirimi için anahtar kelime değildir.

3 Namespace ve module karşılaştırması

Kavram Anlamı
namespace Ad { } Global kapsam gruplama
import { } from "./mod" Dosya tabanlı içe aktarma
Ad.üye Namespace üye erişimi
her dosya kendi kapsamında Module kapsülleme kuralı

Orta seviye bölümündeki tüm dersler