0'dan İleri Seviyeye Mobil Uygulama Geliştirme Eğitimi Veriyorum #7

Gauloran

Global Moderatör
7 Tem 2013
8,130
621
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

aJ7BSjP.png


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

XMUWSOS.png


<3 Gauloran
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.