Ad alanı

Ad alanı (diğer adlandırmalarla 'Ad uzayı', 'Alan adı', 'isim uzayı' 'isim alanı' ya da İngilizce'deki adıyla 'namespace') çeşitli türdeki nesneleri tanımlayıp kümelere ayırmak için kullanılan ad ile belirteçler bütünüdür. Ad alanları, Genellikle yazılımcılık ile özdeşleşseler de sadece yazılıma özgü değillerdir. Kaynak kodun mantıksal olarak alt parçalara bölünmesini ve ad çakışmalarını önlemeyi sağlar. Genellikle soyut bir kavram olarak kabul edilirler. Ad alanları ayrıca isimlerin farklı bağlamlarda yeniden kullanımlarını sağlamak için yapısal olarak hiyerarşileştirilebilmektedirler.

Ad alanlarına ilişkin en öne çıkan örneklerden birisi, dosyalara ad atayan dosya sistemleridir. Bazı programlama dilleri ise kendi değişkenlerini ve fonksiyonlarını ad uzaylarında örgütler.

Örnekler

Ad alanlarının ek olarak neresinde olacağı değişir, bazı ad alanı örnekleri aşağıdaki tablodadır:

Ad alanı örnekleri
BağlamAdAd uzayı ismiYerel ad
Domain adı www.olmayansite.com olmayansite.com .com
Türkçe Vikipedi Vikipedi:Doğrulanabilirlik Vikipedi Doğrulanabilirlik
Dosya yolu C:\Kullanıcılar\Örnek_Kullanıcı\Masaüstü\PyCharm.exe C:\Kullanıcılar\Örnek_Kullanıcı\Masaüstü (dizin adı) Pycharm.exe
C++ Standard Kütüphanesi std::meta::info
std::vector<int>
std::meta
std
info
vector<int>
C++ ad alanı Poco::Net::HTTPClientSession Poco::Net HTTPClientSession
C Sharp Classlar.Arac Classlar Arac
Java Standart Kütüphanesi [en] java.util.Date java.util Date
Doi 10.1177/16118944221130213 10.1177 16118944221130213
Python functools.reduce functools (modül adı) reduce

Programlama dillerinde kullanım

Bilgisayar biliminde ad alanları (namespace), normal tanımlarına ek olarak, birbirlerine mantıksal olarak bağlı olan eşsiz tanımlayıcıları ile simgeleri bir arada tutan sanal ve soyut birer ortam olarak da davranırlar. Bir ad uzayında bildirilmiş olan bir değişken, fonksiyon, sınıf vs. (yani tanımlayıcılar) sadece o ad uzayında geçerlidir. Aynı isimde olan birden çok tanımlayıcı birbirinden farklı isim uzaylarında bulunabilir. Ad uzaylarının içinde ayrıca başka bir ad uzayı da bulunabilir. Ad alanı özelliğini destekleyen yazılım dillerinde hangi tanımlayıcının hangi ad alanına ait olduğunu belirten kurallar da bulunabilmektedir.

C++

C++ programlama dilinde namespace anahtar sözcüğüyle bir ad alanı bildirilebilir. İsim uzayının adı, namespace sözcüğünden sonra gelir. Ad alanının içinde tanımlanacak nesneler normalde tanımlandıkları şekilde tanımlanabilirler. Örnek olarak aşağıdaki kaynak kod verilebilir:

#include <concepts>
namespace matematik { //Bu ad alanının adı 'matematik'tir
    constexpr bool cift_mi(std::integral auto tamsayi) noexcept {
        return tamsayi % 2 == 0;
    }
    constexpr double pi = 3.141592653589;
    //tanımlayıcılar normalde nasıl tanımlandılarsa öyle tanımlandılar, hiçbir değişiklik olmadı
}

Eğer bir ad uzayının içindeki tanımlayıcılara eğer sözü edilen ad alanının dışından erişmek istenilirse, bunun için o ad alanının ismi birer ön ek olarak kullanılıp :: operatörü (kapsam çözümleme operatörü) ile erişilmesi gerekilmektedir. Örnek olarak şu kod parçası verilebilir (üstteki kaynak kodu takiben):

int main() {
   bool sonuc = matematik::cift_mi(2029);
   constexpr double ters_pi = 1 / matematik::pi;
   //Görüldüğü üzere bir ad alanının içindeki tanımlayıcıya erişebilmek için "[ad_alanının_adı]::[tanımlayıcı]" sözdizimini kullandık
}

Bildirilen isim uzaylarına aynı zamanda takma ad verilebilir. bunun için ise namespace verilecek_takma_ad = varolan_ad_uzayı; sözdizimi izlenir.

constexpr bool asal_mi(std::size_t tamsayi) {
   namespace math = matematik;
   if (math::cift_mi(tamsayi))
      return false;
   else if (tamsayi % 3 == 0)
      return false;
   for (std::size_t i = 5; i += 4; ++i){
      if (tamsayi % i == 0)
         return false;
   }
   return true;
}

Başka bir kaynak kod örneği ise iç içe oluşturulmuş ad alanlarına kısa takma ad vermek için kullanılabilir:

#include <print>
namespace hede {
   namespace hödö {
      namespace falan { 
         char abecemizin_son_harfi = 'Z';
      }
   }
}
namespace kısa = hede::hödö::falan;

int main() {
   std::print("'Z'nin ASCII karşılığı: {}", static_cast<int>(kısa::abecemizin_son_harfi) );
}

Eğer bir ad uzayındaki tüm tanımlayıcıları o anda bulunan kapsama aktarmak istersek using direktiflerini (yönergelerini) kullanılabilir. using direktiflerinin sözdizimi using namespace ad_alanı; şeklindedir.

#include <cstddef>
namespace genel {
   struct rgb_değerleri {
      std::uint8_t r;
      std::uint8_t g;
      std::uint8_t b;
   };
   constexpr int gündeki_saniye_sayısı = 86'400;
   constexpr double fahrenhaytdan_celciusa(double fahr) {
       return (fahr - 32.0) * 5.0 / 9.0;
   }
}

int main() {
   using namespace genel;
   //artık "genel" ad uzayındaki tüm tanımlayıcılar 'main' fonksiyonunun kapmasına da aktarıldı
   //Yani artık "genel::" önekini kullanmamıza gerek yok
   constexpr auto beyaz = rgb_değerleri(255,255,255);
   constexpr std::size_t haftadaki_saniye_sayısı = gündeki_saniye_sayısı * 7;
   constexpr double degisken = fahrenhaytdan_celciusa(32);
}

C++ Standard Kütüphanesindeki her şeyi o anda bulunulmakta olan kapsama aktaran using namespace std; direktifi, std alan adındaki tüm tanımlayıcıları aynı bulunulan kapsam fark etmeksizin küresel kapsama tanıtır. Bunun nedeni, küresel kapsamın (İngilizce adıyla "global scope") hem std ad alanını hem de herhangi bir kullanıcı tanımlı ad alanını dahil eden en yakın kapsam olmasıdır. Bu direktifin kullanımı istenmeyen ad çakışmalarına yol açabilmektedir. Bu direktif ile diğer using direktiflerinin -özellikle küresel kapsamda- kullanımı Header dosyalarında [en] kötü pratik olarak kabul görmektedir.

Eğer bahsi geçilen ad alanının içindeki tüm tanımlayıcıları aktarmak istemeyip yalnızca belirli bir(kaç) tane tanımlayıcıları içe aktarmak isteniliyorsa using bildirilerini kullanabilir. using bildirilerinin sözdizimi using ad_alanı::tanımlayıcı1, ad_alanı::tanımlayıcı2, [...] ad_alanı::tanımlayıcıN; şeklindedir.

C++'daki diğer bir ad alanı özelliği ise inline namespace'lerdir. Bu tür ad uzaylarının üyeleri, her ne kadar belirtilen ad uzayın ismiyle erişirilebilseler de, sanki onları çevreleyen hemen üst kapsam/ad uzayının üyesilermiş gibi davranırlar.

Python

Ad alanları harikulade bir düşünce, bunlardan daha fazlasını yapalım!

— Tim Peters, 'Python'un felsefesi' anlamına gelen 'Zen of Python' adındaki bir PEP eserinde.

Python'da ad alanları genellikle modüller üzerinden sağlanmaktadır. Bir modül içindeki tanımlayıcıyı doğrudan o anda bulunulan kapsama aktarmak istenirse from modül_adı import tanımlayıcı sözdizimi, eğer bir modüldeki tanımlayıcıların hepsi o anda bulunulan kapsama aktarılmak istenirse from modül_adı import * sözdizimi kullanılabilir.

Kaynakça

  1. ↑ namespace nedir? 11 Mart 2026 tarihinde Wayback Machine sitesinde arşivlendi. ihs teknoloji, 25 Eylül 2025
  2. 1 2 3 4 5 "Namespaces". cppreference.com. 2026. 1 Temmuz 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Haziran 2026.
  3. 1 2 "An overview of namespaces in PHP". PHP Manual. 16 Ekim 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 27 Haziran 2026. What are namespaces? In the broadest definition, namespaces are a way of encapsulating items. This can be seen as an abstract concept in many places. For example, in any operating system directories serve to group related files, and act as a namespace for the files within them.
  4. ↑ Aniket, Siddharth; Aditya, Anushka; Deepa, Chaya; Cermak, Batman; Chaiken, Ronnie; Douceur, John; Howell, Jon; Lorch, Jacob; Theimer, Marvin; Wattenhofer, Roger (2002). FARSITE: Federated, Available, and Reliable Storage for an Incompletely Trusted Environment (PDF). Proc. USENIX Symp. on Operating Systems Design and Implementation. 28 Temmuz 2010 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 27 Haziran 2026. The primary construct established by a file system is a hierarchical directory namespace, which is the logical repository for files.
  5. ↑ the term 'namespaces' by webopedia 17 Şubat 2020 tarihinde Wayback Machine sitesinde arşivlendi., 10 Nisan 2002.
  6. ↑ Namespaces (C++), learn.microsoft.com. 27 Haziran 2026
  7. 1 2 Namespace aliases 23 Haziran 2026 tarihinde Wayback Machine sitesinde arşivlendi., cppreference.com.
  8. ↑ ,
  9. ↑ C++ Core Guidelines 8 Şubat 2020 tarihinde Wayback Machine sitesinde arşivlendi., Bjarne Stroustrup & Herb Sutter, 14 Haziran 2026.
  10. ↑ Inline namespaces 1 Temmuz 2026 tarihinde Wayback Machine sitesinde arşivlendi., cppreference.com.
  11. ↑ Tim Peters, Zen of Python 9 Şubat 2025 tarihinde Wayback Machine sitesinde arşivlendi., 2004.
  12. ↑ Namespaces 21 Temmuz 2026 tarihinde Wayback Machine sitesinde arşivlendi., docs.python.org. 2026.
  13. ↑ Modules 6 Şubat 2021 tarihinde Wayback Machine sitesinde arşivlendi., docs.python.org.