Yeni Başlayanlar için Dart Programlama Dili Temelleri -3

Elif ÖZCAN
8 min readMar 27, 2024

--

Dart Koşullu İfadeler ve Döngüler

Koşullu ifadeler, programların belirli koşullara göre farklı davranışlar sergilemesini sağlayan önemli yapı taşlarıdır. Bir programın belirli bir durumda ne yapması gerektiğini belirlemek için koşullu ifadeler kullanılır. Örneğin, bir hava durumu uygulaması düşünelim. Eğer hava güneşli ise, “Dışarı çıkabilirsiniz!” mesajı verilirken, hava yağmurlu veya bulutlu ise, “Evde kalın!” mesajı görüntülenir. Bu, bir koşullu ifade örneğidir. Program, belirli bir koşulun doğruluğuna bağlı olarak farklı çıktılar üretir.

Koşullu ifadeler, gerçek yaşam senaryolarını programlamada kullanıldıklarında daha anlaşılır hale gelir. Örneğin, bir alışveriş sitesinde, bir kullanıcının bakiyesinin belirli bir ürünü satın almak için yeterli olup olmadığını kontrol etmek için koşullu ifadeler kullanılabilir. Eğer kullanıcının bakiyesi ürünün fiyatından fazlaysa, “Ürünü satın alabilirsiniz.” mesajı görüntülenirken, bakiye yetersizse “Yetersiz bakiye, ürünü alamazsınız.” mesajı gösterilir.

Koşullu ifadeler, programların dinamik ve esnek olmasını sağlar. Belirli durumları değerlendirerek, programın kullanıcıya en uygun yanıtı vermesini sağlarlar. Bu sayede, programlar kullanıcıların beklentilerine ve ihtiyaçlarına daha iyi yanıt verebilir. Koşullu ifadeler, yazılım geliştirme sürecinde temel bir yapı taşı olduğu için, programlama dilinin temellerini öğrenen herkesin bu konuyu anlaması ve kullanması önemlidir.

Dart dilinde en yaygın kullanılan koşul ifadeleri if, else if veelse ifadeleridir. Bunların kullanımına örnek verecek olursak :

if :

if ifadesi, belirli bir koşulun doğru olup olmadığını kontrol etmek ve koşula bağlı olarak farklı işlemleri gerçekleştirmek için kullanılır. Koşul doğru ise, ifade içindeki kod bloğu çalıştırılır; aksi halde, kod bloğu atlanır.

// Hava durumu kontrolü
var weather = 'sunny';
if (weather == 'sunny') {
print('Güneşli hava, dışarı çıkabilirsiniz!');
} else {
print('Hava yağmurlu ya da bulutlu, evde kalın!');
}

else - if :

Bir koşulun doğru olmadığı durumda başka bir koşulun kontrol edilmesini sağlayan bir yapıdır. Bu yapı, bir dizi alternatif koşulun kontrol edilmesine ve hangi koşulun doğru olduğuna bağlı olarak farklı bir davranışın sergilenmesine olanak tanır.

if(ortalama >= 90) {
print("AA");
} else if(ortalama >= 80) {
print("BA");
} else if(ortalama >= 70) {
print("BB");
} else if(ortalama >= 60) {
print("CB");
} else if(ortalama >= 50) {
print("CC");
} else {
print("FF");
}

Bu kod parçası, bir öğrencinin not ortalamasına göre harf notunu belirlemek için kullanılıyor. Harf notu hesaplama kurallarına dayanarak, öğrencinin ortalama puanına bağlı olarak farklı harf notları atanır.

Örneğin:

  • Eğer öğrencinin ortalama notu 90 veya daha yüksekse, “AA” notu alır.
  • Eğer ortalama notu 80 veya daha yüksekse ve 90'dan küçükse, “BA” notu alır.
  • Benzer şekilde, ortalama notu 70 veya daha yüksekse ve 80'den küçükse, “BB” notu alır.
  • 60 veya daha yüksekse ve 70'den küçükse, “CB” notu alır.
  • 50 veya daha yüksekse ve 60'dan küçükse, “CC” notu alır.
  • 50'den düşükse, “FF” notu alır.

Bu kod parçası, ortalama bir sayı (örneğin, bir öğrencinin not ortalaması) ile if-else ifadelerini kullanarak, bu ortalama değere bağlı olarak farklı koşullara göre davranış belirler. Eğer ortalama, belirli bir aralığa düşerse, ilgili harf notu ekrana yazdırılır. Bu, bir öğrencinin performansını değerlendirirken yaygın olarak kullanılan bir yaklaşımdır.

