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
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();
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);
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);
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);
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
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);
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
Son düzenleme: