Kapsam
- İngilizcesi
- Scope
- Türkçe karşılığı
- faaliyet alanı
- Okunuşu
- skoup
Günlük kullanımda iki ad da yaygın.
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
letveconstblok kapsamlı,varise 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
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
- DeğişkenProgramlamanın Temelleri, s. 10Değişken, bir programda sayı ya da metin gibi bir değeri tutan ve kodun çalışırken okuyup değiştirebildiği, adlandırılmış bir depolama alanıdır.
- ClosureProgramlamanın Temelleri, s. 6Closure, oluşturulduğu kapsamdaki değişkenleri hatırlayan bir fonksiyondur; dıştaki fonksiyon sona erdikten sonra bile bu değişkenleri kullanabilir.
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- KapsüllemeProgramlamanın Temelleri, s. 33Kapsülleme, verileri onları kullanan metotlarla paketleyip iç ayrıntıları gizlemektir; dışarıdaki kod yalnızca herkese açık bir arayüz üzerinden çalışır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin