Yazımızın içeriğini aşağıdan video olarak izleyebilirsiniz.
Dart Kapsam – Scope Nedir?
Basit gibi duran ancak iyi bilinmesi gereken bir konudur kapsam ( scope)
İç içe döngüler, fonksiyonlar, değişkenler tanımladığımızda bir sürü bloklar tanımlarız. Dolayısı ile parantezler tanımlarız. Bunların içerisinde değişkenlerimiz olur. Bazen alt alta yazdığımız bloklarda yine aynı isimlerde değişkenler tanımlanabiliyor. Peki hangi değişken hangisine ait, hangisinden hangisine erişilebilir? Biraz kafa karıştırıcı gibi ama aslında hiç değil. Bunları örneklerle inceleyeceğiz ve hep birlikte ne kadar basit olduğunu göreceğiz. Artık iç içe yapılanmış blokları gördüğümüzde farklı bir bakış açısı ile bakacağız.
Şunu net bir şekilde bilmeliyiz; Her bloğun kapsama alanı farklı; Gelin birlikte inceleyelim.
Mantık şu;
- Yapılarımız en dıştan içeri doğru özelleşiyor,
- En dıştaki bir blok, içeride ki özel bloklara erişemez,
- En içte ki özel bir blok ise dışındakilere erişebilir.
Kafa karıştırmaya hiç gerek yok, konuyu bir iki basit örnek ile anlatıp geçeceğiz. Gerisi sizde…
Alttaki örneğe baktığımızda if bloğunun ana fonksiyonumuz olan main fonksiyonu kapsamında da olduğunu görüyoruz. Bu yüzden aynı isimde bir değişken varsa önce kendi bloğuna daha sonra genele doğru üst bloğa bakacaktır. Ana fonksiyonumuz olan main ise bakıldığında if bloğunun içerisinde değildir. Ona erişmesi mümkün değildir.
void main(List<String> args) {
int a = 2;
if (true) {
int a = 4;
a = 5;
print(a);
}
print(a);
}
/*
SONUÇ
5
2
*/
Aşağıda bir class örneği yaptık. Class içerisine bir fonksiyon tanımladık ve her birinin içerisine bir a değişkeni atıp yazdırdık.
void main(List<String> args) {
OrnekClass ornekNesne = OrnekClass();
print(ornekNesne.a);
ornekNesne.kapsamFonksiyon();
}
class OrnekClass {
int a = 2;
void kapsamFonksiyon() {
int a = 4;
print(a);
if (true) {
int a = 6;
print(a);
}
}
}
/*
SONUÇ
2
4
6
*/
this Anahtar Kelimesi Nedir? Nasıl Kullanılır?
Biz bir üst resimdeki örnekte bir class bloğu içerisinde bir fonksiyon bloğu ve onun da içerisinde if bloğu oluşturduk. if bloğu içerisinde print(a) dediğimizde olması gereken gibi önce if içerisine baktı ve orada ki a’nın değerini yazdı. Bazen özel durumlar oluşur. this anahtar kelimesi Class yapılarına özel olarak kullanılır. Biz if içerisinde print(this.a) deseydik eğer, if içerisinde ki a değişkenine değil class içerisinde ki a değişkenine ulaşmış olacaktık. Bu sınıflara özel bir durumdur. Kısacası this için sınıf kapsamındaki değişkenlere ve fonksiyonlara erişmek için kullanılır diyebiliriz.
Örnekleyelim;
void main(List<String> args) {
OrnekClass ornekNesne = OrnekClass();
print(ornekNesne.a);
ornekNesne.kapsamFonksiyon();
}
class OrnekClass {
int a = 2;
void kapsamFonksiyon() {
int a = 4;
print(a);
if (true) {
int a = 6;
print(this.a);
}
}
}
/*
SONUÇ
2
4
2
*/