Ders İçeriği

Flutter uygulamaları Dart programlama dili ile yazılır. Bu nedenle, Flutter geliştirmeye başlamadan önce Dart dilinin temel kavramlarını anlamak önemlidir. Dart, modern, nesne yönelimli, sınıf tabanlı ve çöp toplama özellikli bir dildir. Hem istemci tarafı web uygulamaları hem de mobil uygulamalar için optimize edilmiştir.

2.1. Değişkenler ve Veri Tipleri

Dart, statik olarak tiplendirilmiş bir dildir, yani bir değişkenin tipi derleme zamanında bilinir. Ancak, var anahtar kelimesini kullanarak tip çıkarımı yapmasına izin verebilirsiniz. Temel veri tipleri şunlardır:
Sayılar (Numbers): int (tam sayılar) ve double (ondalıklı sayılar).
Dizeler (Strings): Tek veya çift tırnak içinde tanımlanır. Çok satırlı dizeler için üç tırnak (''' veya """) kullanılabilir.
satırlı bir dizedir.'''; Dize interpolasyonu (`$`) ile değişkenleri veya ifadeleri dizelerin içine yerleştirebilirsiniz: dart String greeting = 'Merhaba name,yas\cınızname, yaşınız age.'; print(greeting); // Merhaba Alice, yaşınız 30. print('2 + 2 = ${2 + 2}'); // 2 + 2 = 4 ```
Booleans (Bools): true veya false değerlerini alır.
Listeler (Lists): Sıralı eleman koleksiyonlarıdır. Diğer dillerdeki dizilere benzer.
Haritalar (Maps): Anahtar-değer çiftlerinden oluşan koleksiyonlardır. Diğer dillerdeki sözlüklere veya hash maplere benzer.
Setler (Sets): Benzersiz elemanlardan oluşan sıralı olmayan koleksiyonlardır.
dynamic ve Object:
dynamic: Değişkenin tipinin çalışma zamanında belirleneceğini belirtir. Herhangi bir tipte değer alabilir ve derleme zamanı tip kontrolünü atlar. Dikkatli kullanılmalıdır, çünkü çalışma zamanı hatalarına yol açabilir.
Object: Tüm Dart sınıflarının temel sınıfıdır. Bir değişken Object tipinde tanımlandığında, herhangi bir tipte değer alabilir, ancak bu durumda çalışma zamanında tip dönüşümü (casting) yapmanız gerekebilir.

2.2. Operatörler

Dart, diğer programlama dillerine benzer birçok operatöre sahiptir:
Aritmetik Operatörler: +, -, *, /, ~/ (integer division), % (modulus)
Eşitlik ve İlişkisel Operatörler: ==, !=, >, <, >=, <=
Tip Test Operatörleri: is, is!
Atama Operatörleri: =, +=, -=, *=, /=, %=
Mantıksal Operatörler: && (AND), || (OR), ! (NOT)
Koşullu İfade Operatörleri:
condition ? expr1 : expr2 (Ternary operatör)
expr1 ?? expr2 (Null-aware operatör): expr1 null değilse expr1 değerini, aksi takdirde expr2 değerini döndürür.
Basamaklı (Cascade) Operatör (..): Aynı nesne üzerinde birden fazla işlem yapmanızı sağlar.

2.3. Kontrol Akış Yapıları

Programınızın akışını kontrol etmek için kullanılan yapılar şunlardır:
if, else if, else: Koşullu ifadeler için kullanılır.
switch: Belirli bir değişkenin farklı değerlerine göre farklı kod bloklarını çalıştırmak için kullanılır.
for döngüsü: Belirli bir sayıda veya bir koleksiyonun elemanları üzerinde döngü yapmak için kullanılır.
while ve do-while döngüleri: Bir koşul doğru olduğu sürece kod bloğunu çalıştırmak için kullanılır.
break ve continue: Döngülerin akışını kontrol etmek için kullanılır.
break: Döngüyü tamamen sonlandırır.
continue: Döngünün mevcut iterasyonunu atlar ve bir sonraki iterasyona geçer.

2.4. Fonksiyonlar

Dart'ta fonksiyonlar, belirli bir görevi yerine getiren kod bloklarıdır. Fonksiyonlar parametre alabilir ve bir değer döndürebilir.
Temel Fonksiyon Tanımı:
Kısa Fonksiyonlar (Arrow Functions): Tek satırlık ifadeler için => (arrow) sözdizimi kullanılabilir.
İsteğe Bağlı Konumsal Parametreler: Köşeli parantez [] içine alınarak isteğe bağlı parametreler tanımlanabilir. Bu parametreler null olabilir veya varsayılan bir değere sahip olabilir.
İsteğe Bağlı Adlandırılmış Parametreler: Küme parantezleri {} içine alınarak adlandırılmış parametreler tanımlanabilir. Bu parametreler çağrılırken isimleriyle belirtilir ve sıraları önemli değildir. required anahtar kelimesi ile zorunlu hale getirilebilir.

2.5. Sınıflar ve Nesne Yönelimli Programlama (OOP) Temelleri

Dart, nesne yönelimli bir dildir ve sınıflar, nesnelerin blueprint'leridir. OOP kavramları (kapsülleme, miras, polimorfizm) Dart'ta da mevcuttur.
Sınıf Tanımı:
Getter ve Setter'lar: Sınıf özelliklerine erişimi kontrol etmek için kullanılır.
Miras (Inheritance): Bir sınıfın başka bir sınıftan özellik ve davranışları miras almasıdır. extends anahtar kelimesi kullanılır.
Soyut Sınıflar (Abstract Classes): Doğrudan örneği oluşturulamayan, ancak miras alınabilen sınıflardır. abstract anahtar kelimesi kullanılır ve soyut metotlar içerebilirler.
Arayüzler (Interfaces): Dart'ta interface anahtar kelimesi yoktur. Bunun yerine, bir sınıfı implements anahtar kelimesiyle uygulayarak arayüz gibi kullanabilirsiniz. Bir sınıf bir arayüzü uyguladığında, o arayüzdeki tüm metotları override etmek zorundadır.

2.6. Koleksiyonlar (List, Map, Set)

Dart, veri yapılarını düzenlemek için güçlü koleksiyon tipleri sunar. Bunlar List, Map ve Set'tir.
Listeler (Lists): Sıralı eleman koleksiyonlarıdır. Elemanlara indeksleriyle erişilir.
Haritalar (Maps): Anahtar-değer çiftlerinden oluşan koleksiyonlardır. Anahtarlar benzersiz olmalıdır.
Setler (Sets): Benzersiz elemanlardan oluşan sıralı olmayan koleksiyonlardır. Bir elemanın sette olup olmadığını hızlıca kontrol etmek için kullanışlıdır.
Bu bölümde Dart programlama dilinin temel yapılarını ve kavramlarını öğrendiniz. Bu bilgiler, Flutter ile mobil uygulama geliştirirken Dart kodunu anlamanız ve yazmanız için sağlam bir temel oluşturacaktır.