Küresel ve Yerel Kapsam
.GlobalEnv, işlev ortamları ve kapanışlar arasındaki farkı anlayın.
Küresel ve Yerel Kapsam, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
İşlevlerde Yerel Değişkenler
Bir işlev gövdesi içinde <- veya = ile atanan değişkenler o işlev için yereldir. İşlevin kendi ortamında oluşturulur ve işlev döndüğünde yok olur. Çağıran kapsamı hiçbir zaman etkilemezler.
x <- 'global'
f <- function() {
x <- 'local' # creates a new local binding, does not modify global x
cat('Inside f: x =', x, '\n')
}
f()
cat('Outside f: x =', x, '\n') # still 'global'İşlev Parametreleri Yereldir
İşlev parametreleri de yerel değişkenlerdir. Bir parametreyi işlev içinde değiştirmek, çağıran ortamdaki bağımsız değişkeni etkilemez. R, bağımsız değişkenleri değerle aktarır (değişiklikte kopyalama anlam bilimiyle).
double_it <- function(n) {
n <- n * 2 # modifies local copy only
cat('Inside:', n, '\n')
}
my_n <- 5
double_it(my_n)
cat('Outside:', my_n, '\n') # still 5Genel Atama için <<-
<<- (üst atama), üst ortam zincirinde arama yapar ve bulduğu ilk eşleşmeye atama yapar. Hiçbir yerde eşleşme yoksa bağlamayı genel ortamda oluşturur. Ölçülü kullanın — <<- işlecinin aşırı kullanımı, işlevlerin davranışını anlamayı zorlaştırır.
total <- 0
add_to_total <- function(x) {
total <<- total + x
}
add_to_total(10)
add_to_total(25)
add_to_total(5)
cat('Total:', total, '\n')<<- Zincirde Yukarı Doğru Arama Yapar
<<-, körü körüne genel ortama atama yapmaz — üst ortam zincirinde ilerler ve adın zaten var olduğu ilk ortama atama yapar. Değişken çevreleyen bir işlevde varsa güncelleneceği yer orasıdır.
outer <- function() {
n <- 0
increment <- function() n <<- n + 1
increment()
increment()
cat('n in outer:', n, '\n') # n was in outer's env, updated there
}
outer()
# n does NOT appear in global env
cat('n in global:', exists('n', envir = globalenv()), '\n')Açık Ortam Hedefleme için assign()
assign('name', value, envir = e), doğrudan belirli bir ortama atama yapar. <<- işlecine göre daha açıktır; bir ortam nesneniz olduğunda ve bir değeri tam olarak bu ortama ayarlamak istediğinizde kullanışlıdır.
my_env <- new.env(parent = emptyenv())
assign('score', 95, envir = my_env)
assign('name', 'Alice', envir = my_env)
cat('score:', get('score', envir = my_env), '\n')
cat('name :', get('name', envir = my_env), '\n')local() — Yalıtılmış Kod Blokları
local({...}), bir ifadeyi yeni bir yerel ortamda değerlendirir. Blok içinde oluşturulan değişkenler genel ortama sızmaz. Bu, çalışma alanını gereksiz değişkenlerle doldurmaması gereken geçici hesaplamalar için kullanışlıdır.
result <- local({
temp1 <- 100
temp2 <- 200
temp1 + temp2 # the last expression is returned
})
cat('result:', result, '\n')
cat('temp1 in global:', exists('temp1'), '\n') # FALSEYalıtım için local() ve İşlev Karşılaştırması
Hem local() hem de hemen çağrılan bir işlev kapsam yalıtımı sağlar. local(), tek seferlik yalıtım için daha özlüdür; mantığı yeniden kullanılabilir veya sınanabilir yapmak istediğinizde adlandırılmış bir işlev daha iyidir.
# Option A: local()
result_a <- local({
x <- 7
y <- 3
x * y
})
# Option B: immediately invoked function
result_b <- (function() {
x <- 7
y <- 3
x * y
})()
cat(result_a, result_b, '\n')
cat('x in global:', exists('x'), '\n')Bir İşlevden Genel Değişkenleri Okuma
İşlevler, özel bir söz dizimi olmadan çevreleyen kapsamlarındaki (genel veya başka bir kapsam) değişkenleri okuyabilir. Bu, standart sözlüksel kapsam davranışıdır. Ancak genel duruma yoğun biçimde güvenmek, işlevlerin sınanmasını zorlaştırır — mümkün olduğunda açık bağımsız değişkenleri tercih edin.
tax_rate <- 0.20 # global configuration
apply_tax <- function(price) {
price * (1 + tax_rate) # reads tax_rate from global
}
cat(apply_tax(100), '\n')
cat(apply_tax(250), '\n')Değişken Gölgeleme
Bir yerel değişken, genel değişkenle aynı ada sahip olduğunda yerel bağlama genel olanı gölgeler. İşlevin içinde yerel sürüm kullanılır. Genel değişken değişmeden kalır. Bu işlem istemeden yapılırsa fark edilmesi zor hatalara yol açabilir.
mean <- 99 # shadows base R's mean() function
cat(mean, '\n') # prints 99, not the function
# To call the real mean, use base:: prefix
cat(base::mean(c(1, 2, 3, 4, 5)), '\n')
rm(mean) # remove the shadowfunction() Ortamları
Bir işlev her çağrıldığında R, çağrı için yeni bir ortam oluşturur ve işlevin çevreleyen ortamını üst ortam olarak kullanır. Farklı çağrıların yerel değişkenleri, özyinelemeli çağrılarda bile birbirini etkilemez.
factorial_r <- function(n) {
# Each recursive call has its own local n
if (n <= 1) return(1)
n * factorial_r(n - 1)
}
cat('5! =', factorial_r(5), '\n')
cat('7! =', factorial_r(7), '\n')Değişkenleri Kaldırmak için rm()
rm('name') veya rm(name), geçerli (veya belirtilen) ortamdan bir bağlamayı kaldırır. Geçici değişkenleri temizlemek için kullanın. Belirli bir ortamdan kaldırmak için envir = e aktarın.
x <- 42
y <- 'hello'
cat('Before rm:', ls(), '\n')
rm(x)
cat('After rm(x):', exists('x'), '\n')
rm('y')
cat('After rm(y):', exists('y'), '\n')Kısa Denetim
<<- işleci, normal <- işlecinin yapamadığı neyi yapar?
Kapsam: Temel Çıkarımlar
Genel ve yerel kapsam için temel çıkarımlar:
- Bir işlevin içindeki
<-, yerel bir değişken oluşturur — genel değişken değişmez - İşlev parametreleri yerlidir; R değerle aktarır (değişiklikte kopyalama)
<<-, üst ortam zincirinde ilerler ve eşleşen ilk bağlamayı değiştirir- Açıkça belirli bir ortama atama yapmak için
assign('x', val, envir=e) local({...}), adlandırılmış bir işlev oluşturmadan geçici bir kapsam sağlar- Önemli adları (örneğin
mean,c,T) gölgelemekten kaçının
# Demonstrate local + <<- cleanly
running_sum <- 0
local({
values <- c(10, 20, 30, 40)
for (v in values) running_sum <<- running_sum + v
})
cat('Running sum:', running_sum, '\n')
cat('values in global:', exists('values'), '\n')Sıkça Sorulan Sorular
“Küresel ve Yerel Kapsam” dersi ücretsiz mi?
Evet — “Küresel ve Yerel Kapsam” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“Küresel ve Yerel Kapsam” dersinde ne öğreneceğim?
.GlobalEnv, işlev ortamları ve kapanışlar arasındaki farkı anlayın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Küresel ve Yerel Kapsam” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- R'de Ortam Nedir?
- Sözcüksel Kapsam Kuralları
- Küresel ve Yerel Kapsam
- Ortamları Oluşturma ve İnceleme