Dart, 2011 yılının Ekim ayının 10-12. günlerinde tanıtılan, Google tarafından geliştirilen açık kaynaklı ve genel amaçlı bir programlama dilidir. Dart ile web, sunucu, mobil uygulamalar ve IoT cihazlar geliştirilebilir. Her programlama dilinde olduğu gibi Dart dilinde de fonksiyonlar hayati öneme sahiptir. Çünkü aslında yazılan her uygulama bir fonksiyonlar bütünüdür.
Fonksiyonları bir uygulamada bulunan paketler bütünü olarak düşünebiliriz. Örneğin yapmış olduğunuz bir uygulamada birden fazla karekök hesaplama gereği duyuyorsunuz. Bunun için her defasında karekök hesaplama işlemi yazmak yerine bunu bir fonksiyon içinde yazıp gerektiği yerde bu fonksiyonu çağırabilirsiniz. Ayrıca fonksiyonunuzda yapacağınız bir değişiklik, kullanılmış olduğu her alanda aynı anda yapılacağı için hata yönetimi de sağlanmış olur. Bu sayede daha temiz, anlaşılır ve kullanımı kolay bir kod bütünü oluşturmuş oluruz. Peki bir fonksiyon nasıl oluşturulur ?
Fonksiyon Yapısı
döndürme_ tipi fonksiyon_ismi (parametre_listesi) {
fonksiyon_gövdesi
}
Fonksiyonlar başka bir fonksiyon tarafından çağırıldıkları zaman, çağırıldıkları fonksiyona bir değer döndürebilirler. Fonksiyon başlığındaki döndürme_ tipi dönen değerin veri tipidir. Eğer fonksiyon herhangi bir değer döndürmüyorsa döndürme_ tipi, ‘boş’ anlamına gelen ‘void’ ile kullanılır. İkinci bölüm olan fonksiyon_ismi yazılırken, ‘camelCase’ yazı tipi kullanılır. Yani ilk harf küçük ondan sonra gelen kelimenin her harfi büyük şeklinde. Örneğin, toplamaFonksiyonum, arabaSec gibi. Parantez içinde verilen üçüncü bölüm ise parametre_listesi ‘ dir. Parametreler, fonksiyonların, çağırıldıkları fonksiyondan veri alabilmelerini sağlayan değişkenlerdir. Fakat bazı fonksiyonlar parametre almaz. Bu fonksiyonlara ‘parametresiz fonksiyonlar’ denir.
Fonksiyonu Çağırma
Yazılmış olan bir fonksiyonun main bloğuna çağrılması ise fonksiyon prototipi sayesinde olur. Bir fonksiyon prototipi,
döndürme_ tipi fonksiyon_ismi (parametre_listesi);
şeklinde oluşur. Derleyici main bloğu içerisinde fonksiyon_ismi ’ ni görünce, bunun prototipi olan fonksiyonun çağırılması anlamına geldiğini bilir. Bu kullanıma bir örnek verecek olursak,
void main () {
karsilamaYap();
kullaniciMail('mehmet');
}
void karsilamaYap() {
print('Synta-x.com, Hoşgeldiniz');
}
void kullaniciMail(String kullaniciAdi) {
print('$kullaniciAdi@synta-x.com');
}
Yazmış olduğumuz bu örnekle değer döndürmeyen ‘void’ kullanımını, parametreli ve parametresiz fonksiyon kullanımını gördük. Bunlara ek olarak bir fonksiyon prototipinin nasıl yazıldığını ve değer atamasının nasıl yapıldığını incelemiş olduk.
Fonksiyonun Main Bloğuna Değer Döndürmesi
Bu fonksiyonlar çağırıldığı yere değer döndüreceği için, return() komutunu kullanırlar.
return (ifade);
Bu duruma bir örnek verecek olursak,
void main () {
double faizSonuc = faizHesapla(15000,6);
print('Aldığınız 15.000 TL kredinin faiz tutarı $faizSonuc TL');
}
double faizHesapla(double krediTutari, double yuzde) {
double faiz = krediTutari * yuzde/100;
return faiz;
}
Oluşturmuş olduğumuz fonksiyona dikkat edecek olursak eğer değer döndürdüğü için dönmüş olan değerin veri tipini aldı ve çıkan faiz miktarını main fonksiyonuna return ifadesiyle döndürmüş oldu. Ayrıca burada da olduğu gibi main bloğuna dönen ifade başka bir değişkene atanıp farklı yerlerde kullanılabilir.
Opsiyonel ve İsimlendirilmiş Fonksiyon Kullanımı
Fonksiyonlar için bir diğer önemli bir nokta ise belirtilen parametrelerde fonksiyona gönderilmeyen bir değer olursa fonksiyonun hata verdiğidir. Örneğin,
Bunu aşmak için opsiyonel parametre özelliğini kullanırız. Opsiyonel olması istenen parametreler [ ] (köşeli parantez) içine konur. Artık herhangi bir değer vermeseniz bile program çalışacaktır.
void main () {
sayiGoster(1);
}
int sayiGoster (int sayi1,[int sayi2, int sayi3]) {
print(sayi1);
print(sayi2);
print(sayi3);
}
Göründüğü gibi opsiyonel parametrelere null değerini yani boş değer atadı. Eğer [ ] (köşeli parantez) kullanmak yerine { }(süslü parantez) içine alırsak bu isimlendirilmiş parametre olur. Yani opsiyonel parametre gibi değer verilmediğinde null atayabilir, değer verilmek istendiğinde ise parametre isimleri kullanmalıyız.
void main () {
sayiGoster(sayi1:1);
}
int sayiGoster ({int sayi1, int sayi2, int sayi3}) {
print(sayi1);
print(sayi2);
print(sayi3);
}
void main () {
sayiGoster(sayi1:1, sayi2:2, sayi3:3);
}
int sayiGoster ({int sayi1, int sayi2, int sayi3}) {
print(sayi1);
print(sayi2);
print(sayi3);
}
Fonksiyonlar her programlama dilinin temel yapıtaşlarından biri. Fakat Dart sunmuş olduğu kod yazım özellikleri ve çoklu ortam desteğiyle programcıların yeni gözdesi olmaya aday. Peki sizce geleceğin programlama dilleri arasında Dart yer alır mı ?