Değişken scope' unu bitirebilen dil?

30.11.2006

Okuyucu : 1.869
Günlük Okuyucu : 3,5

Değişken scope' unu bitirebilen bir programlama dil var mı ya da hangi diller bunu destekliyor?

Örnek olarak;

Dim age As Integer = CurrentMember.Age
If age < 16 Then Exit Sub

End age <--- Scope u bitirme

console.writeline (age) <--- Compiler hata verir, değişken scope dışında

 

Scope işlemi bir çok dilde local / global olaraktır. Değişken ilk tanımlandığında içerisinde olduğu blok bitince, değişkenin scope' u da biter. Tabii ki sadece global değişkeni olan diller ve bir dizi farklı scope kavramı var ama temel olarak bu şekilde.

Ek olarak bazı diller ekstra blok desteği sunuyor yani bir işe yaramayan bir blok açıyor ve bloğu kapadığınızda içerideki yeni değişkenlerin hepsi dışarıda kullanılamaz hale geliyor.

"Niye kendimi kısıtlayayım ki?" diye düşünüyorsanız programlamanın ana merkezlerinden biri olan kompleksliği olabildiğince düşürmeyi es geçmiş oluyorsunuz. Bir değişkenin span' ı ve scope' u her zaman kompleksiti üzerinde büyük etkisi olmuştur.

Bir dil için bu özellik kritik olmaktan çok uzak ama gene de faydalı olabilir. Bu arada hala bu özelliği yalan bloklar harici bu şekilde destekleyen bir dil bilmiyorum, bileniniz var mı? Örnek sintaks ve kod örneği bekliyoruz.

 

Yorumlar

RSS Bu makalenin yorumlarını RSS ile takip et!

Bu biraz da kullanılan yapıdan kaynaklanıyor. Stack yapısı sanırım buna el vermiyor, değişkenler/referanslar yaratıldığı sıranın tersine yok edilir.
düşünsenize

int a;
int b;
endscope:a
dediğimizde stack yapısına aykırı bir hareket yapılmış oluyor. ben mi yanlış biliyorum?

ancak şu şekil bir kullanım mevcut c# için
void x()
{
int k=4;
{
int a;
int c;
}
c=5;//derleyici hatası
}

