Mobil Programcılık ✓DART

TebriZz

Üye
7 Nis 2020
152
1
İskenderun


qvNWlk.png



Merhaba arkadaşlar

Öncelikle hepimizin 23 Nisan Ulusal Egemenlik ve Çocuk Bayramı kutlu olsun.

Bu gün hep beraber bilgisayarı olmadığı için yazılıma başlayamayan arkadaşlarımızın çaresi olacağız.
Bu konumda güncel yazılım geliştirme teknolojisini; yani Google'ın her platformda yüksek performansla çalışan uygulamalar yapmak için tasarladığı Flutter'ı ve Flutter'ın geliştirildiği Dart dilininin mobilden temellerini atacağız.Hiç beklemeden konuya geçelim.


DART/FLUTTER NEDİR
nno2Ep.gif


Flutter, Google tarafından oluşturulan açık kaynaklı bir yazılım geliştirme kitidir. Tek kod tabanında Android, iOS, Windows, Mac, Linux, Google Fuchsia ve web için yüksek performansla çalışan, güzel görünümlü uygulamalar geliştirmeyi sağlar. Aklınıza gelebilecek tüm uygulamalar Flutter ile en iyi şekilde yapılabilir. Dart dili ile yazdığımız kodlar uygulamanın derlenme aşamasında işletim sisteminin native dillerinden birine çevrilir. Örneğin Android için Kotlin'e veya Java'ya, iOS için Swift'e ya da Objective-C'ye derlenebilir.

Dart, Flutter'ın yazıldığı programlama dilidir. On yıl kadar önce JavaScript'e rakip olarak çıkmıştı ancak daha sonra bu hedeften vazgeçildi. Google mühendisleri Flutter'ı geliştirirken birçok özel sebepten dolayı Dart'ı kullandılar.


DART için GEREKLİ ADIMLAR
nno2Ep.gif


İlk olarak bir editör'e ihtiyacımız var.Bunun için
Kod:
dartpad.dev
adresine gidiyoruz.


xwDOWn.jpg



Kodlarımızı bu adres üzerinden yazabiliriz.



PAKET/KÜTÜPHANE
nno2Ep.gif


Dart'ta ve diğer tüm modern programlama dillerinde önceden yazılmış paketler bulunur. İhtiyaç duyduğumuz paketi projemize dâhil ederiz ve böylece yaptırmak istediğimiz standart işler için uzun uzadıya kodlar yazmamız gerekmez. Sadece anahtar kelimeleri kullanarak ihtiyaç duyduğumuz fonksiyonları ve diğer yapıları çağırıp kullanırız.Şimdi bir kütüphane import edelim.


MzZlHf.jpg



Bu kütüphaneyi şimdilik kullanamayacağız.Örnek olması için gösteriyorum.Daha sonra Dart kodlarını yazdığımız ana blok. Kodlarımız bu blok içerisinde çalışayacağı kodu yazıyoruz.Aşağıda gösterilen resimde ki kullanımı ile tanımlanır. v o i d e main ifadesinden sonra parantez açıp kapatılır. Daha sonra süslü parantez açıp kapatılır. Kodlar süslü parantezlerin arasına yazılırlar. oluşturuyoruz.


zn3JmH.jpg



Şimdi sıra fat arrow da...

Şişman ok da denir. Bir eşittir ve bir büyüktür işareti ile oluşturulur:*=>

Fonksiyonları kısaltmak ve tek satırda yazmak için kullanılır. Fonksiyonlardaki süslü parantezler ve varsa return ifadesi, şişman ok kullandığımızda kalkar.

Sadece, kodumuz tek satırdan oluşacaksa kullanılabilir. Tek satırı aşan kodlar için yine uzun gösterim gerekir.

Örneğin aynı zamanda bir fonksiyon olan ana bloğumuzun (v o i d main) uzun gösterimi ile bir ifade yazdıralım:


Msfk9W.jpg



DqGe53.jpg



Şimdi ana bloğu değiştirip kısa gösterimle yazdıralım:

Kod:
v o i d main() => print(' ');


mNPC54.jpg



Gördüğünüz gibi süslü parantezler kalktı ve tek satırda yazıldı.



Değişkenler
nno2Ep.gif


Programımızın hafızaya almasını istediğimiz değerleri tutan yapılardır. Örneğin, isim diye bir değişkenimiz olsun. Aşağıdaki şekilde = operatörü ile isim değişkenimize Tebriz değerini veriyoruz.