Ternary Operator :

Ternary operator, bir koşulu değerlendirmek ve bu koşula göre farklı sonuçlar üretmek için kullanılan bir yapıdır. Ternary operator, genellikle if-else ifadesinin daha kısa bir versiyonunu sağlar ve bir satırda koşula bağlı olarak iki farklı değeri döndürür.

Ternary operatorün genel formatı şu şekildedir:

koşul ? ifade1 : ifade2
  • koşul : Değerlendirilmesi gereken koşul ifadesidir. Bu koşul true veya false olarak değerlendirilebilir.
  • ifade1: koşul doğru olduğunda döndürülecek değerdir.
  • ifade2: koşul yanlış olduğunda döndürülecek değerdir.
int yas = 18;
String kategori = yas >= 18 ? "Yetişkin" : "Ergen";

print("Kullanıcı kategorisi: $kategori");

Bu kod, `yas` değişkeninin değerine göre bir kullanıcı kategorisi belirler. Eğer `yas` değişkeninin değeri 18 veya daha büyükse, kullanıcı “Yetişkin” kategorisine atanır; değilse, “Ergen” kategorisine atanır. Sonuç olarak, kullanıcı kategorisi `kategori` değişkenine atanır ve ekrana yazdırılır.

Bu kodun çıktısı `Yetişkin` olur, çünkü `yas` değişkeninin değeri 18'dir ve bu koşul, ternary operatöründe belirtilen `yas >= 18` koşulunu sağlar. Bu durumda, “Yetişkin” değeri `kategori` değişkenine atanır ve ekrana yazdırılır.

Switch-Case :

Bir değişkenin değerine göre farklı durumlara karşılık gelen işlemleri gerçekleştirmek için kullanılan bir yapıdır. Değişkenin değeri, switch ifadesi içindeki farklı case durumları ile karşılaştırılır ve eşleşen bir case bulunduğunda, o case’e ait işlemler gerçekleştirilir.

Genel olarak switch-case ifadesinin yapısı şu şekildedir:

switch (değişken) {
case değer1:
// Değişken değeri değer1'e eşitse burası çalışır
break;
case değer2:
// Değişken değeri değer2'ye eşitse burası çalışır
break;
// Diğer case durumları
default:
// Değişkenin değeri hiçbir case ile eşleşmezse burası çalışır
}
  • değişken: Karşılaştırılacak olan değişken veya ifadeyi ifade eder.
  • değer1, değer2, ...: Değişkenin eşleştirileceği farklı değerleri temsil eder.
  • break: Her bir case durumunun sonunda kullanılır ve switch bloğundan çıkılmasını sağlar.
  • default: Herhangi bir case ile eşleşmeyen durumlar için bir varsayılan işlem belirtmek için kullanılır.
var gun = 3;
switch (gun) {
case 1:
print("Pazartesi");
break;
case 2:
print("Salı");
break;
case 3:
print("Çarşamba");
break;
case 4:
print("Perşembe");
break;
case 5:
print("Cuma");
break;
case 6:
print("Cumartesi");
break;
case 7:
print("Pazar");
break;
default:
print("Geçersiz gün numarası");
}

Bu örnekte, gun değişkeninin değerine göre switch-case ifadesi içindeki farklı durumlar kontrol edilir ve eşleşen bir durum bulunduğunda ilgili gün adı ekrana yazdırılır. Eğer gun değişkeninin değeri 3 ise, "Çarşamba" yazdırılır.

Flutter’da koşullu ifadeler, uygulamaların doğru bir şekilde çalışmasını sağlayan önemli bir konudur. If-else, ternary operator, switch-case ve null aware ifadeler gibi çeşitli yöntemler kullanarak, uygulamanızda farklı durumlar için farklı işlemler gerçekleştirebilirsiniz.

Dart Döngüler (Loop)

Döngüler, programlama dillerinde tekrar eden işlemleri kolayca gerçekleştirmemizi sağlayan yapı taşlarıdır. Bir döngü, belirli bir işlemi bir veya daha fazla kez tekrarlamak için kullanılır. Örneğin, bir liste içindeki her öğeyi işlemek, belirli bir aralıktaki sayıları yazdırmak veya belirli bir koşul sağlandığı sürece belirli bir işlemi yinelemek için döngüler kullanılabilir. Dart dilinde en yaygın kullanılan döngü türleri ‘for’ ve ‘while’ döngüleridir.

