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

Gauloran

Kıdemli Moderatör
7 Tem 2013
8,123
606
local
merhaba seriye devam bu bölümde polimorfizmden bahsedecektim ancak başka bir konuda bahsettiğim için onun linkini buraya bırakmam yeterli öncelikle oraya gidip okuyup yorum yapıp inceleyebilirsiniz: https://www.turkhackteam.org/konular/dart-dilinde-ornekli-polimorfizm-kavrami.2038904/

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

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



bu nedenle serinin bu konusunda solid kavramından bahsedeceğim yazılımda. solid kavramından birkaç maddede bahsedebiliriz bunu bir kurallar bütünü gibi düşünebiliriz

1-diyelim bir sınıfımız var usermanager diye
icerisinde de bir fonksiyon var changeUserName diye name parametresi alan
acik kapalilik ilkesine gore usermanagerımızda bir class kendi işlerinin dışındaki işlere karışmamalı
ortak bir şey yapılması gerekiyorsa polimorfizm kullanılır o şekilde yapılır
yani metodlar ve classlar sadece kendi isini yapmalidir

2-açık kapalı kuralına uygun olmalı yani
sınıflarımız büyüyebilir halde olmalı,
yani ana bir sınıf oluyor alt dallarda o sınıfın şeylerini değiştirme mantığı açıklık kapalılık dedigimiz şey

3-bunun ornegini kodla gosterdim
bunun avantajları çok. gelişmeye müsait sınıf yapıları diyebiliriz

4-bunu da kodla gösterdik
alt classlarla çalışmalı bir yapı

Kod:
abstract class IUserOperation with IUserLocation, ILanguage {
  void write();
  void read();
  void delete();
}

abstract class IUserLocation {
  void locationChange();
}

abstract class ILanguage {
  void language();
}

Kod:
abstract class ICameraManager {
  void readQR();
}

class deviceCameraManager extends ICameraManager {
  final IphoneCameraRead iphoneCameraRead;

  deviceCameraManager(this.iphoneCameraRead);

  @override
  void readQR() {
    // TODO: implement readQR
  }
}

class IphoneCameraRead extends ICameraManager {
  @override
  void readQR() {
    // TODO: implement readQR
  }
}

artık bir sınıf oluşturduğumda veya başka bir sınıftan o sınıfa miras alma yaptığımızda yanına yorum satırı olarak düşmüyorum bile önceki serilerimizde bunu çokça yaptığımız için. devam edelim ayrıca bu konuda dart dilinde asenkron kavramından bahsetmemiz gerek.

Dart dili single thread çalışır yani main thread vardır işi yapar ve devam eder. Dart dilinde iki tane kavram var
diyelim ki ekrana print yazdık
main thread asenkron eventler
print kodu future requestleri
önce main threadler biter main thread bittikten sonra sağ tarafa atlar temelde mantık bu önce main thread biter sonra asenkron yaptıgımız isler biter
peki asenkron ne?

! ASENKRON NEDİR?
/*
asenkron:
diyelim ki kod zaman alacak
veya bir servise cevap sonradan gelecekse vb.
asenkron islem yapıyorsak threadimizi durdurup yapıyoruz daha sonra devam ediyoruz
sync(senkron):
çalışan akış bittikten sonra eğer sırada bir şey kalmadıysa sync requestler başlar bunlar tamamiyle kendi aralarında bekleme o onu beklesin
vb. senaryoları yoktur aynı anda çalışırlar ilk çağrılan önce biter diye bir şey yok yani senkronlarda.

Kod:
Future<void> main(List<String> args) async {
  //Future lar bizim dartta asenkron yapacağımız işlemler icin vardır
  print('a');
  //2 sn bekle sonra hiçbir müşteri alma
  await Future.delayed(Duration(seconds: 2));
  print('ab');

dart bu kod çalıştırıldığında önce yukarıdaki print çalışır sonra future.delayed kodu çalışır ardından print('ab') kodu çalışır
fakat future.delayed kodu çalıştırıldıktan hemen sonra print('ab') kodu da çalışıyor yani future.delayed kodunu beklemiyor hemen diğerini de çalıştırıyor
yani 2 saniye beklemiyor, işte 2 saniye beklemesi için yapmamız gereken şey asenkron yapmak bunun için başına await yazarsak bu kodun bitmesini bekler
await yazdığımız için de ilgili fonksiyona yani ana fonksiyona async ibaresini koyuyoruz

Kod:
print('hello');

  Future.delayed(Duration(seconds: 1)).whenComplete(() {
    print('hello2');
  });

  print('hello3');

  Future.delayed(Duration(seconds: 2)).whenComplete(() {
    print('hello4');
  });

buraya kadar olan kisimdaki kodlar debug edildiginde sırasıyla a ab hello hello3 hello2 hello4 goruyoruz
cunku önce dartta main threaddeki işlemler biter daha sonra Future requestler başlar, önce main thread deki işlemler bitince
ardından Future requestler başlar


Kod:
//!asenkronu öğrendik senkronu nasıl yaparız??
  //yani diyelim bir işlemimiz var bu işlemin akışı gelecek vs. bunu biz dinlemek istiyorsak senkron işlem
  Stream<int> bankMoneys = Stream
      .empty(); //! işte bu noktada stream kullanıyoruz şimdi obş bir stream oluşturduk bankMoneys adında, int değer dinlemek için

  bankMoneys = dataAddBankMoney(15, 3);

  bankMoneys.listen((event) {
    //!oluşturduğumuz streami listen metodu vardır streamlerin bu şekilde dinliyoruz, fonksiyonda yield ile belirttiğimiz değer gelince buraya gelecek
    print(event);
  });
//!Streamler de dizilerle aynı metodlar var, Streamler önemli bir değeri dinlemek için vs.

Streamimizden bahsedelim

Kod:
Stream<int> dataAddBankMoney(int retryCount, int money) async* {
  //int bir Stream oluşturduk 2 parametre alan bir fonskiyon bu
  int _localRetry = 0;
  await Future.delayed(Duration(seconds: 1));
  while (_localRetry < retryCount) {
    _localRetry++;
    yield money +=
        5; //dinlenecek olan şey bu değer başına yield yazılıyor ve async* ibaresi unutulmuyor
  }
}

dart dilinde bunula ilgili farklı örnekler araştırırsanız gayet daha kolay şeyler de bulabilirsiniz biraz da exception kavramından bahsetmemiz gerek

Kod:
class UserNameException implements Exception {
  @override
  String toString() {
    return 'user name null oldugu icin hata veriyor';
  }
}

diyelim bir degiskenimiz var userName diye null olabilen ve bu degiskenle ilgili bir kontrol kodu calistiriyoruz
ve bu kodu da try catch in icine yazıp hata falan yakalama mevzusu yapacagiz yani ancak boyle yapmak kodu baskasi okuyacagi icin mantikli
degil kendi exceptionlarimizi olusturmalıyız ki kişi anlasın

Kod:
String? userName;

  try {
    if (userName!.length > 2) {
      print('a');
    }
  } catch (e) {
    print(e);
  }

Kod:
void main(List<String> args) {
  String? userName = "a";

  if (userName.length > 2) {
    print('a');
  } else {
    throw UserNameException();
  }
}

rJe3SR.png


bir sonraki konumuzda call back metodlarından bahsedeceğiz okuduğunuz için teşekkürler seriyi takip etmeyi incelemeyi beğenmeyi yorum yapmayı unutmayalım

<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.