Dart Dilinde Class (Sınıf) ve Nesne Kullanımı
Nesne tabanlı programlamada (OOP), sınıflar (class) kodunuzu düzenli, anlaşılır ve yeniden kullanılabilir hale getirir. Dart dili de sınıf yapısını güçlü bir şekilde destekler.
Bu yazıda, Dart’ta sınıf (class) mantığını kavramak için bir örnek üzerinden ilerleyeceğiz.
Gerçek bir senaryo düşünelim: Bir araç satış firması, müşterilerine araç özelliklerini göstermek istiyor.
Bunu Dart dilinde nasıl yaparız, adım adım inceleyelim.
1. Sınıf (Class) Nedir?
Sınıflar, bir nesnenin sahip olabileceği özellikleri (verileri) ve davranışları (metodları) bir arada tanımlar.
Kısaca; sınıf bir şablondur, ondan üretilen her nesne (object) bu şablonun bir kopyası gibidir.
Sınıflar Class SınıfAdı { tüm işlemler } şeklinde tanımlanır. Sınıf tanımlarken nesne isimleri büyük harfle başlar.
Şimdi bu yapıyı daha somut bir şekilde inceleyelim.
2. Arabam Sınıfını Tanımlayalım
Öncelikle, “arabam” adında bir class (sınıf) tanımlayalım.
Bu sınıf, bir arabanın sahip olabileceği özellikleri içerecek:
- Maximum hız (int) → Tam sayı türünde veri tutacak.
- Renk (String) → Sözel bir bilgi olduğu için metin türünde olacak.
- Fiyat (double) → Ondalıklı değerleri de içerebileceği için
double
türü kullanılacak. - Stok durumu (bool) → Sadece
true
veyafalse
değerini alabileceği için mantıksal (boolean) tür olacak. - Tip (String) → Aracın tipi (örneğin “SUV”, “Sedan”, “Hatchback” vb.) sözel bir bilgidir.
Bunları Dart’ta şu şekilde tanımlayabiliriz:
class Arabam{
// Aracın sahip olduğu özellikleri tanımlıyoruz.
int maximumHiz = 240;
String renk = "Beyaz";
double fiyat = 126;
String aracTipi = "Sedan";
bool stokDurumu = true;
}
Bu haliyle sınıfımız temel özelliklere sahip, ancak değerleri sabit. Gerçek hayatta bu değerler
kullanıcı tarafından girilir. Bunun için constructor (yapıcı metot) kullanmamız gerekir.
3. Constructor (Yapıcı Metot) Kullanımı
Constructor, sınıftan yeni bir nesne oluşturulduğunda ilk çalışan yapıdır.
Değişkenlerin daha sonra atanacağını belirtmek için required
anahtar kelimesini kullanırız.
class Arabam{
// Aracın sahip olduğu özellikleri tanımlıyoruz.
int maximumHiz;
String renk;
double fiyat;
String aracTipi;
bool stokDurumu;
// Constructor tanımlıyoruz
Arabam({required this.maximumHiz,
required this.renk,
required this.fiyat,
required this.aracTipi,
required this.stokDurumu
});
}
Artık kullanıcıdan alınan verilerle yeni bir araç oluşturabiliriz.
4. Bilgi Gösterimi İçin Metot (Method) Yazalım
Her araç bilgilerini ekranda gösterebilsin diye bir metot tanımlayalım.
Bu metot sınıf içindeki özellikleri print()
ile yazdıracak:
void aracBilgisi(){
print("---------------------------------------");
print("Aracın Maximum Hızı : $maximumHiz km/s");
print("Aracın Rengi : $renk");
print("Aracın Fiyatı : $fiyat ₺");
print("Aracın Tipi : $aracTipi");
print("Aracın Stok Durumu : $stokDurumu");
}
5. Nesneleri Oluşturalım
Artık sınıfımız hazır.
Yeni bir Dart dosyasında arac1, arac2 ve arac3 isimli nesneleri oluşturup bilgilerini aracBilgisi() metodu ile ekrana yazdıralım:
import 'package:dart_dersleri/blog/araba_ornek.dart'; // Arabam sınıfına erişim
void main(){
// Araç değerlerini girmek için her aracı sisteme ekliyoruz
var arac1 = Arabam(maximumHiz: 240,
renk: "Beyaz",
fiyat: 849000,
aracTipi: "SUV",
stokDurumu: true);
var arac2 = Arabam(maximumHiz: 200,
renk: "Sarı", fiyat: 436000,
aracTipi: "Hatchback",
stokDurumu: true);
var arac3 = Arabam(maximumHiz: 270,
renk: "Siyah", fiyat: 760000,
racTipi: "Sedan",
stokDurumu: false);
// Kullanıcının eklediği araç bilgislerini ekrana yazdırıyoruz
arac1.aracBilgisi();
arac2.aracBilgisi();
arac3.aracBilgisi();
}
Ekran Çıktısı:
---------------------------------------
Aracın Maximum Hızı : 240 km/s
Aracın Rengi : Beyaz
Aracın Fiyatı : 849000.0 ₺
Aracın Tipi : SUV
Aracın Stok Durumu : true
---------------------------------------
Aracın Maximum Hızı : 200 km/s
Aracın Rengi : Sarı
Aracın Fiyatı : 436000.0 ₺
Aracın Tipi : Hatchback
Aracın Stok Durumu : true
---------------------------------------
Aracın Maximum Hızı : 270 km/s
Aracın Rengi : Siyah
Aracın Fiyatı : 760000.0 ₺
Aracın Tipi : Sedan
Aracın Stok Durumu : false
Her araç nesnesi kendi bilgilerini taşır ve birbirinden bağımsızdır. Oluşturduğumuz Arabam sınıfı, araç bilgilerini düzenli şekilde saklayarak programlamayı daha temiz, okunabilir ve yönetilebilir hale getirdi. İşte nesne tabanlı düşünmenin gücü burada ortaya çıkar.
7. Yan Etki (Side Effect) Nedir?
Sınıflarda, bir metodun sınıf içindeki değişkenleri değiştirmesi işlemine Yan Etki (Side Effect) denir.
Yani bir metod, sınıfın durumunu (state) değiştiriyorsa bu bir yan etkidir.
Örneğin, araç üzerinde indirim uygulayabilir, rengini veya stok durumunu güncelleyebiliriz:
// Arac Stok Bilgisi Değiştirme Metodu
// stokAc() stokları açıyoruz.
void stokAc(){
stokDurumu = true;
}
// stokKapat() stokları kapatıyoruz.
void stokKapat(){
stokDurumu = false;
}
// Araca beyaz renk tanımlanır
void renkBeyaz(){
renk = "Beyaz";
}
// Araca gri renk tanımlanır
void renkGri(){
renk = "Gri";
}
// Araca bordo renk tanımlanır
void renkBordo(){
renk = "Bordo";
}
// Araca yapılacak indirimlerin tanımlanması
// %5 indirim saplanması
void yuzdeBesIndirim(){
fiyat = fiyat - ((fiyat * 5) / 100);
}
// %10 indirimin saplanması
void yuzdeOnIndirim(){
fiyat = fiyat - ((fiyat * 10) / 100);
}
// Engelli bireyler için %26,3 vergi indirimi
void engelliVergiIndirim(){
fiyat = fiyat - ((fiyat * 26.3) / 100);
}
Şimdi ise arac1 üzerinden kullanıcı ekranından ürünlerin stoğunu açıp-kapama, renk değiştirme ve indirim uygulaması işlemlerini yapalım.
import 'package:dart_dersleri/blog/araba_ornek.dart';
void main() {
var arac1 = Arabam(maximumHiz: 240,
renk: "Beyaz",
fiyat: 849000,
aracTipi: "SUV",
stokDurumu: true);
arac1.aracBilgisi();
arac1.yuzdeBesIndirim(); // %5 indirim
arac1.renkBordo(); // Renk değiştirildi
arac1.stokKapat(); // Stok kapatıldı
arac1.aracBilgisi(); // Güncel bilgiler
}
Ekran Çıktısı:
---------------------------------------
Aracın Maximum Hızı : 240 km/s
Aracın Rengi : Beyaz
Aracın Fiyatı : 849000.0 ₺
Aracın Tipi : SUV
Aracın Stok Durumu : true
---------------------------------------
Aracın Maximum Hızı : 240 km/s
Aracın Rengi : Bordo
Aracın Fiyatı : 806550.0 ₺
Aracın Tipi : SUV
Aracın Stok Durumu : false
Process finished with exit code 0
Sonuç Olarak
Bu örnekle birlikte Dart dilinde:
- Sınıf (class) tanımlamayı,
- Nesne (object) oluşturmayı,
- Constructor kullanımını,
- Metotlarla bilgi göstermeyi
- Ve sınıf içi verileri değiştirmeyi (side effect) öğrendik.
Bu yapı sayesinde kodlarınızı daha modüler, okunabilir ve bakımı kolay hale getirebilirsiniz.
Artık siz de kendi sınıflarınızı oluşturarak projelerinizi nesne tabanlı şekilde geliştirebilirsiniz.