‘for’ döngüsü, belirli bir başlangıç değerinden başlayarak belirli bir koşulu sağlayana kadar belirli bir adımda bir değişkeni artırarak veya azaltarak çalışır. Bu döngü, genellikle belirli bir sayıda tekrar eden işlemleri gerçekleştirmek için kullanılır. Örneğin, 1'den 10'a kadar olan sayıları yazdırmak için bir ‘for’ döngüsü kullanabiliriz.

‘while’ döngüsü, bir koşul sağlandığı sürece bir işlemi tekrar etmek için kullanılır. Bu döngü, döngüyü başlatmadan önce koşulu kontrol eder ve koşul sağlandığı sürece döngüyü devam ettirir. Bu, belirli bir koşul sağlandığı sürece bir işlemi tekrarlamak istediğimiz durumlarda kullanışlıdır. Örneğin, bir kullanıcı doğru bir parola girene kadar bir parola istemi yeniden gösterilebilir.

Döngüler, programlamada tekrar eden işlemleri etkili bir şekilde yönetmemizi sağlar ve kodumuzu daha az tekrar eden ve daha modüler hale getirir. Ancak döngülerin sonsuz döngülere veya beklenmedik davranışlara neden olabileceği unutulmamalıdır, bu nedenle döngüleri dikkatli bir şekilde kullanmak önemlidir.

Döngülerin nasıl çalıştığını ve ne zaman kullanılabilceğine dair somut örnekler vermemiz gerekirse;

  1. for Döngüsü

Aşağıdaki örnekte, bir for döngüsü kullanarak 1'den 5'e kadar olan sayıları ekrana yazdıralım:

void main() {
for (int i = 1; i <= 5; i++) {
print(i);
}
}

Bu örnek, bir döngü kullanarak belirli bir aralıktaki sayıları yazdırmamızı gösterir. int i = 1 ifadesi, döngü değişkenini (iteratör) başlatır. i <= 5 ifadesi, döngünün kaç kez tekrarlanacağını belirtir. i++ ifadesi, her döngü adımında i değerini bir artırır.

2. while Döngüsü

Aşağıdaki örnekte, bir while döngüsü kullanarak 1'den 5'e kadar olan sayıları ekrana yazdıralım:

void main() {
int i = 1;
while (i <= 5) {
print(i);
i++;
}
}

Bu örnekte, while döngüsü belirli bir koşul sağlandığı sürece çalışır. int i = 1 ifadesi, döngü değişkenini başlatır. while (i <= 5) ifadesi, döngünün koşulunu belirtir. Döngü içindeki print(i) ifadesi, her döngü adımında i değerini ekrana yazdırır ve sonrasında i değeri bir artırılır (i++).

3. do- while

Do-while döngüsü, belirli bir koşul sağlandığı sürece bir işlemi tekrar etmek için kullanılan bir döngü yapısıdır. Do-while döngüsü, diğer döngü yapılarından farklı olarak, döngü gövdesini en az bir kez çalıştırır ve daha sonra koşulu kontrol eder. Bu nedenle, do-while döngüsü, döngü gövdesini en az bir kez çalıştırmak istediğimiz durumlarda kullanışlıdır.

Örneğin, bir kullanıcıdan bir sayı girmesini isteyen ve girilen sayının pozitif olduğunu kontrol eden bir program yazalım:

import 'dart:io';

void main() {
int sayi;

do {
print("Lütfen pozitif bir sayı girin:");
sayi = int.parse(stdin.readLineSync());
} while (sayi <= 0);

print("Girdiğiniz sayı pozitif!");
}

Bu örnekte, kullanıcıdan bir sayı girmesi istenir ve girilen sayının pozitif olup olmadığı kontrol edilir. Do-while döngüsü, kullanıcının pozitif bir sayı girene kadar döngü gövdesini en az bir kez çalıştırır. Daha sonra koşul kontrol edilir ve eğer koşul doğruysa döngü devam eder, yanlışsa döngüden çıkılır.

Bu şekilde, do-while döngüsüyle döngü gövdesini en az bir kez çalıştırmamızı sağlayarak, kullanıcı girişlerini veya belirli bir işlemi en az bir kez gerçekleştirmemizi sağlar.

