Erişilebilirlik Nedir?
Biz bir değişken bir fonksiyon tanımladığımızda varsayılan olarak buna her yerden erişebiliyoruz. Bazen bunu istemeyiz. Örneğin bir çalışanın özel bilgiler içeren değişkeninin okunmasını veya değiştirilmesini istemeyiz. Bu yüzden değişkenlerimizi, fonksiyonlarımızı private veya public yaparak erişilebilirliğini değiştirebiliriz. Dart yazılım dilinde bu özelliği kullanabilmemiz için iki erişilebilirlik yöntemi vardır. private ve public. Bazı yazılım dillerinde protected ta vardır. Ancak dart dilinde yoktur. Sadece iki tane.
Public ve Private Nedir?
Public kelime anlamı olarak halka açık demektir. Adından da anlaşılacağı üzere public tanımlanan bir değişken veya fonksiyona, tanımlandığı sınıfın ve fonksiyonun dışından da erişilebilir. Yani tanımlandığı sınıfın içerisinden erişilebilir olduğu gibi bir başka sınıftan da erişebiliriz.
Private ise kelime anlamı olarak özel demektir. Tanımlandığı sınıf veya fonksiyon içerisinden erişilebilir ancak bir başka sınıftan veya fonksiyondan erişilemez.
Public ve Private Nasıl Kullanılır?
Normal bir değişken tanımladığımızda ya da fonksiyon varsayılan olarak public tir. Herhangi bir anahtar kelime kullanmayız. Eğer değişkenimiz ya da fonksiyonumuzun isminin başına alt çizgi koyarsak o artı private olacaktır. Örneklersek int _sayi=5; bir private değişkendir. Artık ona sadece kendi sınıfından, bulunduğu yerden erişebiliriz.
Örnekleyelim;
Bir başka dart dosyası açtım ve içerisine Ogrenci diye bir class oluşturdum. Class içerisindeki no değişkeninin önüne alt çizgi koyarak erişilmesini kısıtladım onu private yaptım. main fonksiyonumun içerisinden erişemiyorum ve hata alıyorum.
Örnek Class
class Ogrenci {
String? adi;
String? soyAdi;
int? _no;
//_no diyerek private tanımladık
// bu sınıf dışından erişilmesini engelledik.
}
main ana fonksiyonum;
import 'nesne-public-private-class.dart';
void main(List<String> args) {
Ogrenci dene = Ogrenci();
dene.adi = "mehmet";
dene.soyAdi = "eser";
dene._no = 381;
//hata veriyor, private değişkene erişemiyorum
print(dene._no);
}
Eğer bir constructor, bir kurucu metot tanımlasaydık, içerisine değer atayabilirdik ancak daha sonra yine değişkene doğrudan erişip değerini okuma ve yazma yapamazdık.
Buraya kadar yaptığımız örnekte bir başka sınıf içerisindeki değişkene direkt ulaşmak istedik. Peki ya biz sınıf içerisinde değişkenin değerini okuyabileceğimiz ve değiştirebileceğimiz bir fonksiyon oluşturursak ne olur? Gelin hep birlikte bakalım.
Aşağıdaki örnekte class ımıza, no değerini okuyabileceğimiz ve değiştirebileceğimiz bir fonksiyon tanımladık.
class Ogrenci {
String? adi;
String? soyAdi;
int? _no;
//_no diyerek private tanımladık
// bu sınıf dışından erişilmesini engelledik.
Ogrenci(this.adi, this.soyAdi, this._no);
int noGetir() {
return _no!;
//private olan no değişkenini okuyabilmek için
//bir fonksiyon tanımladık (get ettik)
}
void noDegistir(int no) {
this._no = no;
//private olan no değişkenini değiştirebilmek için
//bir fonksiyon tanımladık (set etmek için)
}
}