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

Gauloran

Global Moderatör
7 Tem 2013
8,128
619
Merhaba, 0'dan İleri seviyeye mobil uygulama geliştirme serisi 3.konumuzla devam ediyoruz. Seriden haberiniz yoksa öncelikle serinin ilk 2 konusunu gidip incelemenizi ve yorum yapmanızı tavsiye ederim. İlk konuda zaten bahsetmiştim fakat bilmeyenler için Dart programlama dili ve Flutter framework ile mobil uygulama geliştirme öğreniyoruz. İlk konuyu özellikle incelemenizi istiyorum. Devam edecek olursak 3.konumuzda Dart programlama diline devam ediyoruz. List ve Fonksiyonlardan bahsedeceğiz bu konuda. Konuda Visual Studio Code kullandığım için birkaç fotoğraf paylaşacağım Visual Studio Code kullananlar için. Dart dilinin önemini mobil uygulama geliştirmek için önceden anlatmıştım zaten. Hadi başlayalım

Serinin önceki konuları:

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

Dart dilinde Listler ve Fonksiyonlar

Biz bugüne kadar hep tek tek çalıştık dart üzerinde doğru düzgün listeleri kullanmadık ve görmedik. Şimdi listelerden bahsedelim
normalde öğrendiğimiz yere kadar değişken tanımlamalarımızı

Kod:
final int money1=100;
final int money2=110;
final int money3=120;

şeklinde tek tek tanımlama yapmamız gerekiyordu fakat bu efektif bir çözüm değil. Sürekli olarak bir kontrol yaptığımızı düşünün her bir değişken için sürekli olarak ayrı ayrı kontrol
etmek işkence olacaktır.

Kod:
List <int> moneys = [100,110,120,130,140];
  /*bir list oluşturduk int türünde değerler taşıyabilen*/

  print('müşteri 1\'in parası: ${moneys[0]}'); /*listimizin 0.indeksinde 100 yer alır. */
  /*list in farklı metodları mevcut bir sürü */

  /*listte sıralama yapmak için sort metodu kullanılır bunu daha detaylı göreceğiz sonra*/
  moneys.sort();
  moneys.add(510);
  /*list e ekleme yaptım*/

  moneys.insert(2, 300);  // indeks 2'ye 300 koyar indeks 2 dekini 3 e atıyor
  print(moneys);

  //reversed diye bir metod var Iterable dediğimiz bir kavram var list i de kapsayan listenin üstünde bir yapı gibi düşünebilirsiniz.
  moneys.reversed.toList().add(600); //toList metodu da list e çevirir yani reversed metodu bize Iterable veriyor biz onu tekrar list e çevirdik
  //sonra da add metodunu kullanarak 600 ü ekledik listemize, anlamadıysanız devam edin takılmayın

şimdi aşağıdaki kod biraz kafa karışıklığına sebebiyet verebilir basit olmasına rağmen. çünkü final olarak bir int değer tutabilen list tanımladık ve içine 3 tane eleman koymuşuz
fakat ardından final olarak tanımladığımız bu liste eleman ekleyebilmişiz ve hata almamışız ama nasıl? şöyle referans type ve value type olayı işin içine giriyor burada aslında
biz listeyi final yaptığımızda evet değiştirilemez oluyor türü yani nesne olarak değiştirilemez ama içerisindeki şeylere müdahale edebiliyoruz yani listenin içerisine eleman ekleyip silebiliriz
sonuç olarak erişilen listin adresi değişmediği için sıkıntı çıkmıyor.

Şimdi fonksiyonlardan bahsedelim çünkü aşağıdaki kodlarda fonksiyonları kullanacağız

FONKSİYON NEDİR?
1s.png


fonksiyonları matematikteki gibi kullanıyoruz programlamada da mesela biz bir for döngüsü veya bir kontrol işlemi yaptık örneğin biz bu kontrol işlemini atıyorum kodumuzun 38 yerinde yapacaksak
her seferinde yazdığımız kodu kopyala yapıştır yapmak yerine bu kontrolü bir metodun içine atıp yani bir fonksiyon oluşturup bu fonksiyonun içine atıp 38 tane kontrol kodu kullanmak yerine her seferinde bu fonksiyonu kullanacağımız yere çağırırsak sadece 1 fonksiyonu defalarca kullanmış oluruz ve daha mantıklı olur

fonksiyon oluştururken önce fonksiyonun döndüreceği değerin türünü veya döndürmezse void diyebiliriz ardından fonksiyonun adını ardından da varsa parametrelerini yazacağız dart dilinde.