Şimdi kontrol, döngü yapıları ve operatörler örnek soru yazalım: Verdiğimiz sayının faktoriyel değerini hesaplayalım.

void main(List<String> args) {
int verilenSayi = 5;
int faktoriyelDegeri = 1;

for (int i = 1; i <= verilenSayi; i++) {
faktoriyelDegeri = i * faktoriyelDegeri;
}
print(faktoriyelDegeri);
}

Bu kod parçası, bir sayının faktöriyelini hesaplamak için bir `for` döngüsü kullanarak bir programı gösteriyor. İşte kodun çalışma mantığı:

1. `verilenSayi` değişkeni 5 olarak tanımlanıyor. Bu, hesaplanacak olan sayının değerini temsil eder.
2. `faktoriyelDegeri` değişkeni 1 olarak başlatılır. Bu değişken, faktöriyel değerini tutar ve her adımda güncellenir.
3. `for` döngüsü, `i` değişkeni 1'den başlayarak `verilenSayi`’ye kadar artarak çalışır.
4. Döngünün her adımında, `faktoriyelDegeri` değişkeni, `i` değeriyle çarpılarak güncellenir. Böylece faktöriyel değeri hesaplanır.
5. Son olarak, hesaplanan faktöriyel değeri ekrana yazdırılır.

Bu kod parçası, bir sayının faktöriyelini hesaplamak için bir döngü kullanarak basit bir yöntem gösterir. Faktöriyel, bir sayının kendisi ile 1 arasındaki tüm tam sayıların çarpımıdır. Bu örnekte, 5 faktöriyeli (5!) hesaplanır. Sonuç olarak, çıktı 120 olacaktır, çünkü 5! = 5 * 4 * 3 * 2 * 1 = 120'dir.

4. forEach Döngüsü

Bir koleksiyonun her bir öğesi üzerinde dönmek için kullanılan bir döngü türüdür. Foreach döngüsü, koleksiyonun her bir elemanını sırayla alır ve bu elemanları işlemek için kullanılır. Dart dilinde, foreach döngüsü for-in ifadesiyle gerçekleştirilir.

for (var eleman in koleksiyon) {
// Eleman üzerinde işlemler yapılır
}

Burada:

  • eleman: Her bir döngü adımında koleksiyondan alınan elemanı temsil eden değişken adıdır.
  • koleksiyon: Elemanların alınacağı koleksiyonun adı veya referansıdır.
void main(){
var numara = [155,156,184,112];
numara.forEach((n){
print(n.toString());
});
}
  1. numara adında bir liste oluşturulur ve içerisine dört adet sayı eklenir.
  2. forEach metodu, listenin her bir elemanı için belirtilen işlemi gerçekleştirmek için kullanılır. Bu metod, liste elemanları üzerinde döngü yapar.
  3. forEach metodu bir lambda fonksiyon alır. Bu lambda fonksiyon, listenin her bir elemanı için çalışacak olan kod parçacığıdır. Bu örnekte, lambda fonksiyon, her bir elemanı n olarak alır ve o elemanı ekrana yazdırır. n.toString() ifadesi, sayıyı string olarak yazdırmak için kullanılır.
  4. main fonksiyonu içinde bu işlem gerçekleştirilir.

Bu kod parçası, listenin her bir elemanını ekrana yazdırmak için foreach döngüsünün kullanımını gösterir. forEach metodu, listenin elemanları üzerinde döngü yaparken, bu işlemi daha kompakt ve okunabilir bir şekilde gerçekleştirmemizi sağlar. Bu nedenle, dart dilinde listenin her elemanı üzerinde işlem yaparken sıkça kullanılan bir yöntemdir.

Bu döngü türleri, Flutter ve Dart’ta tekrarlayan işlemleri gerçekleştirmek için kullanılan temel yapı taşlarıdır. Bu döngüler, programların daha etkili bir şekilde çalışmasını sağlar ve kodun daha az tekrar edilmesini ve daha modüler olmasını sağlar.

Dart koşul yapıları ve döngüler konusu şimdilik bukadar, buraya kadar okuğunuz için teşekkür ederim. Bu yazının devamında dart ile ilgili diğer konu başlıklarına değineceğim. Umarım faydalı olmuştur bir başka yazımda görüşmek üzere…

Daha fazla kaynağa göz atmak isterseniz aşağıdaki linklere göz atabilirsiniz:

https://dart.dev/

--

--