Ana içeriğe geç

Kapsam

İngilizcesi
Scope
Türkçe karşılığı
faaliyet alanı
Okunuşu
skoup

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/scope

Kısaca

Kapsam, bir programda değişken ya da fonksiyon gibi bir adın görünür olduğu ve kullanılabildiği bölgedir; her kod satırının nelere ulaşabileceğini belirler.

Programlamada kapsam (scope) nedir?

Kapsam, bir programın neresinde bir adın kullanılabileceğine karar veren kurallar kümesidir. Bir fonksiyonun içinde tanımlanan değişken genellikle yalnızca o fonksiyonun içinde görünür; bir dosyanın ya da modülün en üst düzeyinde tanımlanan değişken ise daha geniş bir alanda görülebilir. Program bir adla karşılaştığında dil, bu adın hangi tanıma başvurduğunu bulmak için kapsam kurallarını kullanır.

Çoğu modern dil, statik kapsam olarak da adlandırılan sözcüksel kapsamı (lexical scope) kullanır; bu, görünürlüğün kodun nereden çağrıldığına değil, nerede yazıldığına göre belirlenmesi demektir. Kapsamlar kutular gibi iç içe geçer: iç bloktaki kod çevresindeki blokların değişkenlerini okuyabilir, ancak dıştaki kod içeri uzanamaz. JavaScript'te let ve const blok kapsamlıdır; bu yüzden bir if ya da for bloğunun içinde tanımlanan değişken blok bittiğinde ortadan kalkar, eski var ise tüm fonksiyona aittir. İç bir kapsam, dışarıda zaten var olan bir adı tanımladığında iç olan dıştakini gizler (shadowing).

Odaları olan bir bina yararlı bir benzetmedir: lobiye asılan bir not herkese görünürdür, ancak bir ofisin içindeki not yalnızca o ofisteki insanlara görünür. Her değişkeni işe yarayan en küçük kapsamda tutmak, bir programın ilgisiz bölümlerinin birbirlerinin verisini yanlışlıkla değiştirmesini önler; global değişkenlerden genellikle bu yüzden kaçınılır.

Kapsam sıklıkla ömürle (lifetime) karıştırılır. Kapsam, bir adın kaynak kodda nerede görülebildiğiyle ilgilidir; ömür ise değerin program çalışırken bellekte ne kadar süre var olduğuyla ilgilidir. İkisi farklı olabilir: bir closure, başka hiçbir kod o değişkene adıyla ulaşamasa bile, fonksiyonu döndükten sonra bir değişkeni canlı tutabilir.

Önemli noktalar

  • Kapsam, bir değişkenin ya da fonksiyonun adının kodun neresinde kullanılabileceğine karar verir.
  • Çoğu dil, kodun nerede yazıldığına dayanan sözcüksel kapsamı kullanır.
  • İç kapsamlar dıştaki değişkenleri görebilir, ancak dıştaki kod içeriyi göremez.
  • JavaScript'te let ve const blok kapsamlı, var ise fonksiyon kapsamlıdır.
  • Kapsam adların görünürlüğüyle, ömür ise değerlerin ne kadar süre var olduğuyla ilgilidir.

Örnek

JavaScript'te global, fonksiyon ve blok kapsamıjavascript
const appName = "Software Dictionary"; // global scope: visible everywhere below

function greet(user) {
  const message = "Hi, " + user; // function scope
  if (user === "admin") {
    let role = "owner"; // block scope: only inside this if
    console.log(role, appName);
  }
  // console.log(role); // ReferenceError: role is not defined here
  return message;
}

Sık sorulan sorular

Global kapsam ile yerel kapsam arasındaki fark nedir?

Global kapsamdaki bir değişken tüm programda görünür; yerel bir değişken ise yalnızca tanımlandığı fonksiyonun ya da bloğun içinde görünür. Diğer kod onları yanlışlıkla değiştiremediği için yerel değişkenler tercih edilir.

Sözcüksel kapsam ile dinamik kapsam arasındaki fark nedir?

Sözcüksel kapsamda bir fonksiyon, yazıldığı yerdeki değişkenleri görür. Dinamik kapsamda ise çalışma zamanında onu çağıranın değişkenlerini görür; hemen hemen tüm modern diller sözcüksel kapsam kullanır, ancak Bash fonksiyonlarında local ile tanımlanan değişkenler dinamik davranır.

Değişken gölgeleme (shadowing) nedir?

Gölgeleme, iç bir kapsamın dış kapsamdakiyle aynı adda bir değişken tanımlamasıyla olur. İç kapsamın içinde ad yeni değişkene başvurur ve dıştaki, iç kapsam bitene dek gizlenir.

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar