Mobil Programcılık ✓DART |4|

TebriZz

Üye
7 Nis 2020
152
1
İskenderun


5ewq9z.png


Merhaba arkadaşlar bu konumda sizlerle birlikte Dart Programlama dilinde parametreli fonksiyonlar ve sınıf nesne oluşumu lanse edeceğiz.Hemen konuya geçelim.


Parametreli Fonksiyonlar
57NMTa.png


Fonksiyonları aşağıdaki şekilde oluşturup çağırıyorduk. Burada değişkenleri fonksiyonun süslü parantezleri içerisinde tanımlayıp değer verebiliyorduk.

Kod:
sayiTopla(){
    int sayi1 = 2;
    int sayi2 = 4;
    print(sayi1+sayi2);
  }
  
sayiTopla();
Konsol Çıktısı:
Kod:
6


Parametreli fonksiyonlarda ise fonksiyonu oluştururken değer atamak zorunda olmayıp fonksiyonu çağırıp kullandığımız anda değer atayabiliyoruz. Bunun için, fonksiyonu tanımlarken şu ana kadar hep boş geçtiğimiz normal parantezlerin arasına değişkenler tanımlayabiliriz.

Kod:
sayiTopla(int sayi1, int sayi2) {
    print(sayi1 + sayi2);
}

Fonksiyon çağrılıp kullanıldığı anda verilmesi gereken zorunlu değerler olduğunu belirtmiş olduk. Birden fazla değişken varsa bu şekilde virgülle ayırıyoruz.

Çağırırken de yine fonksiyonun parantezleri arasında bu değerleri tanımlandıkları sırayla, virgülle ayırarak veriyorum.

Kod:
sayiTopla(4, 8);

Böylece 4 sayısı sayi1 değişkenine, 8 sayısı ise sayi2 değişkenine değer olarak atanıyor, sonrasında da fonksiyonun süslü parantezleri arasındaki işlemler bu değerleri kullanarak yapılabiliyor.

Kod:
sayiTopla(int sayi1, int sayi2) {
    print(sayi1 + sayi2);
}

sayiTopla(4, 8);
Konsol Çıktısı:
Kod:
12

Yukarıdaki tanımlamada fonksiyonlar çağrıldıklarında, söz konusu parametrelere bir değer vermek zorunluydu. Vermeyince hata alıyorduk. Eğer bu parametrelerin bazılarının veya hepsinin isteğe bağlı verilebileceğini söylemek istersek aşağıdaki gibi köşeli parantezler [ ] içine alarak bunu yapabiliriz.

Kod:
sayiTopla([int sayi1, int sayi2]) {
    print("Sayı 1: $sayi1 sayı2: $sayi2");
}

sayiTopla(4);
Konsol Çıktısı:

Kod:
Sayı 1: 4 sayı2: null

Fonksiyonu çağırdığımızda sadece 4 değerini verdik. Böylece bu değer sayi1'e atandı. sayi2 değer almadığı için null olarak kaldı.

Değişkenlerimize varsayılan değer de atayabiliriz. sayi2'ye varsayılan olarak 5 değerini verelim mesela.

Kod:
sayiTopla([int sayi1, int sayi2 = 5]) {
    print("Sayı 1: $sayi1 Sayı 2: $sayi2");
}

sayiTopla(4);

Konsol Çıktısı:

Kod:
Sayı 1: 4 Sayı 2: 5

Aşağıdaki gibi daha karışık bir örnekle zorunlu parametrelerle, zorunlu olmayanları bir arada da kullanabiliriz.

Kod:
sayiTopla(String renk, [int sayi1, int sayi2 = 5]) {
print("Renk: $renk'dir. Sayı 1 ve Sayı 2'nin toplamı: ${sayi1 + sayi2}'dur.");
}

sayiTopla("Yeşil", 4);
Konsol Çıktısı:

Kod:
Renk: Yeşil'dir. Sayı 1 ve Sayı 2'nin toplamı: 9'dur.

Bu örneklerde parametrelere tanımlandıkları sırayla değer atıyorduk. Eğer hangi parametreye değer atamak istediğimizi belirtmek istersek tanımlarken süslü parantezler içine almalıyız. Artık süslü parantezler içinde olduğu için parametrelere değerlerini verirken isimlerini de belirtmeliyiz.

Kod:
sayiTopla({String renk, int sayi1, int sayi2}) {
    print("Renk: $renk Sayı 1: $sayi1 sayı2: $sayi2");
}

sayiTopla();
sayiTopla(sayi2: 8, sayi1: 4, renk: "Mavi");

Konsol Çıktısı:

Kod:
Renk: null Sayı 1: null sayı2: null

Renk: Mavi Sayı 1: 4 sayı2: 8

Fonksiyonu iki kere çağırdık. İlk çağırdığımızda değerleri boş geçtik. Çıktı olarak parametrelerin null değerler aldığını gördük.

Sonra ikinci çağırışımızda, parametrelerin isimlerini yazıp iki nokta koyarak değer ataması yaptık. Değer atamalarını sırayla yapmamız gerekmedi. İsimlerini yazabildiğimiz için karışık verebildik.

Değişkenler de parametrelere değer olarak atanabilir.

Kod:
sayiTopla([int sayi1, int sayi2]) {
  print("Sayı 1: $sayi1 \nSayı 2: $sayi2");
}

int degisken3 = 45;
sayiTopla(12, degisken3);

Çıktı:

Kod:
Sayı 1: 12

Sayı 2: 45

Burada ilk kez gördüğünüz \n kodu (ters slash n) kendinden sonra gelen ifadelerin bir alttaki satırdan devam ederek yazdırılmasını sağlar. Yani enter tuşuna basılmış gibi satır başı yapar.

Aşağıda vereceğim kodlar temel bir mesajlaşma uygulamasının arayüzüne aittir.Kodları inceleyerek Parametreli fonksiyonları daha iyi anlayacağınızı umuyorum :)

Kod:
import'package:flutter/material.dart';

v o i d main() => runApp(MyApp());

class MyApp extends StatelessWidget {
   [USER=277185]over[/USER]ride
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "Temel mesajlaşma arayüzü",
      home: Cati(),
    );
  }
}

class Cati extends StatelessWidget {
   [USER=277185]over[/USER]ride
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Mesaj Uygulaması"),
      ),
      body: AnaEkran(),
    );
  }
}

class AnaEkran extends StatefulWidget {
   [USER=277185]over[/USER]ride
  _AnaEkranState createState() => _AnaEkranState();
}

class _AnaEkranState extends State<AnaEkran> {
  TextEditingController t1 = TextEditingController();

  List mesajListesi = [];

  listeyeMesajEkle(String metin) {
    setState(() {
      mesajListesi.insert(0, metin);
      t1.clear();
    });
  }

   [USER=277185]over[/USER]ride
  Widget build(BuildContext context) {
    return Container(
      margin: EdgeInsets.all(40),
      child: Column(
        children: <Widget>[
          Flexible(
            child: ListView.builder(
              reverse: true,
              itemCount: mesajListesi.length,
              itemBuilder: (context, int indeksNumarasi) =>
                  Text(mesajListesi[indeksNumarasi]),
            ),
          ),
          Row(
            children: <Widget>[
              Flexible(
                child: TextField(
                  onSubmitted: listeyeMesajEkle,
                  controller: t1,
                ),
              ),
              RaisedButton(
                  onPressed: listeyeMesajEkle(t1.text), child: Text("Gönder")),
            ],
          ),
        ],
      ),
    );
  }
}

Sınıf ve Nesne Oluşturma
57NMTa.png


Nesne yönelimli programlama dillerinde nesneler oluşturabiliyoruz. Bu nesneler bilgisayar, buzdolabı, kitap, defter gibi gerçek hayattan uyarlanmış olabileceği gibi; metin giriş alanı ile butonlardan oluşan bir widget kümesi de olabilir. Biz öncelikle gerçek hayattan bir nesne seçip onu programımızda nasıl kullanabileceğimizi öğrenelim.

Bunun için önce class ifadesi ile bir sınıf tanımlamamız ve bu sınıfa bir isim vermemiz gerekiyor. Sınıf adlarının ilk harfini büyük harfle yazıyoruz. Ardından süslü parantezler açıp kapatıyoruz.

Kod:
class Araba {}

Artık bir Araba sınıfımız var. Bir şirketin araba üretmeye karar verdiğini düşünelim. Bir araba tasarlamış ve seri üretime geçtiğinde tüm arabaları aynı tasarımla üretebilir. Yani artık bu sınıftan, aynı özelliklere sahip birden fazla nesne üretebiliriz.

Ancak önce Araba sınıfına birkaç özellik verelim. Süslü parantezlerin arasına özelliklerimizi değişkenler ve fonksiyonlar tanımlayarak verebiliriz.

Kod:
class Araba {
    String renk;
    int uretimYili = 1972;
    
    silecekleriCalistir(){
        print("Silecekler çalıştırılıyor.");
    }

    kapilariKilitle(){
        print("Kapılar kilitlendi.");
    }
}

İki değişken ve iki fonksiyon tanımladık. Araba sınıfımız artık bu özelliklere sahip olduğundan, bu sınıftan üreteceğimiz nesneler de aynı özelliklere sahip olacaklar. Varsayılan olarak uretimYili 1972 ancak bu varsayılanlar da istenirse değiştirilebilir.

Şimdi nesnemizi üretelim.

Önce tip yazıyoruz. Üreteceğimiz nesne Araba tipinde olacak. Sonra bir isim veriyoruz. Ben kırmızıAraba ismini verdim. Sonra = operatörünün sağ tarafına, hangi sınıftan üreteceğimizi yazıyoruz ve bir parantez açıp kapatıyoruz.

Araba sınıfından Araba tipinde bir nesne oluşturduk.

Kod:
Araba kirmiziAraba = Araba();

Eğer tip belirtmek istemezsek var bildirimini de kullanabiliriz. Her ikisi de aynı işi görür.

Kod:
Araba kirmiziAraba = Araba();

Bunu yazdırdığımızda konsolda aşağıdaki çıktıyı alıyoruz.

Kod:
print(kirmiziAraba);

Konsol Çıktısı:

Kod:
Instance of 'Araba'

Yani kirmiziAraba araba sınıfından türetilmiş bir örnektir diyor bize. Eğer ürettiğimiz nesnenin özelliklerini yazdırmak istersek şöyle yapıyoruz.

Kod:
print(kirmiziAraba.uretimYili);

Konsol Çıktısı:

Kod:
1972

Nesne adını yazıp nokta koyarak sınıfın içinde tanımladığımız değişkenin adını yazdık ve böylece kirmiziAraba'nın üretim yılına ulaştık. kirmiziAraba'mız, türedildiği sınıf olan Araba'nın tüm özelliklerine sahip olarak geliyor.

Şimdi de diğer özelliğine, yani renk değişkeninin değerine ulaşalım. Bakalım arabamız ne renkmiş!

Kod:
print(kirmiziAraba.renk);

Konsol Çıktısı:

Kod:
null

Bu bize null değerini verdi. Çünkü Araba sınıfını oluştururken içine tanımladığımız renk değişkenine bir değer atamamıştık.

Bu değeri şimdi de atayabiliriz.

Kod:
kirmiziAraba.renk = "Kırmızı";

print(kirmiziAraba.renk);

Konsol Çıktısı:

Kod:
Kırmızı

Artık arabamızın rengi kırmızı oldu. Yani arabayı ürettik, üretim aşamasında renksizdi ve ürettikten sonra boyadık gibi düşünebilirsiniz.

Varsayılan değere sahip olan uretimYili değişkenine yeni değer de atayabiliriz.

Şirketimiz bir sonraki yıl aynı modeli üretmeye devam ediyor diyelim ve biz de yeni bir nesne ürettiğimizde uretimYili değişkeninin varsayılan değerini bir arttırabiliriz.

Kod:
kirmiziAraba.uretimYili += 1;

print(kirmiziAraba.uretimYili);
Ekran çıktısı:

Kod:
1973

Artık ürettiğimiz yeni aracın modeli yükselmiş oldu.

Mobil Programcılık serimizin sonuna geldik arkadaşlar esen kalın :)

qofihN.gif

 
Son düzenleme:

ivanwasilevic

Uzman üye
29 Eki 2018
1,014
11
Tahmin Et
Şöyle konularını inceledim de ... Gayet güzel yazıyorsun.Çok güzel yerlere geleceksin inan bana ben bu sözü forumda benim kulubumde olan bir arkadaşa söyledim adam şuan kmod :D
 
Ü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.