Kod:
String isim = 'Tebriz';

Şimdi bu yapıyı inceleyelim. Değişkenimizin başına değişken türünü yazıyoruz. 'Tebriz' metinsel bir ifade olduğu için değişkenin türü metinsel yani (String) bir ifadedir ve String'in ilk harfi Dart dilinde bu şekilde büyük yazılır. Dart dili birçok programlama dili gibi büyük/küçük harfe duyarlıdır. String ifadesini farklı şekilde yazarsak hata alırız.

String değişken haricinde birkaç değişken tipi daha vardır. (Sayısal, yani tam sayı ve ondalıklı sayıları tutan integer ve double değişkenler gibi ya da doğru/yanlış türünden değişkenler tutan boolean gibi.) Şu an yapacağımız Flutter uygulamasında sadece String değişkene ihtiyacımız olduğu için diğer değişken türlerini daha sonra işleyeceğiz.

İsim ifadesi değişken adımızdır. Değişken adları küçük harfle yazılır. Bu bir zorunluluk değildir. Büyük harfle yazılsa da programımız değişken isimlerini algılar. Ancak programlama dillerinin daha okunaklı olması için artık genel kabul görmüş kuralları bulunur ve buna uymanız beklenir. Değişken adlarının küçük harflerle yazılması da bu kurallardan biridir. Böylece kodları okuduğumuz zaman isim ifadesinin ne olduğunu çok daha çabuk kavrayabiliriz. Eğer değişken adımız birden fazla kelimeden oluşuyorsa örneğin; tamIsim ya da onunTamIsmi gibi; bu durumda da ilk kelimeden sonra gelen kelimelerin ilk harfi büyük yazılır. Bu yazım şekline deve hörgüçlerinden esinlenerek lowerCamelCase denilmiştir. İfadelerimizi bu şekilde yazarak kodlarımızın daha okunaklı olmasını amaçlıyoruz. Ayrıca değişken isimlerinde büyük İ gibi Türkçe harfler bulunmaz.

Dikkat etmeniz gereken bir diğer kısım da; birden fazla kelimeden oluşan değişkenlerin kelimeleri bitişik yazılır. Boşluk bırakırsanız hata alırsınız: tam isim olmaz, tamIsim olmalı.

'Tebriz' değerini ise bu şekilde tırnak işaretleri arasına yazıyoruz. Sebebi de Tebriz'in metinsel bir değer olmasıdır. Daha önceden de bildiğimiz gibi String değerleri tek veya çift tırnak işaretleri arasına yazıyoruz.

Daha sonra da satırımızı noktalı virgül ile kapatıyoruz.

Artık isim ifadesini kullandığımızda programımız bunun 'Tebriz' olduğunu bilecek ve ona göre davranacak. Örneğin Tebriz ifadesini yazdırmak istediğimde, onun yerine isim ifadesini yazdırmam yeterli olacak.

Kod:
print(isim);

Bu satır, konsolda Tebriz yazmasını sağlayacak.

İsim değişkenini yazdırırken tırnak işareti kullanmıyor oluşumuz belki dikkatinizi çekmiştir. Değişkenler string bile olsa kullanılırken tırnaksız yazılırlar. Eğer tırnak işareti içine alırsak, programımız bu değişkeni değişken olarak değil, metinsel bir değer olarak algılar ve olduğu gibi yazar. Aşağıdaki şekilde yazarsak konsolda aldığımız çıktı Ali değil isim kelimesi olacaktır.

Kod:
print('isim');

Çıktı: isim

'Tebriz' kısa bir değer olduğu için değişken kullanmak size işlevsel gelmemiş olabilir. Ancak aşağıdaki gibi uzun bir metni değişkenimize atadığımızda işlerimizi hayli kolaylaştırmış oluyoruz. Dünyanın en uzun soyadını uzunSoyad isimli bir değişkene atayalım.

Kod:
String uzunSoyad = 'Wolfeschlegelsteinhausenberger dorffvoralternwareng ewissenhaftschaferswesenchafew arenwholgepflegeunds orgfaltigkeitbeschutzenvonange reifenduchihrraubgir iigfeindewelchevorralternzwolf tausendjahresvorandi eerscheinenbanderersteerdeemme shedrraumschiffgebra uchlichtalsseinursprungvonkraf tgestartseinlangefah rthinzwischensternartigraumauf dersuchenachdiestern welshegehabtbewohnbarplanetenk reisedrehensichundwo hinderneurassevanverstandigmen shlichkeittkonntevor tpflanzenundsicherfreunanleben slamdlichfreudeundru hemitnichteinfurchtvorangreife nvonandererintlligen tgeschopfsvonhinzwischensterna rtigraum';

Artık bu soyadını bir kez bu şekilde bir değişkene atadıktan sonra sadece değişken adını kullanarak programımızın başka bir yerinde kullanabiliriz. Yazdırmak istediğimizde:

Kod:
print(uzunSoyad)
;

şeklinde yazmamız yeterli olacaktır.

Değer Atama
nno2Ep.gif


Değişken adını tanımladığımız anda değer atamamız gerekmez. Önce tanımlayıp daha sonra da değer atayabiliriz:

Kod:
String renkAdi;

Burada renkAdi isminde metinsel bir değişken tanımladım ama bir değer atamadan noktalı virgülle satırı kapattım.

Şimdi bu değişkene bir değer atayalım.

Kod:
renkAdi = 'Kırmızı';

Artık renkAdi adlı değişkenimizin değeri 'Kırmızı' oldu. Başına değişken türü olan String'i yazmadığımıza dikkat edin. Bir kez tanımlandıktan sonra değer ataması yaparken ya da yeni bir değer verirken değişken türünü yazmayız. Eğer yazarsak aynı değişkeni iki defa tanımladığımız için hata alırız.

Şimdi 'Kırmızı' değerini atadığımız değişkenimizin değerini değiştirelim.

Kod:
renkAdi = 'Mavi';

Bu şekilde verdiğimiz değeri değiştirebiliyoruz. Tek yapmamız gereken değişken adını yazıp eşittir operatörü ile yeni bir değer yazmak.Bunun yanında...

Değişkenler başka bir değişkene değer olarak atanabilir.

Kod:
String degisken1 = 'Merhaba';
String degisken2 = degisken1;
print(degisken2);

degisken2'yi yazdırdığımızda print bize çıktı olarak aşağıdaki ifadeyi verecektir:

Kod:
Merhaba

Metinsel değerleri birleştirmek için " + " operatörünü kullanıyoruz.

+ operatörü metinsel değişkenleri birleştirir.Söyle bir örnek vereyim

Kod:
String degisken1 = 'Selam';
String degisken2 = 'Merhaba';
String degisken3 = degisken1 + degisken2;
print(degisken3);

Konsol Çıktısı Aşağıdaki gibi olacaktır.

Kod:
SelamMerhaba

Kelimeler arasında boşluk koymak istersek boşluk karakteri içeren bir string değer daha koymamız ve + operatörü ile birleştirmemiz gerekir.

Kod:
String degisken1 = 'Selam';
String degisken2 = 'Merhaba';
String degisken3 = degisken1 + ' ' + degisken2;
print(degisken3);

Tırnak işaretleri arasına boşluk karakteri koyduk. Konsol çıktısı:

Kod:
Selam Merhaba

+ operatörü değişkenlerimizi sadece tanımlarken değil, kullanırken de birleştirebilir. Örneğin print fonksiyonu içinde birleştirelim.

Kod:
String degisken1 = 'Selam';
String degisken2 = 'Merhaba';
print(degisken1 + degisken);

Konsol çıktısı:

Kod:
SelamMerhaba

Yine araya boşluk koymak istersek boşluk karakteri içeren bir string ifade eklememiz gerekir.

Kod:
print(degisken1 + ' ' + degisken);

Çıktı:

Kod:
Selam Merhaba

String değişkenler ile değişkene atanmamış diğer string ifadelerin birlikte yazdırılması şu şekilde olur:

Kod:
String degisken1 = 'Selam';
print(degisken1 + 'Merhaba');

Çıktı:

Kod:
SelamMerhaba

Araya boşluk koymak istersek daha önce yaptığımız gibi tırnak işaretleri arasına boşluk karakter içeren bir string ifade koyabiliriz ya da merhaba'dan önce bir karakter boşluk bırakabiliriz. Aşağıdaki iki print satırı da aynı çıktıyı verir.

Kod:
String degisken1 = 'Selam';
print(degisken1 + ' Merhaba');
print(degisken1 + ' ' + 'Merhaba');

Çıktı:

Kod:
Selam Merhaba

Selam Merhaba

Hangisini tercih ediyorsanız onu kullanabilirsiniz. Eğer programınızda farklı bir durum söz konusu değilse genelde kısa olan ilki tercih edilir.


Değişkenleri String ifade içinde de kullanabiliriz. Bunun için $ işaretinden faydalanıyoruz. Tırnak işaretleri arasına, diğer ifade ile birlikte yazdırıyoruz.

Kod:
String degisken1 = 'Selam';
print('Merhaba $degisken1');

Çıktı:

Kod:
Merhaba Selam

Değişken Tanımlama Kuralları
nno2Ep.gif


1|Değişken isimleri bir harfle başlamalıdır. Sayı ya da özel bir karakter ile başlayamaz. isim1 diye bir değişken olur. Ancak 1isim diye bir değişken tanımlanamaz.

2|Önceden tanımlı Dart/Flutter ifadeleri değişken adı olarak atanamaz. Atanırsa programda hatalara sebep olabilir. Örneğin print ifadesi önceden tanımlı bir fonksiyona verildiği için değişken ismi olarak belirlenemez.

3|Alt çizgi(_) ve dolar işareti ($) dışında özel karakter içeremez.

4|Değişken isimlerinde Türkçe karakter kullanılamaz.

5|Değişken ismi içinde boşluk karakteri olamaz. Birden fazla kelimeden oluşuyorsa kelimeler bitişik yazılabilir.


"VAR" Eki
nno2Ep.gif


Var bildirimi değişken tipini algılamayı programa bırakır ve programımızın değişken tipini otomatik algılayıp ona göre işlem yapmasını sağlar.

Kod:
var isim = 'Tebriz Tht';

Bu örnekte String yerine var yazdık. Artık programımız isim değişkeninin aldığı değerin bir metin olduğunu görüp onu String olarak algılayacaktır.

var bildirimini kullanmak ya da değişken tipini yazmak özel durumlar haricinde sizin tercihinizdir. Ancak Dart kaynakları bir değişkenin tipini kesin olarak biliyorsanız, var bildirimi yerine değişken tipini yazmamızın daha iyi olacağını söylemektedir.

Fonksiyonlar
nno2Ep.gif


Programlama dillerinde yapmak istediğimiz işleri otomatikleştirdiğimiz yapılara fonksiyon diyoruz.Şimdiye kadar 3 fonksiyon öğrendik:

v o i d main(){} ana bloğumuz çalışma mantığı biraz farklı olsa da yapı olarak bir fonksiyondur.

print() fonksiyonu ekrana yazı yazdırır.

runApp() İçine konulan Flutter app'ini çalıştırır.

Bunlar önceden tanmlı fonksiyonların. Nasıl fonksiyon oluşturduğumuzu, bu fonksiyonların nasıl çalıştığını öğrenmedik.Şimdi hep beraber bunu öğrenelim.


Önce lowerCamelCase tarzıyla fonksiyon adını yazıyoruz. Fonksiyonumuzun adı ekranaYazdir olsun. Fonksiyonların hepsi en az bir iş yaptıkları için fonksiyon isimlerini bu şekilde yaptığı işi çağrıştıran kelimelerle tanımlamanız daha sonra kodları okumanızı kolaylaştırır. Böylece bir bakışta bunun bir fonksiyon olduğunu ve ne iş yaptığını kavrayabilirsiniz. Tabii istediğimiz adı verebiliriz. Fonksiyonun adı fonksiyon1'de olabilir. Biz şimdi ekrana yazı yazdırma işini otomatikleştiren bir fonksiyon yazacağımız için adını ekranaYazdir koyuyorum.

Kod:
ekranaYazdir(){}

Daha sonra parantez açıp kapattım ve ardından süslü parantez açıp kapattım. Tıpkı v o i d main bloğunu tanımlarken yaptığım işleri yaptım aslında ve kodlarımı süslü parantezler arasına yazacağım. Şimdi print fonksiyonumuzu yeni fonksiyonumuzun içine koyalım. Bu şekilde kendi oluşturduğumuz fonksiyonların içinde başka fonksiyonlar kullanabiliyoruz.

Kod:
ekranaYazdir(){
    print("merhaba"); 
}

Bu fonksiyonu çağırdığımız zaman içindeki print() fonksiyonu otomatik çalışacak.

Şimdi çağırmayı görelim.