Şimdi bizim asıl ilk konudan beri kodlarımızı içerisine yazdığımız void main dediğimiz şey main de bir fonksiyondur ana fonksiyon hatta onun süslü parantezlerinin dışına çıkıyoruz artık ve biz kendi fonksiyonlarımızı yazıyoruz. Şimdi konunun en alt kısmına yazdığımız fonksiyon kodlarını atacağım ve hemen aşağıdaki kodları incelerken aa burada ismini bilmediğim tanımlanmış bir şey var bu ne yahu diyeceğiniz şeyler tam da en aşağıda topluca vereceğim olan fonksiyonlarımızdır. tldenDolara, dolaraDonusturucu gibi fonksiyon isimlerimiz var bunlardan bahsediyorum :)

2s.png



Kod:
final List<int> newMoneys = [100,200,300];
  newMoneys.add(50);

  newMoneys.reversed.toList(); //listi ters çevirip iterable dönüyor ve toList diyerek yeni bir liste oluşturuyor toList bize. yeni bir referans atayıp yeni bir liste oluşturuyor o yüzden hata vermiyor gibi düşünebiliriz

  /*
  mesela mağaza bize  100 tane müşteri yap bunların hepsine sırayla numarasına göre 5 tl ekle diye bir senaryo oluşturalım ve inceleyelim
   */

  List<double> customerMoney = List.generate(4, (index) {
    return index + 5.0;
  });

Listlerin generate metodu vardır bu metod ile list oluşturabiliyoruz
100 elemanli bir list düşün ve her indeksi için tek tek şu işlem yapılıyor
0.index için index + 5 yani 0+5 ten 5 atanacak ilk elemana.
ikinci eleman yani 1.index için 1+5 ten 6 atanacak böyle böyle 100 elemanlı
bir list oluşturmamıza yarıyor generate metodu burada.

Customers 100 30 40 60 olsun
35 tl den büyük olanlara kredi verebiliriz yazalım
küçük olanlara veremeyiz yazalım

Kod:
List<int> moneyCustomerNews = [100,30,40,60];

  for(int i = 0; i<moneyCustomerNews.length; i++){
    //bir for döngüsü oluşturduk döngüler basit
    //i 0 dan başlar moneyCustomerNews listimizin uzunluğundan küçük olana kadar
    //birer birer artarak her seferinde burada yazdığımız işlemleri yapmamıza yarar for döngüsü
    print("müşteri parası: ${moneyCustomerNews[i]}");
    //her seferinde 0,1,2,3... indeksteki elemanlarını gösterecek listemizin
    if(moneyCustomerNews[i]>35){
      print("kredi hazır verebiliriz");
    }else{
      print("kredi veremeyiz");
    }
    //basit bir kontrol işlemi yaptık 35 ten büyükse o eleman ona göre şeyler söylüyoruz
  }

  //diyelim bu listemizin tersten çalışmasını istiyoruz
  //o zaman ne yapardık reversed metodunu kullanırdık

  final int userMoney = 0;
  final int userMoney2 = 50;

  controlUserMoney(userMoney2); //fonksiyonumuzu kullandık
  //fonksiyonumuza parametre olarak userMoney2 yi gönderdik

yeni müşteri gelsin parası 50 tl olsun
parasını dolar yapmak istiyor ve kaç dolar olduğunu merak ediyor

Kod:
final yeniKullaniciParasi = 50;
  print(yeniKullaniciParasi/19); //doları 19 baz alarak yaptığımız bir işlem ama her seferinde böyle hesaplama yaptırmak yerine fonksiyon kullanalım
//ama yapacağımız fonksiyon sadece hesaplasın yani print etmesin diyelim

  double result = tldenDolara(yeniKullaniciParasi);
  print(result);

3s.png


şimdi farklı bir senaryo olsun
yeni bir fonksiyon oluşturup kullanalım bizim istediğimiz şey şu
doların kaç olduğunu da fonksiyona biz söyleyelim ona göre hesaplama yapsın bunu nasıl yapabiliriz?


Kod:
double kullanici2 = 158; //kullanici2 nin 158 tl parası varmış
  //şimdi gidip fonksiyonumuzu oluşturalım
  double dolarKurumuz= 2; //keşke 2 olsa :')

  //şimdi fonksiyonumuzu kullanalım
  dolaraDonusturucuKurlu(kullanici2, dolarKurumuz);
  //dolar 2 bazindan 158 tl nin kaç dolar ettiğini hesaplayacaktir fonksiyonumuz