Tuna Toksöz [ # | 30.11.2006 ]

Aslında onunla alakası yok, yani ilk olarak "endscope:a" u

"a=null" gini düşünebiliriz yani aynı mantık ama konu runtime dan öte compiler' ın bunu analiz etmesi.


void x()
{
int k=4;
{
int a;
int c;
}
c=5;//derleyici hatası
}


Evet bu kod yukarıda bahsettiğim bloklamaya güzel bir örnek, ancak buradaki sorun grup almanız lazım yani sadece bir değişken için bu şekilde yapamıyorsunuz. Aslnda düsününce bu sekilde bloklama bir cok olayı çözebiliyor.

Ama mesela biraz uzun bir kod rutininde özellikle reference olarak bazı objeleri kullanıyorsam bunlar ile işim bitince o objeyi hemen bitirmek istiyorum. Lakin dün bu tip bir hatamı bulmam bir çok vaktimi aldı.

Az önce biraz blok kullanma üzerine pratik yaptım ana sorun şu ki kodu da blok kullanmaya göre ayarlamanız gerekiyor ki bu da kendi içinde ekstradan efor katıyor. Tabii ki efora lafımız yok ancak kodun akışına veya bloklanmasına göre kodu planlamak gerekiyor ki bence bu da ekstradan bir komplekslik katıyor. Açıkçası bugüne kadar hiç blok kullanmadım herhalde onun yerine fonksiyon() gibi çözümlere gidiyorum, genelde de dha mantıklı ama bloklar da gayet verimli olabiliyorlarmış diye düşünmeye başladım.

Ferruh Mavituna [ # | 30.11.2006 ]

sanırım tek sebep stack yapısı...

Tuna Toksöz [ # | 30.11.2006 ]

Stack tekiler function a giren degiskenler olur genelde yani fonksiyon baslarken parametreler stack e atilir ve oradan alinir. Yani bu durumda dedigim gibi stack limitlerinden dolayi degil ki zaten artik pek bu sekilde limitler kalmadi bir cok dil 50 takla ile her turlu kodu asm ye cevirebiliyor.

ve dedigim gibi zaten gercek bir variable isini bosaltma isleminin onemi yok burada onemli olan compiler in bu scope u tanimlayabilmesi. Ek olarak eger bosaltcaksa da rahatca x = Nothing veya x = null gibi bir sey ile yapabilir. Bu zaten kullanilan bir model.

Ferruh Mavituna [ # | 30.11.2006 ]

Öncelikle bunu ne için istediğinizi anlamadım. Eğer stack'te yer kaplamasın boşu boşuna diye böyle birşey istiyorsanız bu çok saçma. Zaten bildiğim compilerlar belli bir boyutu program başlayınca allocate edicek şekilde derleme yapıyor programları. Onun için bu boyutun aşılmadığı durumlarda bunları free edilmesi gibi bir durum olmaz. Aşılsada, ufacık değişkenler kadar boyutta değil, free etme ve allocation 4k (delphi için mesela) boyutunda olur en az low levelde.

undefined [ # | 25.12.2006 ]

Öncelikle bunu ne için istediğinizi anlamadım.

"Niye kendimi kısıtlayayım ki?" diye düşünüyorsanız programlamanın ana merkezlerinden biri olan kompleksliği olabildiğince düşürmeyi es geçmiş oluyorsunuz. Bir değişkenin span' ı ve scope' u her zaman kompleksiti üzerinde büyük etkisi olmuştur.

Ferruh Mavituna [ # | 25.12.2006 ]

Yukarida yazidaki ilgili kismi yapistirdim zaten daha onceden de yaklasik 3 defa dedik derdimiz performans, free alan vs. degil diye.

Ferruh Mavituna [ # | 25.12.2006 ]

Bu biraz sorunlu olabilir:

void dene() {
int x = 3;
for(int i=0; i<100; i++) {
x++;
end x; // x buradan sonra kullanilamaz, peki ya sonraki dongu?
birseylerYap();
}
// x burada kullanilabilir mi? Dongu icinde end x demistik.
// kullanabilmek mantikli, cunku end x dedigimiz scope'un disindayiz
}

x'in kullanimina kodun <string>end x</string>'den metinsel olarak sonraki bolumlerinde mi izin verilmeyecek, yoksa <string>end x</string>'den sonra x'e erismek mi yasaklanacak? Sizin kastiniz ikincisi degil sanirim, zaten bunu derleme zamaninda saglamak zor/imkansiz olurdu. Ilki icin ise end x lineer bir kodda uygun olabilir, ama yukaridaki gibi bir dongude insanin kafasinda soru isaretleri birakiyor.

myavuzselim [ # | 22.01.2007 ]

Evet oyle bir dil var: C

#include <stdio.h>

int main() {
int x = 3;
printf("%d\n", x);
#define x x_silindi
printf("%d\n", x);
return 0;
}

Saka yapiyorum tabii ki :)

myavuzselim [ # | 22.01.2007 ]

void dene() {
int x = 3;
for(int i=0; i<100; i++) {
x++;
end x; // x buradan sonra kullanilamaz, peki ya sonraki dongu?
birseylerYap();
}


Burada birseyleryap() ta calismamasi gerekiyor. Yani lokal ama limitli bir degisken.

Ferruh Mavituna [ # | 22.01.2007 ]

Whats up!
everything for free:
[url= http://vehetoz-free-swinger-vi-t.blogspot.com/]free swinger video clip[/url]
[url= http://nubeqog-sybian-orgasm-m-x.blogspot.com/]sybian orgasm movie[/url]
[url= http://fowerex-adv-black-sex-t-g.blogspot.com/]adv black sex tiny video xxx[/url]
[url= http://pefizos-ashley-video-wi-w.blogspot.com/]ashley video wife[/url]
bonus: [url= http://tilodes-porn-star-sampl-c.blogspot.com/]free video[/url]

aloterbloh [ # | 02.03.2007 ]

Yorum Ekle





Kullanılabilir Taglar : [<blockquote>] [<strong>] [<em>]

Değişken scope' unu bitirebilen dil? ile İlişkili Olabilecek Yazılar - Haberler

Tekerleği Yeniden Keşfetmeyin
Korsan Yazılımsız İki Yıl
Pragmatic Programmer Notları
OSX' i Windows' a Benzetme
Donanım Yazılımcıdan Ucuzdur

Diğer Yazılar

Neredeyim ?

Ferruh.Mavituna » Haberler » Değişken scope' unu bitirebilen dil?

Ferruh Mavituna
© 2002-2007, Ferruh Mavituna

Sabit IP Adresi : 81.22.99.133, SSL Erişimi, Hakkında