Kod:
ekranaYazdir();

Bu şekilde fonksiyonun adını yazıp parantez açıp kapatarak fonksiyonu çağırmış ve çalıştırmış oluyoruz.

Konsol Çıktısı:

Kod:
merhaba

Peki, neden direkt print fonksiyonunu kullanmak varken bu işi yeni bir fonksiyon tanımlayarak yaptırdık? Eğer sadece bu işi yaptırmak istiyorsak gereksiz ancak daha farklı veya daha uzun bir iş yaptırmak istediğimizde önemi ortaya çıkıyor.

Kod:
ekranaYazdir(){
    print("merhaba"); 
    print("tebriz"); 
    print("nasılsın");
    print("bı dal sigara versene");
    print("hadi be");
}

Burada ekrana beş farklı ifade yazdırmak istiyoruz. Yani beş farklı iş. Bunu tek seferde bu şekilde bir fonksiyonun içine koyarak yapabiliyoruz. Şimdi fonksiyonu çalıştırdığımızda:

Kod:
ekranaYazdir();

Konsol çıktısı:

Kod:
merhaba

tebriz

nasılsın

bı dal sigara versene

hadi be


Gördüğümüz gibi artık işimiz kolaylaşmış oldu. Konsol ortamında aklınıza gelebilecek bütün işlemler fonksiyonlara aktarılarak çok daha işlevsel bir program ortaya çıkartabiliyoruz.


Şimdi yeni fonksiyonlar tanımlayalım ve onlara farklı işler yaptıralım.

Önce bir değişken tanımlıyorum.

Kod:
String boyaRengi = "Mavi";

Şimdi bir fonksiyon yazalım.

Kod:
rengiSoyle(){
    print(boyaRengi);
}

Artık bize boyaRengi'nin değerini veren bir fonksiyonumuz oldu. Çalıştıralım.

Kod:
rengiSoyle();

Konsol Çıktısı:

Kod:
Mavi

Aynı dosyaya üsttekileri silmeden yeni bir fonksiyon daha tanımlıyoruz:

Kod:
rengiDegistir(){
    boyaRengi = "Kırmızı";
}

Bu fonksiyonu çalıştırdığımızda boyaRengi'mizin değeri mavi iken kırmızı olarak değiştirilecek. Çağıralım:

Kod:
rengiDegistir();

Artık rengimiz değişti ama programı çalıştırdığımızda ekranda hâlâ mavi yazıyor. Çünkü DartPad konsolunda programlar her çalıştığında işlemler sıfırlanır ve hafızada bir bilgi tutmazlar. Bu durumda önce ilk fonksiyonumuz çalıştı ve kendi işini yaparak değişken değeri olan mavi'yi konsola yazdırdı. Sonra ikinci fonksiyonumuz kendi işini yaptı ve değişkenin değerini kırmızı yaptı. Ancak ekrana yazı yazdıran bir print fonksiyonu içermediği için değişkenin yeni değerini konsolda göremedik. Bunun için ekstra bir print fonksiyonu daha yazabilir ya da en güzeli print fonksiyonunu yeni fonksiyonumuza dâhil edebiliriz.

Kod:
rengiDegistir(){
    boyaRengi = "Kırmızı";
    print(boyaRengi),
}

Çağıralım:

Kod:
rengiDegistir();

Konsol Çıktısı:

Kod:
Mavi

Kırmızı

Tüm adımları daha iyi görebilmek için tüm kodu tek parça yazalım ve değişkenler konusunda öğrendiğimiz print fonksiyonuyla string değişkenlerin birlikte yazdırılması ile ilgili bilgilerimizi kullanarak konsola açıklama yazdıralım:

Kod:
String boyaRengi = "Mavi";

rengiSoyle(){
    print("Boya rengi: $boyaRengi);
}
rengiSoyle();

rengiDegistir(){
    boyaRengi = "Kırmızı";
    print("Yeni renk: $boyaRengi);
}
rengiDegistir();

Konsol Çıktısı:

Kod:
Boya rengi: Mavi

Yeni renk: Kırmızı

Fonksiyonlar vo id main bloğu dışında tanımlanabilirler. Ancak v o i d main bloğu içinde çağrılmaları gerekir. v o i d main içinde tanımlanan fonksiyonların kullanılmadan önce tanımlanması gerekir.

Bir konumuzun daha sonuna geldik arkadaşlar esen kalın




 
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.