şimdi daha farklı bir şey yapmayı deneyelim
bu sefer opsiyonel parametre kullanan bir fonksiyon yazalım
yine aynı işlemi yapsın ama dolar parametresini vermesek de çalışsın

Kod:
double kullanici3 = 160;
  double dolarKuru2 = 18;

  //şimdi gidip fonksiyonumuzu oluşturalım
  //oluşturduk şimdi kullanalım

  dolaraDonusturelim(kullanici3, dolar: dolarKuru2);
  //opsiyonel parametreyi verirken bu şekilde ismini yazıyoruz hoş oldu

  //fonksiyonlardan biraz bahsettik şimdi listelerle ilgili birkaç metoda bakalım

  List<dynamic> user1 = [1,'a', true];
  //dyanmic yani farklı farklı biri in tbiri string biri bool list farklı farklı şeyler taşıyabiliyor
  //dynamic listler önerilmez sektörde pek :)

  //listenin içerisinde gezmek
  for(var item in user1){
    print(user1[item]);
  }
  //tek tek listenin elemanları item e atanır ve kod parçası çalıştırılır

  List<String> userNames = ["ali", "ayşe", "mehmet"];

  //userNames. diyerek metodlarına erişebiliyoruz listlerin

  userNames.contains("veli"); //bu false veya true döndürür veli içeriyor mu liste içermiyor mu

  for(var item in userNames){
    if(item=="veli"){
      print("var"); //böyle de yapılabilirdi ama contains metodunu kullanmak çok daha mantıklı
    }
  }

YAZDIĞIMIZ FONKSİYONLAR

yazdığımız fonksiyonlar:

controlUserMoney fonksiyonumuz
Kod:
void controlUserMoney(int money){
    //geriye değer döndürmeyen bir fonksiyon oluşturduk
    //parametre olarak int türünde bir şey alıyor adı da money olsun demişiz
    //bu fonksiyon kullanıldığında parametre olarak yollanan int  türündeki şey money e atanır
    //ardından bu kod çalışır bu kodumuz da kontrol yapmaya yarıyordu
    if(money>0){
      print("para var");
    }else{
      print("para yok");
    }
  }

tldenDolara fonksiyonumuz
geriye double deger döndüren 1 parametre alan bir fonksiyon
oluşturduk. bu fonksiyonun içerisinde kesinlikle return diyerek geriye
double bir değer döndürmemiz gerekli. onu da yaptık sıkıntı yok


Kod:
double tldenDolara(int money){
    double hesaplananDeger = money/19;
    return hesaplananDeger;
  }
  /*

   */
dolaraDonusturucuKurlu adlı fonksiyonumuz

Kod:
double dolaraDonusturucuKurlu(double money, double dolar){
    double hesaplamaSonucu = money/dolar;
    return hesaplamaSonucu;
  }

dolaraDonusturelim adlı fonksiyonumuz
Kod:
double dolaraDonusturelim(double money, {double dolar=14}){
    //opsiyonel parametre oluşturduk yani kullanılırken ister verir ister vermez kullanıcı bunu
    //vermezse 14 olarak default verdiğimiz değeri alacak
    double hesaplamaSonucu = money/dolar;
    return hesaplamaSonucu;
  }

sayHello adlı String değer döndüren fonksiyonumuz bu da son olarak
Kod:
String sayHello(){
    return 'hello';
  } //Hello döndüren bir fonksiyon oluşturduk
  //string döndürüyor yani

Serimizin 4.konusunda Maplerden ve Class yani sınıflardan bahsedeceğiz. Dart dilinde güzel bir ilerleme kaydettik 3 konumuzla özellikle de fonksiyonları temel olarak anlamamız muazzam önem taşıyordu. Şu anda mobil uygulama geliştirmek için hala yeterli Dart dili bilgisine sahip değiliz önümüzdeki derslerde ileri seviye class yapıları soyut sınıflar vs. try catch referans yapıları polimorfizm gibi kavramları da ele alacağız. Dart dilinde hatrı sayılır bir temelimiz olacak ve ardından Flutter framework'e geçiş yapacağız ve gerçek manada mobil uygulama geliştirmeyi öğrenmeye başladığımızı hissedeceğiz. Yorumlarınızı eksik etmeyin serinin bir sonraki konusunda görüşmek üzere!
 
Son düzenleme:
Ü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.