merhaba mobil uygulama geliştirme serisinde dart dili ile devam ediyoruz daha önce yorum yapıp incelemediyseniz serinin diğer konularına yazabilirsiniz
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #1
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #2
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #3
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #4
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #5
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #6
serinin 7.konusuyla devam edelim. CarModel diye bir sınıf oluşturalım dart diliyle devam ediyoruz
şöyle bir sınıf oluşturduk ama buna eklemeler yapmamız gerekli şu equality olayını ayarlayalım vscode kullananlar için bunlar otomatik zaten tek tıkla çözülüyor
bir de araba modelleri diye orada enum kullanmışız kolay olsun diye sonra sınıfa entegre etmişiz şimdi şu eşitlik olayını neden yaptım o sınıftan nesne oluşturulduğunda nesneleri karşılaştırırken referans bazlı çalışıyordu fakat artık karşılaştırma yapabileceğiz öbür türlü hep false verecekti bizim kontrolümüzde. ana fonksiyonumuzun kodlarını paylaşayım
şimdi biz bmw olan ve moneysi 20 den büyük olan arabaların ismini söyletmek istiyoruz misal
şimdi bu bize instance of bir şey bir şey çıktısını verir debug yaptığımızda ama
gidip sınıfa toString metodunu override ettiğimizde olaylar düzelecek ve bunu şaka maka bu yöntemle yaparak kaliteli kod yazmış olursunuz.
şimdi map metodunu kullanalım joinleyerek
şimdi singleWhere i kullanalım singleWhere de where gibi ama tek bir tane yetiyor
burada patlıyoruz çünkü singleWhere koştuk ama o data yoksa crash atıyor bize işte tam da bu noktada artık try catchten bahsetmenin zamanı geldi bunun da mantığı şu elimde bu tarz bir kod var ama exception çıkabilir yani hata alırsam programı patlatma orada o hatayı yakala crash vermeden bu işi kurtaralım demektir
finally kısmını da konuşalım
şimdi listeye eleman ekleyip sort metoduna kendimiz bir şeyler koyalım küçükten büyüğe sıralama yapamaz çünkü sort() şeklinde boş bırakırsak patlayacak neye bakıp karşılaştırma yapacağını bilmiyor ona söylememiz gerek
büyükten küçüğe isteseydi second ile first ün yerini değiştirirdik düz mantık
bu arada şu expand metodu kafa karıştırabilir bağımsız bir örnek vermemiz lazım
şimdi bmwx5 i silelim listeden ama şöyle söyleyelim direkt bmw x5 i sil değil de parası 25 olan araba nesnelerini sil carItems listesinden mesela bunun için removeWhere metodunu kullanabiliriz
bir sonraki konu ile seriye devam edelim. beğenilerinizi, yorumlarınızı bekliyorum seride geldiğimiz yer şu anda bu şekilde
<3 Gauloran
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #1
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #2
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #3
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #4
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #5
0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #6
serinin 7.konusuyla devam edelim. CarModel diye bir sınıf oluşturalım dart diliyle devam ediyoruz
Kod:
class CarModel {
final CarModels category;
final String name;
final double money;
String? city;
bool isSecondHand;
CarModel({
required this.category,
required this.name,
required this.money,
this.city,
this.isSecondHand = true,
});
şöyle bir sınıf oluşturduk ama buna eklemeler yapmamız gerekli şu equality olayını ayarlayalım vscode kullananlar için bunlar otomatik zaten tek tıkla çözülüyor
Kod:
@override
bool operator ==(covariant CarModel other) {
if (identical(this, other)) return true;
return
other.category == category &&
other.name == name &&
other.money == money &&
other.city == city &&
other.isSecondHand == isSecondHand;
}
@override
int get hashCode {
return category.hashCode ^
name.hashCode ^
money.hashCode ^
city.hashCode ^
isSecondHand.hashCode;
}
}
enum CarModels { bmw, yamaha, toyota }
bir de araba modelleri diye orada enum kullanmışız kolay olsun diye sonra sınıfa entegre etmişiz şimdi şu eşitlik olayını neden yaptım o sınıftan nesne oluşturulduğunda nesneleri karşılaştırırken referans bazlı çalışıyordu fakat artık karşılaştırma yapabileceğiz öbür türlü hep false verecekti bizim kontrolümüzde. ana fonksiyonumuzun kodlarını paylaşayım
Kod:
// ignore_for_file: public_member_api_docs, sort_constructors_first
//! ignore_for_file: public_member_api_docs, sort_constructors_first
void main(List<String> args) {
final model = CarModel(
category: CarModels.bmw,
name: "bmw x5",
money: 1412,
isSecondHand: false);
//! 5 tane araba olmasını istiyorsak ne yapalım
final carItems = [
CarModel(
category: CarModels.bmw,
name: "bmw x5",
money: 12,
isSecondHand: false),
CarModel(
category: CarModels.bmw,
name: "toyota 234234",
money: 44,
isSecondHand: false),
CarModel(
category: CarModels.bmw,
name: "yamaha 3324",
money: 33,
isSecondHand: false),
CarModel(
category: CarModels.bmw,
name: "toyota 0ye",
money: 55,
isSecondHand: false),
];
//!bu arabaların kaç tanesi ikinci el ?
//! yazılım dillerinin hemen hemen hepsinde high order dediğimiz functionlar bizi bekler bu tarz sorting işlemlerini çok performanslı yaparlar
//! bakalım
final resultCount =
carItems.where((element) => element.isSecondHand == true).length;
//! carItems listesinde where kullanıyoruz yani meali carItems listesinde elemanlardan isSecondHandi true olanların lengthi yani sayısını resultCount'a ata
print(resultCount);
//! where ile bu tarz işlemleri yapabiliyoruz
//!yeni bir araba geldi misal bu bizde var gibi hissediyorum doğru mu?
final newCar = CarModel(category: CarModels.bmw, name: "bmw x5", money: 33);
final isHaveCar = carItems.contains(newCar); //!içeriyorsa newCar ı true döndürür içermiyorsa false döndürür contains metodu
if (isHaveCar) {
print("elimizde var");
}else{
print("yok alalim");
}
}
şimdi biz bmw olan ve moneysi 20 den büyük olan arabaların ismini söyletmek istiyoruz misal
Kod:
//! bmw olan ve moneysi 20 den büyük olan arabaların ismini söyletmek istiyoruz misal
final resultBmwMore20 = carItems
.where(
(element) => element.category == CarModels.bmw && element.money > 20)
.join();
print(resultBmwMore20);
şimdi bu bize instance of bir şey bir şey çıktısını verir debug yaptığımızda ama
Kod:
@override
String toString() {
// TODO: implement toString
return "$name - $money";
}
gidip sınıfa toString metodunu override ettiğimizde olaylar düzelecek ve bunu şaka maka bu yöntemle yaparak kaliteli kod yazmış olursunuz.
şimdi map metodunu kullanalım joinleyerek
Kod:
final carNames = carItems.map((e) => e.name).join(",");
//! map metodu nasıl çalışıyor yani carItems listesini tek tek gez her elemanı e ye ata ve her seferinde => şunu yap
//! yani burada her seferinde e.name i alıyor bunu bütün elemanlar için yapıyor join metodunu kullandığımızda da toString ediyor ve araya , atıyor
//! bunları da carNames'e atıyor
print(carNames);
şimdi singleWhere i kullanalım singleWhere de where gibi ama tek bir tane yetiyor
Kod:
//! benim elimde mercedes var mı enuma gidip mercedes i ekledik bu arada
final mercedesCar =
carItems.singleWhere((element) => element.category == CarModels.mercedes);
print(mercedesCar);
burada patlıyoruz çünkü singleWhere koştuk ama o data yoksa crash atıyor bize işte tam da bu noktada artık try catchten bahsetmenin zamanı geldi bunun da mantığı şu elimde bu tarz bir kod var ama exception çıkabilir yani hata alırsam programı patlatma orada o hatayı yakala crash vermeden bu işi kurtaralım demektir
Kod:
try {
final mercedesCar = carItems
.singleWhere((element) => element.category == CarModels.mercedes);
print(mercedesCar);
} catch (e) {
print("araba yok data gelmedi");
}
finally kısmını da konuşalım
Kod:
try {
//!dene şu kodu
final mercedesCar = carItems
.singleWhere((element) => element.category == CarModels.mercedes);
print(mercedesCar);
} catch (e) {
//!yakala hatayı
print("araba yok data gelmedi");
} finally { //! son olarak da bu çalışır her türlü senaryoda bu finally çalışıyor unutmayalım
print("abi bu işlem agir oldu");
}
şimdi listeye eleman ekleyip sort metoduna kendimiz bir şeyler koyalım küçükten büyüğe sıralama yapamaz çünkü sort() şeklinde boş bırakırsak patlayacak neye bakıp karşılaştırma yapacağını bilmiyor ona söylememiz gerek
Kod:
//! şu yeni gelen araba varsa kaçıncı sırada
final index = carItems
.indexOf(newCar); //!newCarın indexini verir yani sırası diyebiliriz buna
//!yeni araba aldık mercedes misal bunu ekleyebilir miyiz
carItems.add(
CarModel(category: CarModels.mercedes, name: "mercedes xc", money: 12));
//!carItems listesine eleman ekledik
//! arabaları küçükten büyüğe doğru sıralar mısın
carItems.sort((first, second) => first.money.compareTo(second.money));
//! sort sırala demiş oluyoruz
//! first ve second vardır sıralama mantığında sıra sıra bakar ikili alıp karşılaştırma yaparak
//! => karşılaştırma şartı
//! şart olarak dedik ki firstün moneysini sayılarda var bu compareTo metodu () içerisine yazılan şeyi karşılaştıracak
//! firstün moneysini secondın moneysiyle karşılaştır küçükten büyüğe sıralar
print(carItems);
büyükten küçüğe isteseydi second ile first ün yerini değiştirirdik düz mantık
bu arada şu expand metodu kafa karıştırabilir bağımsız bir örnek vermemiz lazım
Kod:
import 'dart:math';
List<int> myList = [1, 2, 3, 4, 5];
List<int> expandedList = myList.expand((value) => 3 * value);
print(expandedList); // Output: [3, 6, 9, 12, 15]
şimdi bmwx5 i silelim listeden ama şöyle söyleyelim direkt bmw x5 i sil değil de parası 25 olan araba nesnelerini sil carItems listesinden mesela bunun için removeWhere metodunu kullanabiliriz
Kod:
//! toList yeni bir liste oluşturur referans atıp
carItems.removeWhere((element) =>
element.money ==
25); //parası 25 olanı sil carItems listesindeki araba nesnelerinden
print(carItems); //!bmw x5 e elveda diyebiliriz
bir sonraki konu ile seriye devam edelim. beğenilerinizi, yorumlarınızı bekliyorum seride geldiğimiz yer şu anda bu şekilde
<3 Gauloran