Dart Programlama - Hızlı Kılavuz

Dart, isteğe bağlı olarak JavaScript'e dönüştürülebilen C tarzı sözdizimine sahip nesne yönelimli bir dildir. Arayüzler, sınıflar, koleksiyonlar, jenerikler ve isteğe bağlı yazım gibi çeşitli programlama yardımlarını destekler.

Dart, tek sayfalık uygulamalar oluşturmak için yaygın olarak kullanılabilir. Tek sayfalı uygulamalar yalnızca web siteleri ve web uygulamaları için geçerlidir. Tek sayfalı uygulamalar, tarayıcıya farklı bir web sayfası yüklemeden web sitesinin farklı ekranları arasında gezinmeyi sağlar. Klasik bir örnekGMail ─ Gelen kutunuzdaki bir iletiye tıkladığınızda, tarayıcı aynı web sayfasında kalır, ancak JavaScript kodu gelen kutusunu gizler ve ileti gövdesini ekrana getirir.

Google, özel bir yapı yayınladı Chromium - Dart VM. Dartium kullanmak, diğer tarayıcılarda test etmeye hazır olana kadar kodunuzu JavaScript'e derlemenize gerek olmadığı anlamına gelir.

Aşağıdaki tablo, Dart ve JavaScript'in özelliklerini karşılaştırmaktadır.

Özellik Dart oyunu JavaScript
Tip sistemi İsteğe bağlı, dinamik Zayıf, dinamik
Sınıflar Evet, tek miras Prototip
Arayüzler Evet, birden çok arayüz Hayır
Eşzamanlılık Evet, izolatlarla Evet, HTML5 web çalışanları ile

Bu eğitim, Dart programlama dilinin temel düzeyde anlaşılmasını sağlar.

Bu bölümde, Windows platformunda Dart için yürütme ortamının ayarlanması anlatılmaktadır.

DartPad ile Script Çevrimiçi Yürütme

Komut dosyalarınızı çevrimiçi düzenleyiciyi kullanarak çevrimiçi olarak test edebilirsiniz. https://dartpad.dartlang.org/. Dart Düzenleyicisi komut dosyasını çalıştırır ve hem HTML hem de konsol çıktısını görüntüler. Çevrimiçi düzenleyici, önceden ayarlanmış kod örnekleriyle birlikte gönderilir.

Ekran görüntüsü Dartpad editör aşağıda verilmiştir -

Dartpad ayrıca daha kısıtlayıcı bir şekilde kodlama sağlar. Bu, editörün sağ alt tarafındaki Güçlü mod seçeneğini işaretleyerek elde edilebilir. Güçlü mod şu konularda yardımcı olur:

  • Daha güçlü statik ve dinamik kontrol
  • Daha iyi birlikte çalışabilirlik için deyimsel JavaScript kodu üretimi.

Dartpad kullanarak aşağıdaki örneği deneyebilirsiniz

void main() { 
   print('hello world'); 
}

Kod aşağıdaki çıktıyı gösterecektir

hello world

Yerel Ortamı Kurmak

Bu bölümde yerel ortamı nasıl kuracağımızı görelim.

Metin Düzenleyiciyi Kullanma

Birkaç düzenleyiciye örnek olarak Windows Notepad, Notepad ++, Emacs, vim veya vi vb. Verilebilir. Düzenleyiciler bir İşletim Sisteminden diğerine değişiklik gösterebilir. Kaynak dosyalar genellikle ".dart" uzantısıyla adlandırılır.

Dart SDK'yı Yükleme

Dart'ın mevcut kararlı sürümü 1.21.0. dart sdk şuradan indirilebilir -

  • https://www.dartlang.org/install/archive

  • http://www.gekorm.com/dart-windows/

Dart SDK kurulumunun bir ekran görüntüsü aşağıda verilmiştir -

SDK yüklemesi tamamlandığında, PATH ortam değişkenini - olarak ayarlayın

<dart-sdk-path>\bin

Kurulumu Doğrulama

Dart'ın başarıyla kurulup kurulmadığını doğrulamak için komut istemini açın ve aşağıdaki komutu girin -

Dart

Kurulum başarılı olursa, dart çalışma zamanını gösterecektir.

IDE Desteği

Çok sayıda IDE, Dart'ta komut dosyası oluşturmayı destekler. Örnekler şunları içerir:Eclipse, IntelliJ, ve WebStorm Jet beyinlerinden.

Aşağıda, Dart ortamını kullanarak yapılandırma adımları verilmiştir. WebStrom IDE.

WebStorm'u Yükleme

WebStorm için kurulum dosyası şuradan indirilebilir: https://www.jetbrains.com/webstorm/download/#section=windows-version.

WebStorm kurulum dosyası Mac OS, Windows ve Linux için mevcuttur.

Kurulum dosyalarını indirdikten sonra, aşağıda verilen adımları izleyin -

  • Dart SDK'yı yükleyin: Yukarıda listelenen adımlara bakın

  • Yeni bir Dart projesi oluşturun ve Dart desteğini yapılandırın

  • Yeni bir Dart projesi oluşturmak için,

    • Tıklayın Create New Project Karşılama Ekranından

    • Sonraki iletişim kutusunda Dart

  • İçin herhangi bir değer belirtilmemişse Dart SDKyol, ardından SDK yolunu sağlayın. Örneğin, SDK yolu olabilir<dart installation directory>/dart/dartsdk.

Projeye Dart Dosyası Ekleme

Projeye bir Dart dosyası eklemek için -

  • Projeye sağ tıklayın
  • Yeni → Dart Dosyası
  • Dart Komut Dosyasının adını girin

WebStorm Editörünün bir ekran görüntüsü aşağıda verilmiştir -

Dart2js Aracı

dart2jsaracı, Dart kodunu JavaScript'e derler. Dart kodunu JS'ye derlemek, Dart komut dosyasının Dart sanal makinesini desteklemeyen tarayıcılarda çalıştırılmasını sağlar.

Dart2js aracı, Dart SDK'nın bir parçası olarak gönderilir ve şurada bulunabilir: /dartsdk/bin folder.

Dart'ı JavaScript'e derlemek için terminale aşağıdaki komutu yazın

dart2js - - out = <output_file>.js  <dart_script>.dart

Bu komut, Dart kodunuzun JavaScript eşdeğerini içeren bir dosya üretir. Bu yardımcı programı kullanmayla ilgili eksiksiz bir eğitim resmi Dart web sitesinde bulunabilir.

Sözdizimi, program yazmak için bir dizi kural tanımlar. Her dil özelliği kendi sözdizimini tanımlar. Bir Dart programı şunlardan oluşur:

  • Değişkenler ve Operatörler
  • Classes
  • Functions
  • İfadeler ve Programlama Yapıları
  • Karar Verme ve Döngü Yapıları
  • Comments
  • Kitaplıklar ve Paketler
  • Typedefs
  • Koleksiyonlar / Jenerikler olarak temsil edilen veri yapıları

İlk Dart Kodunuz

Geleneksel "Merhaba Dünya" örneğiyle başlayalım -

main() { 
   print("Hello World!"); 
}

main()işlev, Dart'ta önceden tanımlanmış bir yöntemdir. Bu yöntem, uygulamaya giriş noktası görevi görür. Bir Dart betiğininmain() yürütme yöntemi. print() belirtilen dizeyi veya değeri standart çıktıya yani uçbirime yazdıran önceden tanımlanmış bir işlevdir.

Yukarıdaki kodun çıktısı -

Hello World!

Dart Programı Yürütme

Bir Dart programını iki şekilde çalıştırabilirsiniz -

  • Terminal üzerinden
  • WebStorm IDE aracılığıyla

Terminal aracılığıyla

Terminal üzerinden bir Dart programını yürütmek için -

  • Mevcut projenin yoluna gidin
  • Terminal penceresine aşağıdaki komutu yazın
dart file_name.dart

WebStorm IDE aracılığıyla

WebStorm IDE aracılığıyla bir Dart programını yürütmek için -

  • IDE'deki Dart komut dosyasını sağ tıklayın. (Dosya,main() yürütmeyi etkinleştirmek için işlev)

  • Tıkla ‘Run <file_name>’seçeneği. Aynısının bir ekran görüntüsü aşağıda verilmiştir -

Alternatif olarak

düğmeyi tıklayabilir veya kısayolu kullanabilirsinizCtrl+Shift+F10 Dart Komut Dosyasını çalıştırmak için.

Dart Komut Satırı Seçenekleri

Dart komut satırı seçenekleri, Dart Komut Dosyası yürütmesini değiştirmek için kullanılır. Dart için ortak komut satırı seçenekleri şunları içerir -

Sr.No Komut Satırı Seçeneği ve Açıklaması
1 -c or --c

Hem onaylamaları hem de tür denetimlerini etkinleştirir (işaretli mod).

2 --version

VM sürüm bilgilerini görüntüler.

3 --packages <path>

Paket çözünürlüğü yapılandırma dosyasının yolunu belirtir.

4 -p <path>

İçe aktarılan kitaplıkların nerede bulunacağını belirtir. Bu seçenek --packages ile kullanılamaz.

5 -h or --help

Yardımı görüntüler.

Kontrol Edilmiş Modu Etkinleştirme

Dart programları iki modda çalışır:

  • Kontrol Edilen Mod
  • Üretim Modu (Varsayılan)

Dart sanal makinesini şurada çalıştırmanız önerilir: checked modegeliştirme ve test sırasında, geliştirme ve hata ayıklama sürecine yardımcı olmak için uyarılar ve hatalar eklediği için. İşaretli mod, tür denetimi vb. Gibi çeşitli kontrolleri zorlar. İşaretli modu açmak için, komut dosyasını çalıştırırken komut dosyası adının önüne -c veya –-checked seçeneğini ekleyin.

Bununla birlikte, komut dosyasını çalıştırırken performans avantajı sağlamak için, komut dosyasını production mode.

Aşağıdakileri göz önünde bulundur Test.dart komut dosyası -

void main() { 
   int n = "hello"; 
   print(n); 
}

Komut dosyasını şunu girerek çalıştırın -

dart Test.dart

Bir tür uyuşmazlığı olsa da, kontrol edilen mod kapatıldığında komut dosyası başarıyla yürütülür. Komut dosyası aşağıdaki çıktıyla sonuçlanacaktır -

hello

Şimdi komut dosyasını "- - işaretli" veya "-c" seçeneğiyle çalıştırmayı deneyin -

dart -c Test.dart

Veya,

dart - - checked Test.dart

Dart VM, bir tür uyuşmazlığı olduğunu belirten bir hata verecektir.

Unhandled exception: 
type 'String' is not a subtype of type 'int' of 'n' where 
   String is from dart:core 
   int is from dart:core 
#0  main (file:///C:/Users/Administrator/Desktop/test.dart:3:9) 
#1  _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart :261) 
#2  _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

Dart'taki tanımlayıcılar

Tanımlayıcılar, değişkenler, işlevler vb. Gibi bir programdaki öğelere verilen adlardır. Tanımlayıcılar için kurallar şunlardır:

Tanımlayıcılar hem karakterleri hem de rakamları içerebilir. Bununla birlikte, tanımlayıcı bir rakamla başlayamaz.

  • Tanımlayıcılar, alt çizgi (_) veya dolar işareti ($) dışında özel semboller içeremez.

  • Tanımlayıcılar anahtar kelime olamaz.

  • Benzersiz olmalılar.

  • Tanımlayıcılar büyük / küçük harfe duyarlıdır.

  • Tanımlayıcılar boşluk içeremez.

Aşağıdaki tablolar birkaç geçerli ve geçersiz tanımlayıcı örneğini listeler -

Geçerli tanımlayıcılar Geçersiz tanımlayıcılar
İsim Var
İsim İsim
num1 İsim
$ sonuç 1 numara

Dart'taki Anahtar Kelimeler

Anahtar kelimelerin bir dil bağlamında özel bir anlamı vardır. Aşağıdaki tablo, Dart'taki bazı anahtar kelimeleri listeler.

özet 1 devam et yanlış yeni bu
1 olarak varsayılan final boş atmak
iddia etmek ertelendi 1 en sonunda operatör 1 doğru
eşzamansız 2 yapmak için Bölüm 1 Deneyin
eşzamansız * 2 dinamik 1 1 al yeniden atmak typedef 1
2 bekleyin Başka Eğer dönüş var
kırmak Sıralama uygular 1 set 1 geçersiz
durum ihracat 1 ithalat 1 statik 1 süre
tutmak harici 1 içinde Süper ile
sınıf genişler dır-dir değiştirmek verim 2
sabit fabrika 1 kütüphane 1 senkronizasyon * 2 verim * 2

Boşluk ve Satır Kesmeleri

Dart, programlarda görünen boşlukları, sekmeleri ve yeni satırları yok sayar. Programınızda boşlukları, sekmeleri ve satır başlarını özgürce kullanabilirsiniz ve programlarınızı, kodu okumayı ve anlamayı kolaylaştıracak şekilde düzgün ve tutarlı bir şekilde biçimlendirmekte ve girintilemekte özgürsünüz.

Dart büyük / küçük harfe duyarlıdır

Dart, büyük / küçük harfe duyarlıdır. Bu, Dart'ın büyük ve küçük harfleri birbirinden ayırdığı anlamına gelir.

İfadeler noktalı virgülle biter

Her bir talimat satırı bir ifade olarak adlandırılır. Her dart ifadesi bir noktalı virgül (;) ile bitmelidir. Tek bir satır birden çok ifade içerebilir. Ancak, bu ifadeler noktalı virgülle ayrılmalıdır.

Dart'ta Yorumlar

Yorumlar, bir programın okunabilirliğini artırmanın bir yoludur. Yorumlar, kodun yazarı, bir işlev / yapı hakkında ipuçları vb. Gibi bir program hakkında ek bilgi eklemek için kullanılabilir. Yorumlar derleyici tarafından yok sayılır.

Dart, aşağıdaki yorum türlerini destekler -

  • Single-line comments ( // ) - "//" ile satırın sonu arasındaki herhangi bir metin yorum olarak kabul edilir

  • Multi-line comments (/* */) - Bu yorumlar birden çok satıra yayılabilir.

Misal

// this is single line comment  
  
/* This is a   
   Multi-line comment  
*/

Dart'ta Nesne Tabanlı Programlama

Dart, Nesne Tabanlı bir dildir. Nesne Yönelimi, gerçek dünya modellemesini izleyen bir yazılım geliştirme paradigmasıdır. Nesne Yönelimi, bir programı, yöntemler adı verilen mekanizma yoluyla birbirleriyle iletişim kuran nesnelerin bir koleksiyonu olarak görür.

  • Object- Bir nesne, herhangi bir varlığın gerçek zamanlı temsilidir. Grady Brooch'a göre, her nesnenin üç özelliği olmalıdır -

    • State - bir nesnenin özellikleriyle tanımlanır.

    • Behavior - nesnenin nasıl davranacağını açıklar.

    • Identity - Bir nesneyi bu tür benzer nesneler kümesinden ayıran benzersiz bir değer.

  • Class- OOP açısından bir sınıf, nesneler oluşturmak için bir plandır. Bir sınıf, nesneye ilişkin verileri kapsüller.

  • Method - Yöntemler nesneler arasındaki iletişimi kolaylaştırır.

Örnek: Dart ve Nesne Yönlendirme

class TestClass {   
   void disp() {     
      print("Hello World"); 
   } 
}  
void main() {   
   TestClass c = new TestClass();   
   c.disp();  
}

Yukarıdaki örnek bir sınıfı tanımlar TestClass. Sınıfın bir yöntemi vardisp(). Yöntem, uçbirime "Merhaba Dünya" dizesini yazdırır. New anahtar sözcüğü, sınıfın bir nesnesini oluşturur. Nesne yöntemi çağırırdisp().

Kod aşağıdakileri üretmelidir output -

Hello World

Bir programlama dilinin en temel özelliklerinden biri, desteklediği veri türleri kümesidir. Bunlar, bir programlama dilinde temsil edilebilen ve manipüle edilebilen değer türleridir.

Dart dili aşağıdaki türleri destekler−

  • Numbers
  • Strings
  • Booleans
  • Lists
  • Maps

Sayılar

Dart'taki sayılar, sayısal değişmez değerleri temsil etmek için kullanılır. Number Dart'ın iki çeşidi vardır -

  • Integer- Tam sayı değerleri, kesirli olmayan değerleri, yani ondalık noktası olmayan sayısal değerleri temsil eder. Örneğin, "10" değeri bir tam sayıdır. Tamsayı değişmezleri,int anahtar kelime.

  • Double- Dart ayrıca kesirli sayısal değerleri, yani ondalık noktalı değerleri destekler. Dart'taki Double veri türü, 64 bitlik (çift duyarlıklı) kayan nokta sayısını temsil eder. Örneğin, "10.10" değeri. Anahtar kelimedouble kayan nokta değişmezlerini temsil etmek için kullanılır.

Teller

Dizeler bir dizi karakteri temsil eder. Örneğin, ad, adres vb. Gibi bazı verileri depolayacaksanız, dize veri türü kullanılmalıdır. Dart dizesi, UTF-16 kod birimleri dizisidir.Runes UTF-32 kod birimleri dizisini temsil etmek için kullanılır.

Anahtar kelime Stringdize değişmezlerini temsil etmek için kullanılır. Dize değerleri tek veya çift tırnak içine yerleştirilmiştir.

Boole

Boolean veri türü, doğru ve yanlış Boole değerlerini temsil eder. Dart,bool bir Boolean değerini temsil eden anahtar kelime.

Liste ve Harita

Veri türleri listesi ve haritası, nesnelerin bir koleksiyonunu temsil etmek için kullanılır. BirListsıralı bir nesne grubudur. Dart'taki Liste veri türü, diğer programlama dillerindeki bir dizi kavramı ile eş anlamlıdır. Mapveri türü, anahtar / değer çiftleri olarak bir dizi değeri temsil eder. dart: core kütüphane, bu koleksiyonların sırasıyla önceden tanımlanmış Liste ve Harita sınıfları aracılığıyla oluşturulmasını ve değiştirilmesini sağlar.

Dinamik Tip

Dart, isteğe bağlı olarak yazılan bir dildir. Bir değişkenin türü açıkça belirtilmezse, değişkenin türüdynamic. dynamic anahtar kelime ayrıca bir tür ek açıklaması olarak da kullanılabilir.

Değişken, değerleri depolayan “bellekte adlandırılmış bir alandır”. Başka bir deyişle, bir programdaki değerler için bir kap görevi görür. Değişken adlarına tanımlayıcılar denir. Bir tanımlayıcı için adlandırma kuralları aşağıdadır -

  • Tanımlayıcılar anahtar kelime olamaz.

  • Tanımlayıcılar harf ve sayı içerebilir.

  • Tanımlayıcılar, alt çizgi (_) ve dolar ($) işareti dışında boşluk ve özel karakterler içeremez.

  • Değişken isimleri bir sayı ile başlayamaz.

Tür Sözdizimi

Kullanılmadan önce bir değişken bildirilmelidir. Dart, aynısını elde etmek için var anahtar sözcüğünü kullanır. Bir değişken bildirmek için sözdizimi aşağıda verildiği gibidir -

var name = 'Smith';

Dart'taki tüm değişkenler, değeri içermek yerine değere bir başvuru saklar. Name adlı değişken, "Smith" değerine sahip bir String nesnesine başvuru içerir.

Dart destekleri type-checkingdeğişken adının önüne veri türü ekleyerek. Tür denetimi, bir değişkenin yalnızca bir veri türüne özgü verileri tutmasını sağlar. Aynı sözdizimi aşağıda verilmiştir -

String name = 'Smith'; 
int num = 10;

Şu örneği düşünün -

void main() { 
   String name = 1; 
}

Değişkene atanan değer, değişkenin veri türüyle eşleşmediğinden yukarıdaki kod parçası bir uyarıya neden olur.

Çıktı

Warning: A value of type 'String' cannot be assigned to a variable of type 'int'

Tüm başlatılmamış değişkenler null başlangıç ​​değerine sahiptir. Bunun nedeni, Dart'ın tüm değerleri nesneler olarak görmesidir. Aşağıdaki örnek aynı şeyi göstermektedir -

void main() { 
   int num; 
   print(num); 
}

Çıktı

Null

Dinamik anahtar kelime

Statik bir tür olmadan bildirilen değişkenler dolaylı olarak dinamik olarak bildirilir. Değişkenler, var anahtar sözcüğü yerine dynamic anahtar sözcüğü kullanılarak da bildirilebilir.

Aşağıdaki örnek aynı şeyi göstermektedir.

void main() { 
   dynamic x = "tom"; 
   print(x);  
}

Çıktı

tom

Final ve Const

final ve constanahtar sözcük sabitleri bildirmek için kullanılır. Dart, final veya const anahtar sözcüğü kullanılarak bildirilen bir değişkenin değerlerinin değiştirilmesini engeller. Bu anahtar kelimeler, değişkenin veri türü ile bağlantılı olarak veya bunun yerine kullanılabilir.var anahtar kelime.

constanahtar kelime, derleme zamanı sabitini temsil etmek için kullanılır. Kullanılarak bildirilen değişkenlerconst anahtar kelime dolaylı olarak nihaidir.

Sözdizimi: final Keyword

final variable_name

VEYA

final data_type  variable_name

Sözdizimi: const Anahtar Kelime

const variable_name

VEYA

const data_type variable_name

Örnek - son Anahtar Kelime

void main() { 
   final val1 = 12; 
   print(val1); 
}

Çıktı

12

Örnek - sabit Anahtar Kelime

void main() { 
   const pi = 3.14; 
   const area = pi*12*12; 
   print("The output is ${area}"); 
}

Yukarıdaki örnek iki sabit beyan eder, pi ve area, kullanmak constanahtar kelime. area değişkenin değeri bir derleme zamanı sabitidir.

Çıktı

The output is 452.15999999999997

Note - Sadece constdeğişkenler bir derleme süresi sabitini hesaplamak için kullanılabilir. Derleme zamanı sabitleri, değerleri derleme zamanında belirlenecek sabitlerdir

Misal

Dart, ile bildirilen değişkenleri değiştirme girişiminde bulunulursa bir istisna atar. finalveya const anahtar kelime. Aşağıda verilen örnek aynı şeyi göstermektedir -

void main() { 
   final v1 = 12; 
   const v2 = 13; 
   v2 = 12; 
}

Yukarıda verilen kod aşağıdaki hatayı verecektir: output -

Unhandled exception: 
cannot assign to final variable 'v2='.  
NoSuchMethodError: cannot assign to final variable 'v2=' 
#0  NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:178) 
#1      main (file: Test.dart:5:3) 
#2    _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) 
#3    _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

İfade, bir değer olarak değerlendirilen özel bir tür ifadedir. Her ifade şunlardan oluşur -

  • Operands - Verileri temsil eder

  • Operator - İşlenenlerin bir değer üretmek için nasıl işleneceğini tanımlar.

Şu ifadeyi düşünün - "2 + 3". Bu ifadede 2 ve 3operands ve "+" (artı) sembolü operator.

Bu bölümde, Dart'ta bulunan operatörleri tartışacağız.

  • Aritmetik operatörler
  • Eşitlik ve İlişkisel Operatörler
  • Tip testi Operatörleri
  • Bitsel Operatörler
  • Atama Operatörleri
  • Mantıksal operatörler

Aritmetik operatörler

Aşağıdaki tablo Dart tarafından desteklenen aritmetik işleçleri göstermektedir.

Örnekleri Göster

Sr.No Operatörler ve Anlam
1 +

Ekle

2

Çıkar

3 -expr

Tekli eksi, olumsuzlama olarak da bilinir (ifadenin işaretini tersine çevirin)

4 *

Çarpmak

5 /

Böl

6 ~/

Böl, bir tamsayı sonucu döndürür

7 %

Bir tamsayı bölmesinin (modulo) kalanını alın

8 ++

Artış

9 --

Azaltma

Eşitlik ve İlişkisel Operatörler

İlişkisel Operatörler, iki varlık arasındaki ilişki türünü test eder veya tanımlar. İlişkisel operatörler bir Boolean değeri, yani doğru / yanlış döndürür.

A'nın değerinin 10 ve B'nin 20 olduğunu varsayalım.

Örnekleri Göster

Şebeke Açıklama Misal
> Büyüktür (A> B) Yanlış
< Den daha az (A <B) Doğru
> = Büyük veya eşit (A> = B) Yanlış
<= Küçük veya eşit (A <= B) Doğru
== Eşitlik (A == B) Yanlış
! = Eşit değil (A! = B) Doğru

Tip testi Operatörleri

Bu operatörler, çalışma zamanında türleri kontrol etmek için kullanışlıdır.

Örnekleri Göster

Şebeke Anlam
dır-dir Nesne belirtilen türe sahipse doğrudur
dır-dir! Nesne belirtilen türe sahipse yanlış

Bitsel Operatörler

Aşağıdaki tablo, Dart'ta bulunan bitsel operatörleri ve rollerini listeler -

Örnekleri Göster

Şebeke Açıklama Misal
Bitsel AND a & b Her iki işlenenin karşılık gelen bitlerinin bir olduğu her bit konumunda bir tane döndürür.
Bit tabanlı VEYA a | b İşlenenlerden birinin veya her ikisinin karşılık gelen bitlerinin bir olduğu her bit konumunda bir tane döndürür.
Bitsel ÖZELVEYA a ^ b Her bit konumunda, her iki işlenenden birinin değil de karşılık gelen bitlerinin bir olduğu bir tane döndürür.
Bitsel DEĞİL ~ bir İşleneninin bitlerini ters çevirir.
Sol shift a ≪ b İkili gösterimde a'yı (<32) bit sola kaydırır, sağdan sıfırlar halinde kaydırır.
İşaret yayma sağa kaydırma a ≫ b İkili gösterimde a (<32) bitleri sağa kaydırır, kaymış bitleri atar.

Atama Operatörleri

Aşağıdaki tablo, Dart'ta bulunan atama operatörlerini listeler.

Örnekleri Göster

Sr.No Operatör ve Açıklama
1 =(Simple Assignment )

Sağ taraftaki işlenenden sol taraftaki işlenene değer atar

Ex: C = A + B, A + B'nin değerini C'ye atayacaktır

2 ??=

Değeri yalnızca değişken boş ise atayın

3 +=(Add and Assignment)

Sağ işleneni sol işlenene ekler ve sonucu sol işlenene atar.

Ex: C + = A, C = C + A'ya eşdeğerdir

4 ─=(Subtract and Assignment)

Sağ işleneni sol işlenenden çıkarır ve sonucu sol işlenene atar.

Ex: C - = A, C = C - A'ya eşdeğerdir

5 *=(Multiply and Assignment)

Sağ işleneni sol işlenenle çarpar ve sonucu sol işlenene atar.

Ex: C * = A, C = C * A'ya eşdeğerdir

6 /=(Divide and Assignment)

Soldaki işleneni sağ işlenenle böler ve sonucu sol işlenene atar.

Note - Aynı mantık Bitsel operatörler için de geçerlidir, bu nedenle bunlar ≪ =, ≫ =, ≫ =, ≫ =, | = ve ^ = olurlar.

Mantıksal operatörler

Mantıksal operatörler, iki veya daha fazla koşulu birleştirmek için kullanılır. Mantıksal operatörler bir Boolean değeri döndürür. A değişkeninin değerinin 10 ve B'nin 20 olduğunu varsayalım.

Örnekleri Göster

Şebeke Açıklama Misal
&&

And - Operatör, yalnızca belirtilen tüm ifadeler true dönerse true değerini döndürür

(A> 10 && B> 10) Yanlış.
||

OR - Belirtilen ifadelerden en az biri doğru döndürürse operatör doğru döndürür

(A> 10 || B> 10) Doğru.
!

NOT- Operatör, ifadenin sonucunun tersini döndürür. Örneğin:! (7> 5) yanlış döndürür

! (A> 10) Doğru.

Koşullu İfadeler

Dart, aksi takdirde ifelse ifadeleri gerektirebilecek ifadeleri değerlendirmenize olanak tanıyan iki operatöre sahiptir:

durum ? ifade1: ifade2

Koşul doğruysa ifade değerlendirilir expr1(ve değerini döndürür); aksi takdirde, değerini değerlendirir ve döndürürexpr2.

ifade1 ?? ifade2

Eğer expr1boş değildir, değerini döndürür; aksi takdirde, değerini değerlendirir ve döndürürexpr2

Misal

Aşağıdaki örnek, Dart'ta koşullu ifadeyi nasıl kullanabileceğinizi gösterir -

void main() { 
   var a = 10; 
   var res = a > 12 ? "value greater than 10":"value lesser than or equal to 10"; 
   print(res); 
}

Aşağıdaki çıktıyı üretecektir -

value lesser than or equal to 10

Misal

Başka bir örnek alalım -

void main() { 
   var a = null; 
   var b = 12; 
   var res = a ?? b; 
   print(res); 
}

Aşağıdaki çıktıyı üretecektir -

12

Bazen belirli talimatların tekrar tekrar yürütülmesi gerekir. Döngüler, aynısını yapmanın ideal bir yoludur. Döngü, tekrarlanması gereken bir dizi talimatı temsil eder. Bir döngünün bağlamında, bir tekrar, biriteration.

Aşağıdaki şekil döngülerin sınıflandırılmasını göstermektedir -

Tartışmaya Definite Loops ile başlayalım. Yineleme sayısı belirli / sabit olan bir döngü,definite loop.

Sr.No Döngü ve Açıklama
1 döngü için

fordöngü, belirli bir döngünün bir uygulamasıdır. For döngüsü, kod bloğunu belirli bir sayıda yürütür. Bir dizi gibi sabit bir değer kümesi üzerinde yineleme yapmak için kullanılabilir

2 for… in Loop

For ... in döngüsü, bir nesnenin özelliklerinde döngü yapmak için kullanılır.

Devam edelim, şimdi belirsiz döngüleri tartışalım. Bir döngüdeki yineleme sayısı belirsiz olduğunda veya bilinmediğinde belirsiz döngü kullanılır. Belirsiz döngüler kullanılarak uygulanabilir -

Sr.No Döngü ve Açıklama
1 döngü sırasında

While döngüsü, belirtilen koşul her doğru değerlendirildiğinde talimatları yürütür. Başka bir deyişle, döngü, kod bloğu yürütülmeden önce durumu değerlendirir.

2 yap… Döngü sırasında

Do… while döngüsü while döngüsüne benzer, tek farkı do ... while döngüsü döngü ilk kez çalıştırıldığında koşulu değerlendirmez.

Şimdi devam edelim ve Loop Control Statements Dart.

Sr.No Kontrol İfadesi ve Açıklama
1 break İfadesi

breakifadesi denetimi bir yapının dışına çıkarmak için kullanılır. Kullanmabreakbir döngüde programın döngüden çıkmasına neden olur. Aşağıda bir örnek verilmiştirbreak Beyan.

2 Continue İfadesi

continue deyimi geçerli yinelemedeki sonraki deyimleri atlar ve denetimi döngünün başlangıcına geri götürür.

Akışı Kontrol Etmek İçin Etiketleri Kullanma

Bir labelbasitçe bir ifadeye veya bir kod bloğuna uygulanan iki nokta üst üste (:) ile izlenen bir tanımlayıcıdır. Bir etiket ile kullanılabilirbreak ve continue akışı daha kesin olarak kontrol etmek için.

Arasında satır sonlarına izin verilmez ‘continue’ veya ‘break’ifadesi ve etiket adı. Ayrıca, bir etiket adı ile ilişkili bir döngü arasında başka herhangi bir ifade olmamalıdır.

Örnek: Kesmeli Etiket

void main() { 
   outerloop: // This is the label name 
   
   for (var i = 0; i < 5; i++) { 
      print("Innerloop: ${i}"); innerloop: for (var j = 0; j < 5; j++) { if (j > 3 ) break ; // Quit the innermost loop if (i == 2) break innerloop; // Do the same thing if (i == 4) break outerloop; // Quit the outer loop print("Innerloop: ${j}"); 
      } 
   } 
}

Aşağıdaki output Yukarıdaki kod başarılı bir şekilde yürütüldüğünde görüntülenir.

Innerloop: 0
Innerloop: 0
Innerloop: 1
Innerloop: 2
Innerloop: 3
Innerloop: 1
Innerloop: 0
Innerloop: 1
Innerloop: 2
Innerloop: 3
Innerloop: 2
Innerloop: 3
Innerloop: 0
Innerloop: 1
Innerloop: 2
Innerloop: 3
Innerloop: 4

Örnek: Devamlı etiket

void main() { 
   outerloop: // This is the label name 
   
   for (var i = 0; i < 3; i++) { 
      print("Outerloop:${i}"); for (var j = 0; j < 5; j++) { if (j == 3){ continue outerloop; } print("Innerloop:${j}"); 
      } 
   } 
}

Yukarıdaki kod başarılı bir şekilde yürütüldüğünde aşağıdaki çıktı görüntülenir.

Outerloop: 0 
Innerloop: 0 
Innerloop: 1 
Innerloop: 2 

Outerloop: 1 
Innerloop: 0 
Innerloop: 1 
Innerloop: 2 

Outerloop: 2 
Innerloop: 0 
Innerloop: 1 
Innerloop: 2

Bir koşullu / karar verici yapı, talimatlar yürütülmeden önce bir koşulu değerlendirir.

Dart'taki koşullu yapılar aşağıdaki tabloda sınıflandırılmıştır.

Sr.No Açıklama ve Açıklama
1 if Beyan

Bir if ifade, bir veya daha fazla ifadenin izlediği bir Boole ifadesinden oluşur.

2 If ... Else İfadesi

Bir if ardından isteğe bağlı bir elseblok. else Boolean ifadesi tarafından test edilirse blok yürütülür. if blok yanlış olarak değerlendirilir.

3 else… if Ladder

else…if ladderbirden çok koşulu test etmek için kullanışlıdır. Aynı sözdizimi aşağıdadır.

4 switch… case İfadesi

Switch deyimi bir ifadeyi değerlendirir, ifadenin değerini bir case cümlesiyle eşleştirir ve bu vaka ile ilişkili ifadeleri yürütür.

Dart numaraları şu şekilde sınıflandırılabilir -

  • int- Rasgele büyüklükte tamsayı. int veri türü, tam sayıları temsil etmek için kullanılır.

  • double- IEEE 754 standardında belirtildiği gibi 64 bit (çift duyarlıklı) kayan noktalı sayılar. double veri türü, kesirli sayıları temsil etmek için kullanılır

num tür, tarafından miras alınır int ve doubletürleri. dart core library sayısal değerler üzerinde çok sayıda işleme izin verir.

Bir sayı bildirmek için sözdizimi aşağıda verildiği gibidir -

int var_name;      // declares an integer variable 
double var_name;   // declares a double variable

Misal

void main() {
   // declare an integer
   int num1 = 10;             
     
   // declare a double value
   double num2 = 10.50;  

   // print the values
   print(num1);
   print(num2);
}

Aşağıdaki çıktıyı üretecektir -

10 
10.5

Note - Dart VM Kesirli değerler tamsayı değişkenlerine atanırsa bir istisna oluşturur.

Ayrıştırma

parse()statik işlev, sayısal hazır bilgi içeren bir dizeyi bir sayıya ayrıştırmaya izin verir. Aşağıdaki çizim aynı şeyi göstermektedir -

void main() { 
   print(num.parse('12')); 
   print(num.parse('10.91')); 
}

Yukarıdaki kod aşağıdaki çıktıyla sonuçlanacaktır -

12 
10.91

Ayrıştırma işlevi bir FormatExceptionsayılar dışında herhangi bir değer geçirilirse. Aşağıdaki kod, alfa sayısal bir değerinparse() işlevi.

Misal

void main() { 
   print(num.parse('12A')); 
   print(num.parse('AAAA')); 
}

Yukarıdaki kod aşağıdaki çıktıyla sonuçlanacaktır -

Unhandled exception: 
FormatException: 12A 
#0 num.parse (dart:core/num.dart:446) 
#1 main (file:///D:/Demos/numbers.dart:4:13) 
#2 _startIsolate.<anonymous closure> (dart:isolatepatch/isolate_patch.dart:261) 
#3 _RawReceivePortImpl._handleMessage (dart:isolatepatch/isolate_patch.dart:148)

Sayı Özellikleri

Aşağıdaki tablo, Dart numaralarının desteklediği özellikleri listeler.

Sr.No Özellik ve Açıklama
1 hash kodu

Sayısal bir değer için bir karma kod döndürür.

2 isFinite

Sayı sonlu ise doğrudur; aksi takdirde, false.

3 Sonsuz

Sayı pozitif sonsuz veya negatif sonsuzsa doğrudur; aksi takdirde, false.

4 isNan

Sayı çift Sayı Değil değeriyse doğrudur; aksi takdirde, false.

5 isNegative

Sayı negatifse doğrudur; aksi takdirde, false.

6 işaret

Sayının işaretine ve sayısal değerine bağlı olarak eksi bir, sıfır veya artı bir döndürür.

7 isEven

Sayı çift sayı ise true döndürür.

8 garip

Sayı tek sayı ise true döndürür.

Sayı Yöntemleri

Aşağıda, sayılarla desteklenen yaygın olarak kullanılan yöntemlerin bir listesi verilmiştir -

Sr.No Yöntem ve Açıklama
1 abs

Sayının mutlak değerini döndürür.

2 tavan

Sayıdan küçük olmayan en küçük tamsayıyı döndürür.

3 karşılaştırmak

Bunu diğer sayı ile karşılaştırır.

4 Zemin

Geçerli sayıdan büyük olmayan en büyük tamsayıyı döndürür.

5 kalan

İki sayıyı böldükten sonra kesilmiş kalanı döndürür.

6 Yuvarlak

Geçerli sayılara en yakın tamsayıyı döndürür.

7 toDouble

Sayının çift eşdeğerini döndürür.

8 toInt

Sayının tamsayı eşdeğerini döndürür.

9

Sayının dize eşdeğeri gösterimini döndürür.

10 kesmek

Kesirli basamaklar atıldıktan sonra bir tamsayı döndürür.

String veri türü, bir karakter dizisini temsil eder. Dart dizesi, UTF 16 kod birimleri dizisidir.

Dart'taki dize değerleri, tek veya çift veya üçlü tırnak kullanılarak temsil edilebilir. Tek satırlı dizeler, tek veya çift tırnak kullanılarak temsil edilir. Üçlü tırnak işaretleri, çok satırlı dizeleri temsil etmek için kullanılır.

Dart'ta dize değerlerini temsil etme sözdizimi aşağıda verildiği gibidir -

Sözdizimi

String  variable_name = 'value'  

OR  

String  variable_name = ''value''  

OR  

String  variable_name = '''line1 
line2'''  

OR  

String  variable_name= ''''''line1 
line2''''''

Aşağıdaki örnek, Dart'ta String veri türünün kullanımını gösterir.

void main() { 
   String str1 = 'this is a single line string'; 
   String str2 = "this is a single line string"; 
   String str3 = '''this is a multiline line string'''; 
   String str4 = """this is a multiline line string"""; 
   
   print(str1);
   print(str2); 
   print(str3); 
   print(str4); 
}

Aşağıdakileri üretecek Output -

this is a single line string 
this is a single line string 
this is a multiline line string 
this is a multiline line string

Dizeler değişmezdir. Ancak, dizeler çeşitli işlemlere tabi tutulabilir ve ortaya çıkan dizi yeni bir değer olarak saklanabilir.

Dize Enterpolasyonu

Statik bir dizeye bir değer ekleyerek yeni bir dize oluşturma işlemi şu şekilde adlandırılır: concatenation veya interpolation. Başka bir deyişle, başka bir dizgeye bir dizge ekleme işlemidir.

Operatör artı (+), dizeleri birleştirmek / enterpolasyon yapmak için yaygın olarak kullanılan bir mekanizmadır.

örnek 1

void main() { 
   String str1 = "hello"; 
   String str2 = "world"; 
   String res = str1+str2; 
   
   print("The concatenated string : ${res}"); 
}

Aşağıdakileri üretecek output -

The concatenated string : Helloworld

Örnek 2

Dart ifadesinin değerini dizeler içinde enterpolasyon yapmak için "$ {}" kullanabilirsiniz. Aşağıdaki örnek aynı şeyi göstermektedir.

void main() { 
   int n=1+1; 
   
   String str1 = "The sum of 1 and 1 is ${n}"; print(str1); String str2 = "The sum of 2 and 2 is ${2+2}"; 
   print(str2); 
}

Aşağıdakileri üretecek output -

The sum of 1 and 1 is 2 
The sum of 2 and 2 is 4

Dize Özellikleri

Aşağıdaki tabloda listelenen özelliklerin tümü salt okunurdur.

Sr.No Özellik ve Açıklama
1 codeUnits

Bu dizenin UTF-16 kod birimlerinin değiştirilemez bir listesini döndürür.

2 boş

Bu dize boşsa doğru döndürür.

3 Uzunluk

Boşluk, sekme ve satırsonu karakterleri dahil olmak üzere dizenin uzunluğunu döndürür.

Dizeleri Değiştirme Yöntemleri

String sınıfı dart: core libraryayrıca dizeleri işlemek için yöntemler sağlar. Bu yöntemlerden bazıları aşağıda verilmiştir -

Sr.No Yöntemler ve Açıklama
1 toLowerCase ()

Bu dizedeki tüm karakterleri küçük harfe dönüştürür.

2 toUpperCase ()

Bu dizedeki tüm karakterleri büyük harfe dönüştürür.

3 trim ()

Dizeyi başında ve sonunda boşluk olmadan döndürür.

4 karşılaştırmak()

Bu nesneyi başka bir nesneyle karşılaştırır.

5 hepsini değiştir()

Belirtilen desenle eşleşen tüm alt dizeleri belirli bir değerle değiştirir.

6 Bölünmüş()

Dizeyi belirtilen sınırlayıcının eşleşmelerine böler ve bir alt dizeler listesi döndürür.

7 alt dize ()

StartIndex, inclusive'den endIndex'e kadar uzanan bu dizenin alt dizesini döndürür.

8 toString ()

Bu nesnenin dize gösterimini döndürür.

9 codeUnitAt ()

Verilen dizindeki 16 bit UTF-16 kod birimini döndürür.

Dart, Boolean veri türü için dahili bir destek sağlar. DART'taki Boole veri türü yalnızca iki değeri destekler - true ve false. Bool anahtar kelimesi, DART'ta bir Boole değerini temsil etmek için kullanılır.

DART'ta bir Boole değişkenini bildirmek için sözdizimi aşağıda verilmiştir -

bool var_name = true;  
OR  
bool var_name = false

Misal

void main() { 
   bool test; 
   test = 12 > 5; 
   print(test); 
}

Aşağıdakileri üretecek output -

true

Misal

JavaScript'ten farklı olarak, Boolean veri türü yalnızca değişmez değeri true olarak tanır. Diğer herhangi bir değer yanlış olarak kabul edilir. Şu örneği düşünün -

var str = 'abc'; 
if(str) { 
   print('String is not empty'); 
} else { 
   print('Empty String'); 
}

Yukarıdaki kod parçacığı, JavaScript'te çalıştırılırsa, dizge boş değilse if yapısı doğru döndürdüğü için 'Dize boş değil' mesajını yazdıracaktır.

Ancak Dart'ta strstr! = true olarak false değerine dönüştürülür . Bu nedenle, pasaj 'Boş Dize' mesajını yazdıracaktır (kontrol edilmemiş modda çalıştırıldığında).

Misal

Yukarıdaki kod parçası checkedmod bir istisna oluşturacaktır. Aynısı aşağıda gösterilmektedir -

void main() { 
   var str = 'abc'; 
   if(str) { 
      print('String is not empty'); 
   } else { 
      print('Empty String'); 
   } 
}

Aşağıdakileri üretecek output, içinde Checked Mode -

Unhandled exception: 
type 'String' is not a subtype of type 'bool' of 'boolean expression' where 
   String is from dart:core 
   bool is from dart:core  
#0 main (file:///D:/Demos/Boolean.dart:5:6) 
#1 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) 
#2 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

Aşağıdakileri üretecek output, içinde Unchecked Mode -

Empty String

Note - WebStorm IDE varsayılan olarak işaretli modda çalışır.

Programlamada çok yaygın olarak kullanılan bir koleksiyon, array. Dart, dizileri şu şekilde temsil eder:Listnesneler. BirListbasitçe sıralı bir nesne grubudur. dart:core kütüphane, listelerin oluşturulmasını ve değiştirilmesini sağlayan List sınıfını sağlar.

Dart'taki bir listenin mantıksal temsili aşağıda verilmiştir -

  • test_list - koleksiyona başvuran tanımlayıcıdır.

  • Liste, içinde 12, 13 ve 14 değerlerini içerir. Bu değerleri tutan bellek blokları, elements.

  • Listedeki her bir öğe, adı verilen benzersiz bir numara ile tanımlanır. index. Dizin başlarzero ve kadar uzanır n-1 nerede nListedeki toplam öğe sayısıdır. Endeks aynı zamandasubscript.

Listeler şu şekilde sınıflandırılabilir -

  • Sabit Uzunluk Listesi
  • Büyütülebilir Liste

Şimdi bu iki türü tartışalım lists detayda.

Sabit Uzunluk Listesi

Sabit uzunluktaki bir listenin uzunluğu çalışma zamanında değiştirilemez. Sabit uzunlukta bir liste oluşturmak için sözdizimi aşağıda verildiği gibidir -

Step 1 − Declaring a list

Sabit uzunlukta bir liste bildirmek için sözdizimi aşağıda verilmiştir -

var list_name = new List(initial_size)

Yukarıdaki sözdizimi, belirtilen boyutta bir liste oluşturur. Liste, çalışma zamanında büyüyemez veya daralamaz. Listeyi yeniden boyutlandırma girişimleri bir istisna ile sonuçlanacaktır.

Step 2 − Initializing a list

Bir listeyi başlatmak için sözdizimi aşağıda verildiği gibidir -

lst_name[index] = value;

Misal

void main() { 
   var lst = new List(3); 
   lst[0] = 12; 
   lst[1] = 13; 
   lst[2] = 11; 
   print(lst); 
}

Aşağıdakileri üretecek output -

[12, 13, 11]

Büyütülebilir Liste

Büyütülebilir bir listenin uzunluğu çalışma zamanında değişebilir. Büyütülebilir bir listeyi bildirmek ve başlatmak için sözdizimi aşağıda verildiği gibidir -

Step 1 − Declaring a List

var list_name = [val1,val2,val3]   
--- creates a list containing the specified values  
OR  
var list_name = new List() 
--- creates a list of size zero

Step 2 − Initializing a List

Dizin / alt simge, bir değerle doldurulması gereken öğeye başvurmak için kullanılır. Bir listeyi başlatmak için sözdizimi aşağıda verildiği gibidir -

list_name[index] = value;

Misal

Aşağıdaki örnek, 3 öğeden oluşan bir listenin nasıl oluşturulacağını gösterir.

void main() { 
   var num_list = [1,2,3]; 
   print(num_list); 
}

Aşağıdakileri üretecek output -

[1, 2, 3]

Misal

Aşağıdaki örnek, sıfır uzunluklu bir liste oluşturur. empty List() constructor. add() işlevi List sınıfı, listeye dinamik olarak eleman eklemek için kullanılır.

void main() { 
   var lst = new List(); 
   lst.add(12); 
   lst.add(13); 
   print(lst); 
}

Aşağıdakileri üretecek output -

[12, 13]

Liste Özellikleri

Aşağıdaki tablo, makinenin yaygın olarak kullanılan bazı özelliklerini listelemektedir. List sınıf dart:core library.

Sr.No Yöntemler ve Açıklama
1 ilk

İlk eleman durumunu döndürür.

2 boş

Koleksiyonda öğe yoksa doğru döndürür.

3 boş değil

Koleksiyonun en az bir öğesi varsa doğru döndürür.

4 uzunluk

Listenin boyutunu döndürür.

5 son

Listedeki son öğeyi döndürür.

6 ters

Liste değerlerini ters sırada içeren yinelenebilir bir nesne döndürür.

7 Tek

Listenin yalnızca bir öğesi olup olmadığını kontrol eder ve onu döndürür.

Bu bölümde, Listelerde aşağıdakiler gibi bazı temel işlemlerin nasıl gerçekleştirileceğini tartışacağız:

Sr.No Temel Kullanım ve Açıklama
1 Bir Listeye Eleman Ekleme

Değişebilir Listeler, çalışma zamanında dinamik olarak büyüyebilir. List.add() işlevi, belirtilen değeri Listenin sonuna ekler ve değiştirilmiş bir List nesnesi döndürür.

2 Liste güncelleme

Dart'taki listeler şu şekilde güncellenebilir -

  • Dizini Güncelleme
  • List.replaceRange () işlevini kullanma
3 Liste öğelerini kaldırma

Dartta List sınıfı tarafından desteklenen şu işlevler: çekirdek kitaplığı, Listedeki öğeleri kaldırmak için kullanılabilir.

Harita nesnesi basit bir anahtar / değer çiftidir. Bir haritadaki anahtarlar ve değerler herhangi bir türde olabilir. Harita dinamik bir koleksiyondur. Başka bir deyişle, Haritalar çalışma zamanında büyüyebilir ve küçülebilir.

Haritalar iki şekilde ilan edilebilir -

  • Harita Değişmezlerini Kullanma
  • Harita yapıcısı kullanma

Harita Değişmezlerini Kullanarak Harita Bildirme

Eşleme değişmezlerini kullanarak bir harita bildirmek için, anahtar / değer çiftlerini bir çift küme parantezinin içine almanız gerekir "{ }".

İşte onun syntax -

var identifier = { key1:value1, key2:value2 [,…..,key_n:value_n] }

Harita Oluşturucusu Kullanarak Harita Bildirme

Bir Harita kurucusu kullanarak bir Harita bildirmek için iki adımımız var. Önce haritayı bildirin ve ikinci olarak haritayı başlatın.

syntax -e declare a map aşağıdaki gibidir -

var identifier = new Map()

Şimdi, aşağıdaki sözdizimini kullanın initialize the map -

map_name[key] = value

Örnek: Harita Değişmez Değeri

void main() { 
   var details = {'Usrname':'tom','Password':'pass@123'}; 
   print(details); 
}

Aşağıdakileri üretecek output -

{Usrname: tom, Password: pass@123}

Örnek: Çalışma Süresinde Harita Sabit Değerlerine Değer Ekleme

void main() { 
   var details = {'Usrname':'tom','Password':'pass@123'}; 
   details['Uid'] = 'U1oo1'; 
   print(details); 
}

Aşağıdakileri üretecek output -

{Usrname: tom, Password: pass@123, Uid: U1oo1}

Örnek: Harita Oluşturucu

void main() { 
   var details = new Map(); 
   details['Usrname'] = 'admin'; 
   details['Password'] = 'admin@123'; 
   print(details); 
}

Aşağıdakileri üretecek output -

{Usrname: admin, Password: admin@123}

Note - Bir harita değeri, NULL dahil herhangi bir nesne olabilir.

Harita - Özellikler

Map dart sınıfı: çekirdek paketi aşağıdaki özellikleri tanımlar -

Sr.No Özellik ve Açıklama
1 Anahtarlar

Anahtarları temsil eden yinelenebilir bir nesne döndürür

2 Değerler

Değerleri temsil eden yinelenebilir bir nesne döndürür

3 Uzunluk

Haritanın boyutunu verir

4 boş

Harita boş bir Harita ise true döndürür

5 boş değil

Harita boş bir Harita ise true döndürür

Harita - Fonksiyonlar

Dart'ta Haritaları değiştirmek için yaygın olarak kullanılan işlevler aşağıdadır.

Sr.No Fonksiyon Adı ve Tanımı
1 hepsini ekle()

Diğerinin tüm anahtar / değer çiftlerini bu haritaya ekler.

2 açık()

Haritadan tüm çiftleri kaldırır.

3 Kaldırmak()

Anahtarı ve varsa ilişkili değerini haritadan kaldırır.

4 her biri için()

Haritanın her bir anahtar / değer çiftine f uygular.

Dart'taki semboller, bir kitaplıktan meta verileri yansıtmak için kullanılan opak, dinamik dize adlarıdır. Basitçe ifade etmek gerekirse, semboller, insanlar tarafından okunabilir bir dizgi ile bilgisayarlar tarafından kullanılmak üzere optimize edilmiş bir dizge arasındaki ilişkiyi saklamanın bir yoludur.

Yansıma, bir sınıftaki yöntem sayısı, sahip olduğu kurucu sayısı veya bir işlevdeki parametre sayısı gibi çalışma zamanında bir türün meta verilerini elde eden bir mekanizmadır. Çalışma zamanında yüklenen türde bir yöntemi bile çağırabilirsiniz.

Dart yansımasında belirli sınıflar, dart:mirrorspaketi. Bu kitaplık hem web uygulamalarında hem de komut satırı uygulamalarında çalışır.

Sözdizimi

Symbol obj = new Symbol('name');  
// expects a name of class or function or library to reflect

name geçerli bir genel Dart üyesi adı, genel kurucu adı veya kitaplık adı olmalıdır.

Misal

Aşağıdaki örneği düşünün. Kod bir sınıf bildiriyorFoo bir kütüphanede foo_lib. Sınıf, yöntemleri tanımlarm1, m2, ve m3.

Yemek sanatı

library foo_lib;   
// libarary name can be a symbol   

class Foo {         
   // class name can be a symbol  
   m1() {        
      // method name can be a symbol 
      print("Inside m1"); 
   } 
   m2() { 
      print("Inside m2"); 
   } 
   m3() { 
      print("Inside m3"); 
   } 
}

Aşağıdaki kod yüklenir Foo.dartkütüphane ve Sembol türü yardımıyla Foo sınıfını arar. Yukarıdaki kitaplıktan meta verileri yansıttığımız için kod,dart:mirrors kütüphane.

FooSymbol.dart

import 'dart:core'; 
import 'dart:mirrors'; 
import 'Foo.dart';  

main() { 
   Symbol lib = new Symbol("foo_lib");   
   //library name stored as Symbol 
   
   Symbol clsToSearch = new Symbol("Foo");  
   // class name stored as Symbol  
   
   if(checkIf_classAvailableInlibrary(lib, clsToSearch))  
   // searches Foo class in foo_lib library 
      print("class found.."); 
}  
   
bool checkIf_classAvailableInlibrary(Symbol libraryName, Symbol className) { 
   MirrorSystem mirrorSystem = currentMirrorSystem(); 
   LibraryMirror libMirror = mirrorSystem.findLibrary(libraryName); 
      
   if (libMirror != null) { 
      print("Found Library"); 
      print("checkng...class details.."); 
      print("No of classes found is : ${libMirror.declarations.length}"); 
      libMirror.declarations.forEach((s, d) => print(s));  
         
      if (libMirror.declarations.containsKey(className)) return true; 
      return false; 
   } 
}

LibMirror.declarations.forEach ((s, d) => print (s)); çalışma zamanında kitaplıktaki her bildirimi yineler ve bildirimleri tür olarak yazdırırSymbol.

Bu kod aşağıdakileri üretmelidir output -

Found Library 
checkng...class details.. 
No of classes found is : 1 
Symbol("Foo") // class name displayed as symbol  
class found.

Örnek: Bir sınıfın örnek yöntemlerinin sayısını görüntüleyin

Şimdi bir sınıftaki örnek yöntemlerinin sayısını görüntülemeyi düşünelim. Önceden tanımlanmış sınıfClassMirror aynı şeyi başarmamıza yardımcı olur.

import 'dart:core'; 
import 'dart:mirrors'; 
import 'Foo.dart';  

main() { 
   Symbol lib = new Symbol("foo_lib"); 
   Symbol clsToSearch = new Symbol("Foo");  
   reflect_InstanceMethods(lib, clsToSearch); 
}  
void reflect_InstanceMethods(Symbol libraryName, Symbol className) { 
   MirrorSystem mirrorSystem = currentMirrorSystem(); 
   LibraryMirror libMirror = mirrorSystem.findLibrary(libraryName); 
   
   if (libMirror != null) { 
      print("Found Library"); 
      print("checkng...class details.."); 
      print("No of classes found is : ${libMirror.declarations.length}"); 
      libMirror.declarations.forEach((s, d) => print(s));  
      
      if (libMirror.declarations.containsKey(className)) print("found class");
      ClassMirror classMirror = libMirror.declarations[className]; 
      
      print("No of instance methods found is ${classMirror.instanceMembers.length}");
      classMirror.instanceMembers.forEach((s, v) => print(s)); 
   } 
}

Bu kod aşağıdakileri üretmelidir output -

Found Library 
checkng...class details.. 
No of classes found is : 1 
Symbol("Foo") 
found class 
No of instance methods found is 8 
Symbol("==") 
Symbol("hashCode") 
Symbol("toString") 
Symbol("noSuchMethod") 
Symbol("runtimeType") 
Symbol("m1") 
Symbol("m2") 
Symbol("m3")

Sembolü Dizeye Dönüştür

Bir sembolde depolanan sınıf veya kitaplık gibi bir türün adını kullanarak dizeye geri dönüştürebilirsiniz. MirrorSystemsınıf. Aşağıdaki kod, bir sembolü bir dizeye nasıl dönüştürebileceğinizi gösterir.

import 'dart:mirrors'; 
void main(){ 
   Symbol lib = new Symbol("foo_lib"); 
   String name_of_lib = MirrorSystem.getName(lib); 
   
   print(lib); 
   print(name_of_lib); 
}

Aşağıdakileri üretmelidir output -

Symbol("foo_lib")   

foo_lib

Dizeler bir dizi karakterdir. Dart, dizeleri Unicode UTF-16 kod birimleri dizisi olarak temsil eder. Unicode, her harf, rakam ve sembol için benzersiz bir sayısal değer tanımlayan bir formattır.

Dart dizesi, UTF-16 kod birimleri dizisi olduğundan, bir dizedeki 32 bit Unicode değerleri özel bir sözdizimi kullanılarak temsil edilir. Birrune bir Unicode kod noktasını temsil eden bir tamsayıdır.

String sınıfı dart:core kütüphane erişim için mekanizmalar sağlar runes. Dize kodu birimlerine / runlarına üç şekilde erişilebilir -

  • String.codeUnitAt () işlevini kullanma
  • String.codeUnits özelliğini kullanma
  • String.runes özelliğini kullanma

String.codeUnitAt () Fonksiyonu

Bir dizedeki kod birimlerine dizinleri aracılığıyla erişilebilir. Verilen dizindeki 16 bit UTF-16 kod birimini döndürür.

Sözdizimi

String.codeUnitAt(int index);

Misal

import 'dart:core'; 
void main(){ 
   f1(); 
} 
f1() { 
   String x = 'Runes'; 
   print(x.codeUnitAt(0)); 
}

Aşağıdakileri üretecek output -

82

String.codeUnits Özelliği

Bu özellik, belirtilen dizenin UTF-16 kod birimlerinin değiştirilemez bir listesini döndürür.

Sözdizimi

String. codeUnits;

Misal

import 'dart:core';  
void main(){ 
   f1(); 
}  
f1() { 
   String x = 'Runes'; 
   print(x.codeUnits); 
}

Aşağıdakileri üretecek output -

[82, 117, 110, 101, 115]

String.runes Özelliği

Bu özellik, bunun Unicode kod noktalarının yinelenebilir bir string.Runes yinelenebilirliği genişletir.

Sözdizimi

String.runes

Misal

void main(){ 
   "A string".runes.forEach((int rune) { 
      var character=new String.fromCharCode(rune); 
      print(character); 
   });  
}

Aşağıdakileri üretecek output -

A 
s 
t 
r 
i 
n 
g

Unicode kod noktaları genellikle şu şekilde ifade edilir: \uXXXXburada XXXX, 4 basamaklı onaltılık bir değerdir. 4'ten fazla veya az onaltılık basamak belirtmek için, değeri süslü parantez içine yerleştirin. Dart: core kitaplığındaki Runes sınıfının yapıcısı aynı şekilde kullanılabilir.

Misal

main() { 
   Runes input = new Runes(' \u{1f605} '); 
   print(new String.fromCharCodes(input)); 
}

Aşağıdakileri üretecek output -

Adlandırılmış sabit değerleri tanımlamak için bir numaralandırma kullanılır. Numaralandırılmış bir tür,enum anahtar kelime.

Sözdizimi

enum enum_name {  
   enumeration list 
}

Nerede,

  • Enum_name numaralandırma türü adını belirtir
  • Numaralandırma Listesi tanımlayıcıları virgülle ayrılmış bir liste

Numaralandırma listesindeki sembollerin her biri, kendisinden önce gelen sembolden büyük olan bir tamsayı değerini ifade eder. Varsayılan olarak, ilk numaralandırma sembolünün değeri 0'dır.

Örneğin

enum Status { 
   none, 
   running, 
   stopped, 
   paused 
}

Misal

enum Status { 
   none, 
   running, 
   stopped, 
   paused 
}  
void main() { 
   print(Status.values); 
   Status.values.forEach((v) => print('value: $v, index: ${v.index}')); print('running: ${Status.running}, ${Status.running.index}'); print('running index: ${Status.values[1]}'); 
}

Aşağıdakileri üretecek output -

[Status.none, Status.running, Status.stopped, Status.paused] 
value: Status.none, index: 0 
value: Status.running, index: 1 
value: Status.stopped, index: 2 
value: Status.paused, index: 3 
running: Status.running, 1 
running index: Status.running

İşlevler, okunabilir, bakımı yapılabilir ve yeniden kullanılabilir kodun yapı taşlarıdır. Bir işlev, belirli bir görevi yerine getirmek için bir dizi deyimdir. Fonksiyonlar, programı mantıksal kod blokları halinde düzenler. Tanımlandıktan sonra, işlevler erişim koduna çağrılabilir. Bu, kodu yeniden kullanılabilir hale getirir. Ayrıca, işlevler programın kodunu okumayı ve korumayı kolaylaştırır.

Bir işlev bildirimi, derleyiciye bir işlevin adı, dönüş türü ve parametreleri hakkında bilgi verir. Bir işlev tanımı, işlevin gerçek gövdesini sağlar.

Sr.No Fonksiyonlar ve Açıklama
1 Bir Fonksiyonun Tanımlanması

Bir işlev tanımı, belirli bir görevin ne ve nasıl yapılacağını belirtir.

2 Bir Fonksiyon Çağırma

Çalıştırmak için bir işlev çağrılmalıdır.

3 Geri Dönen İşlevler

Fonksiyonlar ayrıca kontrol ile birlikte arayana geri dönebilir.

4 Parametreli Fonksiyon

Parametreler, değerleri işlevlere iletmek için bir mekanizmadır.

Opsiyonel Parametreler

Bir işlevin yürütülmesi için bağımsız değişkenlerin zorunlu olarak aktarılması gerekmediğinde isteğe bağlı parametreler kullanılabilir. Bir parametre, adına bir soru işareti eklenerek isteğe bağlı olarak işaretlenebilir. İsteğe bağlı parametre, bir işlevdeki son bağımsız değişken olarak ayarlanmalıdır.

Dart'ta üç tür isteğe bağlı parametremiz var -

Sr.No Parametre ve Açıklama
1 İsteğe Bağlı Konumsal Parametre

İsteğe bağlı konumsal parametreleri belirtmek için köşeli [] parantezleri kullanın.

2 İsteğe bağlı adlandırılmış parametre

Konumsal parametrelerin aksine, parametrenin adı değer iletilirken belirtilmelidir. Küme ayracı {}, isteğe bağlı adlandırılmış parametreleri belirtmek için kullanılabilir.

3 Varsayılan Değerlere Sahip İsteğe Bağlı Parametreler

İşlev parametrelerine varsayılan olarak değerler de atanabilir. Bununla birlikte, bu tür parametreler ayrıca açıkça geçirilen değerler olabilir.

Yinelemeli Dart İşlevleri

Özyineleme, bir sonuca ulaşana kadar kendisine bir işlev çağrısı yaparak bir işlemi yineleme tekniğidir. Özyineleme en iyi, aynı işlevi bir döngü içinden farklı parametrelerle tekrar tekrar çağırmanız gerektiğinde uygulanır.

Misal

void main() { 
   print(factorial(6));
}  
factorial(number) { 
   if (number <= 0) {         
      // termination case 
      return 1; 
   } else { 
      return (number * factorial(number - 1));    
      // function invokes itself 
   } 
}

Aşağıdakileri üretmelidir output -

720

Lambda İşlevleri

Lambda işlevleri, işlevleri temsil eden özlü bir mekanizmadır. Bu işlevler, Ok işlevleri olarak da adlandırılır.

Sözdizimi

[return_type]function_name(parameters)=>expression;

Misal

void main() { 
   printMsg(); 
   print(test()); 
}  
printMsg()=>
print("hello"); 

int test()=>123;                       
// returning function

Aşağıdakileri üretmelidir output -

hello 123

Bir interfaceherhangi bir varlığın uyması gereken sözdizimini tanımlar. Arayüzler, bir nesnede bulunan bir dizi yöntemi tanımlar. Dart, arabirimleri bildirmek için bir sözdizimine sahip değildir. Sınıf bildirimleri, Dart'taki arayüzlerdir.

Classesbir arabirimi kullanabilmek için implements anahtar sözcüğünü kullanmalıdır. Uygulayıcı sınıfın, uygulanan arayüzün tüm işlevlerinin somut bir uygulamasını sağlaması zorunludur. Başka bir deyişle, bir sınıf, uygulamak istediği arayüzdeki her işlevi yeniden tanımlamalıdır.

Sözdizimi: Bir Arayüz Uygulama

class identifier implements interface_name

Misal

Aşağıdaki programda bir sınıf tanımlıyoruz Printer. ConsolePrinter sınıf, için örtük arabirim bildirimini uygular Printersınıf. main fonksiyonun bir nesnesini yaratır ConsolePrinter kullanarak sınıf newanahtar kelime. Bu nesne işlevi çağırmak için kullanılırprint_data tanımlanmış ConsolePrinter sınıf.

void main() { 
   ConsolePrinter cp= new ConsolePrinter(); 
   cp.print_data(); 
}  
class Printer { 
   void print_data() { 
      print("__________Printing Data__________"); 
   } 
}  
class ConsolePrinter implements Printer { 
   void print_data() {  
      print("__________Printing to Console__________"); 
   } 
}

Aşağıdakileri üretmelidir output -

__________Printing to Console__________

Birden Çok Arayüz Uygulama

Bir sınıf birden çok arabirim uygulayabilir. Arayüzler virgülle ayrılmıştır. syntax aynısı aşağıda verilmiştir -

class identifier implements interface-1,interface_2,interface_4…….

Aşağıdaki example Dart'ta birden çok arayüzü nasıl uygulayabileceğinizi gösterir -

void main() { 
   Calculator c = new Calculator(); 
   print("The gross total : ${c.ret_tot()}"); print("Discount :${c.ret_dis()}"); 
}  
class Calculate_Total { 
   int ret_tot() {} 
}  
class Calculate_Discount { 
   int ret_dis() {} 
}
class Calculator  implements Calculate_Total,Calculate_Discount { 
   int ret_tot() { 
      return 1000; 
   } 
   int ret_dis() { 
      return 50; 
   } 
}

Aşağıdakileri üretmelidir output -

The gross total: 1000 
Discount:50

Dart, nesne yönelimli bir dildir. Sınıflar, arayüzler vb. Gibi nesne yönelimli programlama özelliklerini destekler.classOOP açısından, nesneler oluşturmak için bir plandır. Birclassnesneye ilişkin verileri kapsüller. Dart, adı verilen bu kavram için yerleşik destek sağlarclass.

Bir Sınıf Bildirmek

Kullan class bildirmek için anahtar kelime classDart'ta. Bir sınıf tanımı, anahtar kelime sınıfı ile başlar ve onu takip edenclass name; ve bir çift kaşlı ayraç içine alınmış sınıf gövdesi. Aynı sözdizimi aşağıda verilmiştir -

Sözdizimi

class class_name {  
   <fields> 
   <getters/setters> 
   <constructors> 
   <functions> 
}

classanahtar sözcüğün ardından sınıf adı gelir. Bir sınıfı adlandırırken tanımlayıcılara ilişkin kurallar dikkate alınmalıdır.

Bir sınıf tanımı aşağıdakileri içerebilir -

  • Fields- Alan, bir sınıfta belirtilen herhangi bir değişkendir. Alanlar, nesnelerle ilgili verileri temsil eder.

  • Setters and Getters- Programın bir sınıfın alanlarının değerlerini başlatmasına ve almasına izin verir. Varsayılan bir alıcı / ayarlayıcı, her sınıfla ilişkilendirilir. Bununla birlikte, bir ayarlayıcı / alıcı açıkça tanımlanarak varsayılan olanlar geçersiz kılınabilir.

  • Constructors - sınıfın nesneleri için bellek ayırmaktan sorumludur.

  • Functions- İşlevler, bir nesnenin gerçekleştirebileceği eylemleri temsil eder. Bazen yöntemler olarak da adlandırılırlar.

Bir araya getirilen bu bileşenler, data members sınıfın.

Örnek: Bir sınıf bildirmek

class Car {  
   // field 
   String engine = "E1001";  
   
   // function 
   void disp() { 
      print(engine); 
   } 
}

Örnek bir sınıf bildiriyor Car. Sınıfın adlı bir alanı varengine. disp() alanın değerini yazdıran basit bir işlevdir engine.

Sınıfın Örneğini Oluşturma

Sınıfın bir örneğini oluşturmak için, newanahtar kelime ve ardından sınıf adı. Aynı sözdizimi aşağıda verilmiştir -

Sözdizimi

var object_name = new class_name([ arguments ])
  • new anahtar kelime somutlaştırmadan sorumludur.

  • İfadenin sağ tarafı kurucuyu çağırır. Yapıcı, parametreleştirilmişse değerler geçirilmelidir.

Örnek: Bir sınıfın somutlaştırılması

var obj = new Car("Engine 1")

Niteliklere ve İşlevlere Erişim

Bir sınıfın özniteliklerine ve işlevlerine nesne aracılığıyla erişilebilir. Kullan '.' nokta notasyonu (olarak adlandırılırperiod) bir sınıfın veri üyelerine erişmek için.

//accessing an attribute 
obj.field_name  

//accessing a function 
obj.function_name()

Misal

Dart'ta özniteliklere ve işlevlere nasıl erişileceğini anlamak için aşağıdaki örneğe bir göz atın -

void main() { 
   Car c= new Car(); 
   c.disp(); 
}  
class Car {  
   // field 
   String engine = "E1001";  
   
   // function 
   void disp() { 
      print(engine); 
   } 
}

output Yukarıdaki kod aşağıdaki gibidir -

E1001

Dart Oluşturucuları

Yapıcı, sınıfın değişkenlerini başlatmaktan sorumlu olan sınıfın özel bir işlevidir. Dart, sınıfınki ile aynı ada sahip bir kurucu tanımlar. Yapıcı bir işlevdir ve dolayısıyla parametreleştirilebilir. Ancak, bir işlevden farklı olarak, yapıcıların bir dönüş türü olamaz. Bir kurucu bildirmezseniz, varsayılanno-argument constructor sizin için sağlanmıştır.

Sözdizimi

Class_name(parameter_list) { 
   //constructor body 
}

Misal

Aşağıdaki örnek, Dart'ta yapıcıların nasıl kullanılacağını gösterir -

void main() { 
   Car c = new Car('E1001'); 
} 
class Car { 
   Car(String engine) { 
      print(engine); 
   } 
}

Aşağıdakileri üretmelidir output -

E1001

İsimli Oluşturucular

Dart sağlar named constructors bir sınıfı etkinleştirmek için multiple constructors. Adlandırılmış kurucuların sözdizimi aşağıda verildiği gibidir -

Sözdizimi: Yapıcıyı tanımlama

Class_name.constructor_name(param_list)

Misal

Aşağıdaki örnek, adlandırılmış yapıcıları Dart'ta nasıl kullanabileceğinizi gösterir -

void main() {           
   Car c1 = new Car.namedConst('E1001');                                       
   Car c2 = new Car(); 
}           
class Car {                   
   Car() {                           
      print("Non-parameterized constructor invoked");
   }                                   
   Car.namedConst(String engine) { 
      print("The engine is : ${engine}");    
   }                               
}

Aşağıdakileri üretmelidir output -

The engine is : E1001 
Non-parameterized constructor invoked

Bu Anahtar Kelime

thisanahtar kelime, sınıfın mevcut örneğini ifade eder. Burada, sınıfın alanının parametre adı ve adı aynıdır. Dolayısıyla, belirsizliği önlemek için, sınıfın alanına ön ek olarakthisanahtar kelime. Aşağıdaki örnek aynı şeyi açıklıyor -

Misal

Aşağıdaki örnek, nasıl kullanılacağını açıklamaktadır. this Dart'ta anahtar kelime -

void main() { 
   Car c1 = new Car('E1001'); 
}  
class Car { 
   String engine; 
   Car(String engine) { 
      this.engine = engine; 
      print("The engine is : ${engine}"); 
   } 
}

Aşağıdakileri üretmelidir output -

The engine is : E1001

Dart Sınıfı ─ Getters ve Setters

Getters ve Settersolarak da adlandırılır accessors ve mutators, programın sırasıyla sınıf alanlarının değerlerini başlatmasına ve almasına izin verin. Toplayıcılar veya erişimciler,getanahtar kelime. Ayarlayıcılar veya mutatörler,set anahtar kelime.

Varsayılan bir alıcı / ayarlayıcı, her sınıfla ilişkilendirilir. Bununla birlikte, bir ayarlayıcı / alıcı açıkça tanımlanarak varsayılan olanlar geçersiz kılınabilir. Alıcının parametresi yoktur ve bir değer döndürür ve ayarlayıcının bir parametresi vardır ve bir değer döndürmez.

Sözdizimi: Alıcı tanımlama

Return_type  get identifier 
{ 
}

Sözdizimi: Bir ayarlayıcı tanımlama

set identifier 
{ 
}

Misal

Aşağıdaki örnek, nasıl kullanabileceğinizi gösterir. getters ve setters Dart sınıfında -

class Student { 
   String name; 
   int age; 
    
   String get stud_name { 
      return name; 
   } 
    
   void set stud_name(String name) { 
      this.name = name; 
   } 
   
   void set stud_age(int age) { 
      if(age<= 0) { 
        print("Age should be greater than 5"); 
      }  else { 
         this.age = age; 
      } 
   } 
   
   int get stud_age { 
      return age;     
   } 
}  
void main() { 
   Student s1 = new Student(); 
   s1.stud_name = 'MARK'; 
   s1.stud_age = 0; 
   print(s1.stud_name); 
   print(s1.stud_age); 
}

Bu program kodu aşağıdakileri üretmelidir output -

Age should be greater than 5 
MARK 
Null

Sınıf Mirası

Dart, bir programın mevcut bir sınıftan yeni sınıflar oluşturma yeteneği olan Miras kavramını destekler. Daha yeni sınıflar oluşturmak için genişletilen sınıfa ana sınıf / süper sınıf denir. Yeni oluşturulan sınıflara alt / alt sınıflar denir.

Bir sınıf, 'extends' anahtar sözcüğünü kullanarak başka bir sınıftan miras alır. Child classes inherit all properties and methods except constructors from the parent class.

Sözdizimi

class child_class_name extends parent_class_name

Note - Dart çoklu mirası desteklemez.

Örnek: Sınıf Mirası

Aşağıdaki örnekte, bir sınıf bildiriyoruz Shape. Sınıf,Circlesınıf. Sınıflar arasında kalıtım ilişkisi olduğu için alt sınıf yani sınıfCar üst sınıf veri üyesine örtük bir erişim alır.

void main() { 
   var obj = new Circle(); 
   obj.cal_area(); 
}  
class Shape { 
   void cal_area() { 
      print("calling calc area defined in the Shape class"); 
   } 
}  
class Circle extends Shape {}

Aşağıdakileri üretmelidir output -

calling calc area defined in the Shape class

Kalıtım Türleri

Kalıtım, aşağıdaki üç türde olabilir -

  • Single - Her sınıf en fazla bir ebeveyn sınıfından genişletilebilir.

  • Multiple- Bir sınıf, birden çok sınıftan miras alabilir. Dart, çoklu mirası desteklemez.

  • Multi-level - Bir sınıf başka bir alt sınıftan miras alabilir.

Misal

Aşağıdaki örnek, çok düzeyli devralmanın nasıl çalıştığını gösterir -

void main() { 
   var obj = new Leaf(); 
   obj.str = "hello"; 
   print(obj.str); 
}  
class Root { 
   String str; 
}  
class Child extends Root {}  
class Leaf extends Child {}  
//indirectly inherits from Root by virtue of inheritance

Sınıf LeafÖznitelikleri çok düzeyli miras yoluyla Kök ve Çocuk sınıflarından türetir. Onunoutput aşağıdaki gibidir -

hello

Dart - Sınıf Mirası ve Yöntemi Geçersiz Kılma

Yöntemi Geçersiz Kılma, alt sınıfın kendi üst sınıfındaki bir yöntemi yeniden tanımladığı bir mekanizmadır. Aşağıdaki örnek aynı şeyi göstermektedir -

Misal

void main() { 
   Child c = new Child(); 
   c.m1(12); 
} 
class Parent { 
   void m1(int a){ print("value of a ${a}");} } class Child extends Parent { @override void m1(int b) { print("value of b ${b}"); 
   } 
}

Aşağıdakileri üretmelidir output -

value of b 12

Yöntemi geçersiz kılarken işlev parametrelerinin sayısı ve türü eşleşmelidir. Parametrelerin sayısında veya veri türünde bir uyumsuzluk olması durumunda, Dart derleyicisi bir hata atar. Aşağıdaki çizim aynı şeyi açıklamaktadır -

import 'dart:io'; 
void main() { 
   Child c = new Child(); 
   c.m1(12); 
} 
class Parent { 
   void m1(int a){ print("value of a ${a}");} } class Child extends Parent { @override void m1(String b) { print("value of b ${b}");
   } 
}

Aşağıdakileri üretmelidir output -

value of b 12

Statik Anahtar Kelime

static anahtar kelime bir sınıfın veri üyelerine uygulanabilir, yani, fields ve methods. Statik bir değişken, program yürütmeyi bitirene kadar değerlerini korur. Statik üyelere sınıf adıyla başvurulur.

Misal

class StaticMem { 
   static int num;  
   static disp() { 
      print("The value of num is ${StaticMem.num}")  ; 
   } 
}  
void main() { 
   StaticMem.num = 12;  
   // initialize the static variable } 
   StaticMem.disp();   
   // invoke the static method 
}

Aşağıdakileri üretmelidir output -

The value of num is 12

Süper Anahtar Kelime

superanahtar kelime, bir sınıfın yakın ebeveynini belirtmek için kullanılır. Anahtar kelime, bir süper sınıf versiyonuna atıfta bulunmak için kullanılabilir.variable, property, veya method. Aşağıdaki örnek aynı şeyi göstermektedir -

Misal

void main() { 
   Child c = new Child(); 
   c.m1(12); 
} 
class Parent { 
   String msg = "message variable from the parent class"; 
   void m1(int a){ print("value of a ${a}");} 
} 
class Child extends Parent { 
   @override 
   void m1(int b) { 
      print("value of b ${b}"); super.m1(13); print("${super.msg}")   ; 
   } 
}

Aşağıdakileri üretmelidir output -

value of b 12 
value of a 13 
message variable from the parent class

Nesne Tabanlı Programlama, bir nesneyi "tanımlanmış bir sınırı olan herhangi bir varlık" olarak tanımlar. Bir nesne aşağıdakilere sahiptir -

  • State- Nesneyi açıklar. Bir sınıfın alanları nesnenin durumunu temsil eder.

  • Behavior - Bir nesnenin neler yapabileceğini açıklar.

  • Identity- Bir nesneyi bir dizi benzer diğer nesneden ayıran benzersiz bir değer. İki veya daha fazla nesne durumu ve davranışı paylaşabilir ancak kimliği paylaşamaz.

Dönem operatörü (.) bir sınıfın veri üyelerine erişmek için nesne ile birlikte kullanılır.

Misal

Dart, verileri nesneler biçiminde temsil eder. Dart'taki her sınıf, Object sınıfını genişletir. Aşağıda, bir nesneyi oluşturmanın ve kullanmanın basit bir örneği verilmiştir.

class Student { 
   void test_method() { 
      print("This is a  test method"); 
   } 
   
   void test_method1() { 
      print("This is a  test method1"); 
   } 
}  
void main()    { 
   Student s1 = new Student(); 
   s1.test_method(); 
   s1.test_method1(); 
}

Aşağıdakileri üretmelidir output -

This is a test method 
This is a test method1

Cascade operatörü (..)

Yukarıdaki örnek, sınıftaki yöntemleri çağırır. Bununla birlikte, bir işlev her çağrıldığında, nesneye bir başvuru yapılması gerekir. cascade operator bir dizi çağrının olduğu durumlarda bir kısaltma olarak kullanılabilir.

Kademeli (..) operatörü, bir nesne aracılığıyla bir dizi çağrı yayınlamak için kullanılabilir. Yukarıdaki örnek aşağıdaki şekilde yeniden yazılabilir.

class Student { 
   void test_method() { 
      print("This is a  test method"); 
   } 
   
   void test_method1() { 
      print("This is a  test method1"); 
   } 
}  
void main() { 
   new Student() 
   ..test_method() 
   ..test_method1(); 
}

Aşağıdakileri üretmelidir output -

This is a test method 
This is a test method1

ToString () yöntemi

Bu işlev, bir nesnenin dizgi temsilini döndürür. Nasıl kullanılacağını anlamak için aşağıdaki örneğe bir göz atın.toString yöntem.

void main() { 
   int n = 12; 
   print(n.toString()); 
}

Aşağıdakileri üretmelidir output -

12

Dart, diğer programlama dillerinden farklı olarak dizileri desteklemez. Dart koleksiyonları, bir dizi gibi veri yapılarını kopyalamak için kullanılabilir. Dart: core kitaplığı ve diğer sınıflar, Dart komut dosyalarında Koleksiyon desteğini etkinleştirir.

Dart koleksiyonları temelde şu şekilde sınıflandırılabilir:

Sr.No Dart koleksiyonu ve açıklaması
1 Liste

Liste, basitçe sıralı bir nesne grubudur. dart:core kütüphane, listelerin oluşturulmasını ve değiştirilmesini sağlayan List sınıfını sağlar.

  • Fixed Length List - Listenin uzunluğu çalışma zamanında değiştirilemez.

  • Growable List - Listenin uzunluğu çalışma zamanında değişebilir.

2 Ayarlamak

Set, her bir nesnenin yalnızca bir kez gerçekleşebileceği bir nesneler koleksiyonunu temsil eder. Dart: core kitaplığı, Set sınıfının aynısını uygulamasını sağlar.

3 Haritalar

Harita nesnesi basit bir anahtar / değer çiftidir. Bir haritadaki anahtarlar ve değerler herhangi bir türde olabilir. Harita dinamik bir koleksiyondur. Başka bir deyişle, Haritalar çalışma zamanında büyüyebilir ve küçülebilir. Dart: core kitaplığındaki Map sınıfı, aynı desteği sağlar.

4 Kuyruk

Kuyruk, her iki uçta da manipüle edilebilen bir koleksiyondur. İlk giren ilk çıkar bir koleksiyon oluşturmak istediğinizde kuyruklar kullanışlıdır. Basitçe söylemek gerekirse, kuyruk bir uçtan veri ekler ve diğer uçtan siler. Değerler yerleştirildikleri sıraya göre kaldırılır / okunur.

Koleksiyonlar Yineleniyor

Iterator sınıfı dart:corekütüphane, koleksiyon geçişini kolaylaştırır. Her koleksiyonun biriteratorEmlak. Bu özellik, koleksiyondaki nesnelere işaret eden bir yineleyici döndürür.

Misal

Aşağıdaki örnek, bir yineleyici nesnesi kullanarak bir koleksiyonun geçişini gösterir.

import 'dart:collection'; 
void main() { 
   Queue numQ = new Queue(); 
   numQ.addAll([100,200,300]);  
   Iterator i= numQ.iterator; 
   
   while(i.moveNext()) { 
      print(i.current); 
   } 
}

moveNext()işlevi, sonraki bir girdi olup olmadığını gösteren bir Boolean değeri döndürür. current yineleyici nesnesinin özelliği, yineleyicinin o anda işaret ettiği nesnenin değerini döndürür.

Bu program aşağıdakileri üretmelidir output -

100 
200 
300

Dart bir optionally typed language. Dart'taki koleksiyonlar varsayılan olarak heterojendir. Diğer bir deyişle, tek bir Dart koleksiyonu çeşitli türlerdeki değerleri barındırabilir. Bununla birlikte, homojen değerleri tutmak için bir Dart koleksiyonu yapılabilir. Jenerik kavramı aynı şeyi başarmak için kullanılabilir.

Generics kullanımı, koleksiyon tarafından içerilebilecek değerlerin veri türü üzerinde bir kısıtlama uygular. Bu tür koleksiyonlar, tür açısından güvenli koleksiyonlar olarak adlandırılır. Tip güvenliği, bir bellek bloğunun yalnızca belirli bir veri türüne ait verileri içermesini sağlayan bir programlama özelliğidir.

Tüm Dart koleksiyonları, jenerikler aracılığıyla tür güvenliği uygulamasını destekler. Veri türünü içeren bir çift köşeli parantez, tür açısından güvenli bir koleksiyon bildirmek için kullanılır. Tür açısından güvenli bir koleksiyon bildirmek için sözdizimi aşağıda verildiği gibidir.

Sözdizimi

Collection_name <data_type> identifier= new Collection_name<data_type>

List, Map, Set ve Queue'nun tür güvenli uygulamaları aşağıda verilmiştir. Bu özellik ayrıca yukarıda belirtilen koleksiyon türlerinin tüm uygulamaları tarafından desteklenir.

Örnek: Genel Liste

void main() { 
   List <String> logTypes = new List <String>(); 
   logTypes.add("WARNING"); 
   logTypes.add("ERROR"); 
   logTypes.add("INFO");  
   
   // iterating across list 
   for (String type in logTypes) { 
      print(type); 
   } 
}

Aşağıdakileri üretmelidir output -

WARNING 
ERROR 
INFO

Belirtilen türden farklı bir değer girme girişimi bir derleme hatasıyla sonuçlanacaktır. Aşağıdaki örnek bunu göstermektedir.

Misal

void main() { 
   List <String> logTypes = new List <String>(); 
   logTypes.add(1); 
   logTypes.add("ERROR"); 
   logTypes.add("INFO"); 
  
   //iterating across list 
   for (String type in logTypes) { 
      print(type); 
   } 
}

Aşağıdakileri üretmelidir output -

1                                                                                     
ERROR                                                                             
INFO

Örnek: Genel Küme

void main() { 
   Set <int>numberSet = new  Set<int>(); 
   numberSet.add(100); 
   numberSet.add(20); 
   numberSet.add(5); 
   numberSet.add(60);
   numberSet.add(70); 
   
   // numberSet.add("Tom"); 
   compilation error; 
   print("Default implementation  :${numberSet.runtimeType}");  
   
   for(var no in numberSet) { 
      print(no); 
   } 
}

Aşağıdakileri üretmelidir output -

Default implementation :_CompactLinkedHashSet<int> 
100 
20 
5 
60 
70

Örnek: Genel Kuyruk

import 'dart:collection'; 
void main() { 
   Queue<int> queue = new Queue<int>(); 
   print("Default implementation ${queue.runtimeType}");  
   queue.addLast(10); 
   queue.addLast(20); 
   queue.addLast(30); 
   queue.addLast(40); 
   queue.removeFirst();  
   
   for(int no in queue){ 
      print(no); 
   } 
}

Aşağıdakileri üretmelidir output -

Default implementation ListQueue<int> 
20 
30 
40

Genel Harita

Tür açısından güvenli bir harita bildirimi, veri türlerini belirtir -

  • Anahtar
  • Değer

Sözdizimi

Map <Key_type, value_type>

Misal

void main() { 
   Map <String,String>m={'name':'Tom','Id':'E1001'}; 
   print('Map :${m}'); 
}

Aşağıdakileri üretmelidir output -

Map :{name: Tom, Id: E1001}

Bir paket, bir grup programlama birimini içine alan bir mekanizmadır. Uygulamalar bazen bazı üçüncü taraf kitaplıklarının veya eklentilerinin entegrasyonuna ihtiyaç duyabilir. Her dilin Java için Maven veya Gradle, .NET için Nuget, Node.js için npm vb. Gibi harici paketleri yönetmek için bir mekanizması vardır. Dart için paket yöneticisipub.

Pub, depodaki paketlerin kurulmasına yardımcı olur. Barındırılan paketlerin deposu şu adreste bulunabilir:https://pub.dartlang.org/.

package metadata bir dosyada tanımlanır, pubsec.yaml. YAML kısaltmasıdırYet Another Markup Language. pub aracı, bir uygulamanın gerektirdiği tüm çeşitli kitaplıkları indirmek için kullanılabilir.

Her Dart uygulamasında bir pubspec.yaml Diğer kitaplıklara uygulama bağımlılıklarını ve uygulama adı, yazar, sürüm ve açıklama gibi uygulamaların meta verilerini içeren dosya.

Bir içeriği pubspec.yaml dosya şunun gibi görünmelidir -

name: 'vector_victor' 
version: 0.0.1 
description: An absolute bare-bones web app. 
... 
dependencies: browser: '>=0.10.0 <0.11.0'

Önemli pub commands aşağıdaki gibidir -

Sr.No Komut ve Açıklama
1

‘pub get’

Uygulamanızın bağlı olduğu tüm paketleri almanıza yardımcı olur.

2

‘pub upgrade’

Tüm bağımlılıklarınızı daha yeni bir sürüme yükseltir.

3

‘pub build’

Bu, web uygulamanızı oluşturmak için kullanılır ve içindeki tüm ilgili komut dosyalarını içeren bir yapı klasörü oluşturur.

4

‘pub help’

Bu size tüm farklı pub komutları için yardımcı olacaktır.

WebStorm gibi bir IDE kullanıyorsanız, tüm komutları doğrudan almak için pubspec.yaml'ye sağ tıklayabilirsiniz -

Bir Paketin Kurulması

Bir uygulamanın xml'yi ayrıştırması gereken bir örnek düşünün. Dart XML, XML belgelerini ayrıştırmak, incelemek, sorgulamak ve oluşturmak için açık kaynaklı ve kararlı olan hafif bir kitaplıktır.

Söz konusu görevi gerçekleştirme adımları aşağıdaki gibidir -

Step 1 - Aşağıdakileri pubsec.yaml dosyasına ekleyin.

name: TestApp 
version: 0.0.1 
description: A simple console application. 
#dependencies: 
#  foo_bar: '>=1.0.0 <2.0.0' 
dependencies: https://mail.google.com/mail/u/0/images/cleardot.gif
xml:

Sağ tıklayın pubsec.yamlve bağımlılıklar edinin. Bu dahili olarak ateşleyecekpub get command Aşağıda gösterildiği gibi.

İndirilen paketler ve bağımlı paketler, paketler klasörü altında doğrulanabilir.

Kurulum şimdi tamamlandığı için, dart xmlProjede. Sözdizimi aşağıdaki gibidir -

import 'package:xml/xml.dart' as xml;

XML Dizesini Oku

XML dizesini okumak ve girişi doğrulamak için, Dart XML bir parse()yöntem. Sözdizimi aşağıdaki gibidir -

xml.parse(String input):

Örnek: XML Dizgi Girdisini Ayrıştırma

Aşağıdaki örnek, XML dizesi girdisinin nasıl ayrıştırılacağını gösterir -

import 'package:xml/xml.dart' as xml; 
void main(){ 
   print("xml"); 
   var bookshelfXml = '''<?xml version = "1.0"?> 
   <bookshelf> 
      <book> 
         <title lang = "english">Growing a Language</title> 
         <price>29.99</price> 
      </book> 
      
      <book> 
         <title lang = "english">Learning XML</title> 
         <price>39.95</price> 
      </book> 
      <price>132.00</price> 
   </bookshelf>'''; 
   
   var document = xml.parse(bookshelfXml); 
   print(document.toString()); 
}

Aşağıdakileri üretmelidir output -

xml 
<?xml version = "1.0"?><bookshelf> 
   <book> 
      <title lang = "english">Growing a Language</title> 
      <price>29.99</price> 
   </book> 

   <book> 
      <title lang = "english">Learning XML</title> 
      <price>39.95</price> 
   </book> 
   <price>132.00</price> 
</bookshelf>

İstisna (veya istisnai olay), bir programın yürütülmesi sırasında ortaya çıkan bir sorundur. Bir İstisna oluştuğunda, programın normal akışı bozulur ve program / Uygulama anormal şekilde sona erer.

Yerleşik Dart istisnaları şunları içerir:

Sr.No İstisnalar ve Açıklama
1

DeferredLoadException

Ertelenmiş bir kitaplık yüklenemediğinde atılır.

2

FormatException

Bir dize veya diğer bazı veriler beklenen bir biçime sahip olmadığında ve ayrıştırılamadığında veya işlenemediğinde istisna atılır.

3

IntegerDivisionByZeroException

Bir sayı sıfıra bölündüğünde atılır.

4

IOException

Giriş-Çıkış ile ilgili tüm istisnalar için temel sınıf.

5

IsolateSpawnException

İzolat oluşturulamadığında atılır.

6

Timeout

Zaman uyumsuz bir sonuç beklenirken zamanlanmış bir zaman aşımı gerçekleştiğinde atılır.

Dart'taki her istisna, önceden tanımlanmış sınıfın bir alt türüdür Exception. Uygulamanın aniden sona ermesini önlemek için istisnalar ele alınmalıdır.

Try / on / catch Blocks

tryblock, muhtemelen bir istisnayla sonuçlanabilecek kodu yerleştirir. On blok, istisna türünün belirtilmesi gerektiğinde kullanılır. catch blok, işleyici istisna nesnesine ihtiyaç duyduğunda kullanılır.

try bloğun ardından tam olarak biri gelmelidir on / catch blok veya bir finallyblok (veya her ikisinden biri). Try bloğunda bir istisna meydana geldiğinde, kontrolcatch.

syntax bir istisnayı ele almak için aşağıda verilmiştir -

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // code for handling exception 
}  
catch Exception2 { 
   // code for handling exception 
}

Aşağıda hatırlanması gereken bazı noktalar verilmiştir -

  • Bir kod parçacığı, birden çok istisnayı işlemek için birden fazla on / catch bloğuna sahip olabilir.

  • On blok ve catch bloğu karşılıklı olarak kapsayıcıdır, yani bir try bloğu hem on block hem de catch bloğu ile ilişkilendirilebilir.

Aşağıdaki kod, Dart'ta istisna işlemeyi gösterir -

Örnek: ON Bloğunu Kullanma

Aşağıdaki program, değişkenlerle temsil edilen iki sayıyı böler x ve ysırasıyla. Kod, sıfıra bölmeye çalıştığı için bir istisna atar. on block bu istisnayı işleyecek kodu içerir.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
}

Aşağıdakileri üretmelidir output -

Cannot divide by zero

Örnek: catch Block kullanma

Aşağıdaki örnekte, yukarıdakiyle aynı kodu kullandık. Tek fark,catch block(ON bloğu yerine) burada istisnayı işleyecek kodu içerir. Parametresicatch çalışma zamanında atılan istisna nesnesini içerir.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try {  
      res = x ~/ y; 
   }  
   catch(e) { 
      print(e); 
   } 
}

Aşağıdakileri üretmelidir output -

IntegerDivisionByZeroException

Örnek: on… catch

Aşağıdaki örnek, nasıl kullanılacağını gösterir. on...catch blok.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try { 
      res = x ~/ y; 
   }  
   on IntegerDivisionByZeroException catch(e) { 
      print(e); 
   } 
}

Aşağıdakileri üretmelidir output -

IntegerDivisionByZeroException

Nihayet Blok

finallyblok, bir istisnanın oluşumuna bakılmaksızın yürütülmesi gereken kodu içerir. İsteğe bağlıfinally blok koşulsuz olarak çalıştırılır try/on/catch.

Kullanmak için sözdizimi finally blok aşağıdaki gibidir -

try { 
   // code that might throw an exception 
}  
on Exception1 { 
   // exception handling code 
}  
catch Exception2 { 
   //  exception handling 
}  
finally { 
   // code that should always execute; irrespective of the exception 
}

Aşağıdaki örnek, finally blok.

main() { 
   int x = 12; 
   int y = 0; 
   int res;  
   
   try { 
      res = x ~/ y; 
   } 
   on IntegerDivisionByZeroException { 
      print('Cannot divide by zero'); 
   } 
   finally { 
      print('Finally block executed'); 
   } 
}

Aşağıdakileri üretmelidir output -

Cannot divide by zero 
Finally block executed

Bir İstisna Oluşturma

throwanahtar kelime, açıkça bir istisna oluşturmak için kullanılır. Programın aniden çıkmasını önlemek için yükseltilmiş bir istisna ele alınmalıdır.

syntax açıkça bir istisna oluşturmak için -

throw new Exception_name()

Misal

Aşağıdaki örnek, nasıl kullanılacağını gösterir. throw istisna atmak için anahtar kelime -

main() { 
   try { 
      test_age(-2); 
   } 
   catch(e) { 
      print('Age cannot be negative'); 
   } 
}  
void test_age(int age) { 
   if(age<0) { 
      throw new FormatException(); 
   } 
}

Aşağıdakileri üretmelidir output -

Age cannot be negative

Özel İstisnalar

Yukarıda belirtildiği gibi, Dart'taki her istisna türü, yerleşik sınıfın bir alt türüdür Exception. Dart, mevcut olanları genişleterek özel istisnalar oluşturmaya olanak tanır. Özel bir istisna tanımlamak için sözdizimi aşağıda verildiği gibidir -

Sözdizimi: İstisnayı Tanımlama

class Custom_exception_Name implements Exception { 
   // can contain constructors, variables and methods 
}

Özel İstisnalar açıkça belirtilmeli ve aynısı kodda ele alınmalıdır.

Misal

Aşağıdaki örnek, özel bir özel durumun nasıl tanımlanacağını ve işleneceğini gösterir.

class AmtException implements Exception { 
   String errMsg() => 'Amount should be greater than zero'; 
}  
void main() { 
   try { 
      withdraw_amt(-1); 
   } 
   catch(e) { 
      print(e.errMsg()); 
   }  
finally { 
      print('Ending requested operation.....'); 
   } 
}  
void withdraw_amt(int amt) { 
   if (amt <= 0) { 
      throw new AmtException(); 
   } 
}

Yukarıdaki kodda, özel bir istisna tanımlıyoruz, AmtException. Geçilen miktar hariç tutulan aralıkta değilse, kod istisnayı yükseltir. main işlev, işlev çağrısını içine alır try...catch blok.

Kod aşağıdakileri üretmelidir output -

Amount should be greater than zero 
Ending requested operation....

Arada sırada geliştiriciler kodlama sırasında hatalar yaparlar. Bir programdaki hata, hata olarak adlandırılır. Hataları bulma ve düzeltme sürecine hata ayıklama adı verilir ve geliştirme sürecinin normal bir parçasıdır. Bu bölüm, hata ayıklama görevlerinde size yardımcı olabilecek araçları ve teknikleri kapsar.

WebStorm düzenleyicisi, kesme noktalarını ve adım adım hata ayıklamayı etkinleştirir. Program, kesme noktasının eklendiği noktada kesilecektir. Bu işlevsellik, Java veya C # uygulama geliştirmeden bekleyebileceğiniz gibidir. Değişkenleri izleyebilir, yığına göz atabilir, adım atabilir ve yöntem ve işlev çağrılarına adım atabilirsiniz, tümü WebStorm Düzenleyicisinden.

Kesme Noktası Ekleme

Aşağıdaki kod parçacığını düşünün. (TestString.dart)

void main() { 
   int a = 10, b = 20, c = 5; 
   c = c * c * c; 
   
   print("$a + $b = ${a+b}"); 
   print("$a%$b = ${a%b}"); // Add a break point here print("$a*$b = ${a*b}"); 
   print("$a/$b = ${a/b}"); 
   print(c); 
}

İçin add a breakpoint, sol kenar boşluğuna tıklayın. Aşağıda verilen şekilde 7 numaralı satırda bir kırılma noktası vardır.

Run the program in debug mode. Proje gezgininde TestString.dart durumumuzdaki dart programına sağ tıklayın.

Program hata ayıklama modunda çalıştığında, aşağıdaki ekran görüntüsünde gösterildiği gibi Hata Ayıklayıcı penceresini alacaksınız. Değişkenler sekmesi, geçerli bağlamdaki değişkenlerin değerlerini gösterir. Belirli değişkenler için izleyiciler ekleyebilir ve saatler penceresini kullanarak bu değer değişikliklerini dinleyebilirsiniz.

Step IntoHata ayıklama menüsündeki (F7) ok simgesi, her seferinde bir ifadeyi kodlamaya yardımcı olur. Ana yöntemler bir alt yordamı çağırırsa, bu da alt yordam koduna girecektir.

Step over (F8): Şuna benzer Step Into. Kullanımdaki fark, geçerli ifade bir alt yordama çağrı içerdiğinde ortaya çıkar. Ana yöntem bir alt yordamı çağırırsa, adım aşımı alt yordamı detaylandırmaz. alt rutini atlayacaktır.

Step Out(Shift + F8): Geçerli yürütme noktasının bulunduğu bir işlevin kalan satırlarını yürütür. Görüntülenen sonraki ifade, alt yordam çağrısını takip eden ifadedir.

Hata ayıklama modunda çalıştırdıktan sonra, program aşağıdakileri verir: output -

10 + 20 = 30 
10 % 20 = 10 
10 * 20 = 200 
10 / 20 = 0.5 
125

Bir typedefveya bir işlev türü takma ad, bellek içindeki çalıştırılabilir koda işaretçiler tanımlamaya yardımcı olur. Basitçe birtypedef bir işleve başvuran bir işaretçi olarak kullanılabilir.

Aşağıda verilen uygulama adımları typedefs Dart programında.

Step 1: Defining a typedef

Bir typedefbelirli işlevlerin eşleşmesini istediğimiz bir işlev imzasını belirtmek için kullanılabilir. Bir işlev imzası, bir işlevin parametreleri (türleri dahil) tarafından tanımlanır. Dönüş türü, işlev imzasının bir parçası değildir. Sözdizimi aşağıdaki gibidir.

typedef function_name(parameters)

Step 2: Assigning a Function to a typedef Variable

Değişken typedef ile aynı imzaya sahip herhangi bir işlevi işaret edebilir typedef. Bir fonksiyona bir işlev atamak için aşağıdaki imzayı kullanabilirsiniz.typedef değişken.

type_def  var_name = function_name

Step 3: Invoking a Function

typedefdeğişken işlevleri çağırmak için kullanılabilir. İşte bir işlevi nasıl çağırabileceğiniz -

var_name(parameters)

Misal

Şimdi daha fazlasını anlamak için bir örnek alalım typedef Dart'ta.

İlk önce bir tanımlayalım typedef. Burada bir fonksiyon imzası tanımlıyoruz. İşlev, türün iki giriş parametresini alacaktırinteger. Dönüş türü, işlev imzasının bir parçası değildir.

typedef ManyOperation(int firstNo , int secondNo); //function signature

Daha sonra fonksiyonları tanımlayalım. Aynı fonksiyon imzasına sahip bazı fonksiyonları tanımlayın.ManyOperation typedef.

Add(int firstNo,int second){ 
   print("Add result is ${firstNo+second}"); 
}  
Subtract(int firstNo,int second){ 
   print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Add result is ${firstNo/second}"); 
}

Son olarak, işlevi aracılığıyla çağıracağız typedef. ManyOperations türünde bir değişken bildirin. Fonksiyon adını beyan edilen değişkene atayın.

ManyOperation oper ;  

//can point to any method of same signature 
oper = Add; 
oper(10,20); 
oper = Subtract; 
oper(30,20); 
oper = Divide; 
oper(50,5);

operdeğişken, iki tamsayı parametresi alan herhangi bir yöntemi işaret edebilir. Addfonksiyonun referansı değişkene atanır. Yazı tipleri çalışma zamanında işlev referanslarını değiştirebilir

Şimdi tüm parçaları bir araya getirelim ve tüm programı görelim.

typedef ManyOperation(int firstNo , int secondNo); 
//function signature  

Add(int firstNo,int second){ 
   print("Add result is ${firstNo+second}"); } Subtract(int firstNo,int second){ print("Subtract result is ${firstNo-second}"); 
}
Divide(int firstNo,int second){ 
   print("Divide result is ${firstNo/second}"); 
}  
Calculator(int a, int b, ManyOperation oper){ 
   print("Inside calculator"); 
   oper(a,b); 
}  
void main(){ 
   ManyOperation oper = Add; 
   oper(10,20); 
   oper = Subtract; 
   oper(30,20); 
   oper = Divide; 
   oper(50,5); 
}

Program aşağıdakileri üretmelidir output -

Add result is 30 
Subtract result is 10 
Divide result is 10.0

Note - Yukarıdaki kod bir hatayla sonuçlanacaktır. typedef değişken, farklı bir işlev imzasına sahip bir işlevi göstermeye çalışır.

Misal

Typedefsbir işleve parametre olarak da geçirilebilir. Şu örneği düşünün -

typedef ManyOperation(int firstNo , int secondNo);   //function signature 
Add(int firstNo,int second){ 
   print("Add result is ${firstNo+second}"); 
}  
Subtract(int firstNo,int second){
   print("Subtract result is ${firstNo-second}"); } Divide(int firstNo,int second){ print("Divide result is ${firstNo/second}"); 
}  
Calculator(int a,int b ,ManyOperation oper){ 
   print("Inside calculator"); 
   oper(a,b); 
}  
main(){ 
   Calculator(5,5,Add); 
   Calculator(5,5,Subtract); 
   Calculator(5,5,Divide); 
}

Aşağıdakileri üretecek output -

Inside calculator 
Add result is 10 
Inside calculator 
Subtract result is 0 
Inside calculator 
Divide result is 1.0

Bir programlama dilindeki bir kitaplık, bir rutin koleksiyonunu (programlama talimatları seti) temsil eder. Dart, sık kullanılan rutinleri depolamak için yararlı olan bir dizi yerleşik kitaplığa sahiptir. Bir Dart kitaplığı, bir dizi sınıf, sabit, işlev, yazı tipi, özellik ve istisnadan oluşur.

Bir kitaplığı içe aktarma

İçe aktarma, bir kitaplıktaki bileşenleri arayan kod için kullanılabilir hale getirir. Import anahtar sözcüğü, aynısını elde etmek için kullanılır. Bir dart dosyası birden fazla içe aktarma ifadesine sahip olabilir.

Yerleşik Dart kitaplığı URI'leri, bir kitaplığa başvurmak için dart: şemasını kullanır. Diğer kitaplıklar, URI'sini belirtmek için bir dosya sistemi yolunu veya package: şemasını kullanabilir. Pub aracı gibi bir paket yöneticisi tarafından sağlanan kitaplıklar, package: şemasını kullanır .

Dart'ta bir kitaplığı içe aktarmak için sözdizimi aşağıda verilmiştir -

import 'URI'

Aşağıdaki kod parçacığını düşünün -

import 'dart:io' 
import 'package:lib1/libfile.dart'

Bir kitaplığın yalnızca bir bölümünü kullanmak istiyorsanız, kitaplığı seçmeli olarak içe aktarabilirsiniz. Aynı sözdizimi aşağıda verilmiştir -

import 'package: lib1/lib1.dart' show foo, bar;  
// Import only foo and bar. 

import 'package: mylib/mylib.dart' hide foo;  
// Import all names except foo

Yaygın olarak kullanılan bazı kitaplıklar aşağıda verilmiştir -

Sr.No Kitaplık ve Açıklama
1

dart:io

Sunucu uygulamaları için dosya, soket, HTTP ve diğer G / Ç desteği. Bu kitaplık, tarayıcı tabanlı uygulamalarda çalışmaz. Bu kitaplık varsayılan olarak içe aktarılır.

2

dart:core

Her Dart programı için yerleşik türler, koleksiyonlar ve diğer temel işlevler. Bu kitaplık otomatik olarak içe aktarılır.

3

dart: math

Matematiksel sabitler ve fonksiyonlar, artı bir rasgele sayı üreteci.

4

dart: convert

JSON ve UTF-8 dahil olmak üzere farklı veri gösterimleri arasında dönüştürme yapmak için kodlayıcılar ve kod çözücüler.

5

dart: typed_data

Sabit boyutlu verileri verimli bir şekilde işleyen listeler (örneğin, işaretsiz 8 baytlık tamsayılar).

Örnek: Bir Kitaplığı İçe Aktarma ve Kullanma

Aşağıdaki örnek yerleşik kitaplığı içe aktarır dart: math. Snippet,sqrt() işlevinden mathkütüphane. Bu işlev, kendisine iletilen sayının karekökünü döndürür.

import 'dart:math'; 
void main() { 
   print("Square root of 36 is: ${sqrt(36)}"); 
}

Output

Square root of 36 is: 6.0

Kitaplıklarda Kapsülleme

Dart komut dosyaları, bileşenlerini özel olarak işaretlemek için tanımlayıcıların önüne bir alt çizgi (_) ekleyebilir. Basitçe söylemek gerekirse, Dart kitaplıkları içeriğine erişimi harici komut dosyalarıyla kısıtlayabilir. Bu olarak adlandırılırencapsulation. Aynı sözdizimi aşağıda verilmiştir -

Sözdizimi

_identifier

Misal

İlk önce özel işlevi olan bir kitaplık tanımlayın.

library loggerlib;                            
void _log(msg) {
   print("Log method called in loggerlib msg:$msg");      
}

Ardından, kitaplığı içe aktarın

import 'test.dart' as web; 
void main() { 
   web._log("hello from webloggerlib"); 
}

Yukarıdaki kod bir hataya neden olacaktır.

Unhandled exception: 
No top-level method 'web._log' declared.  
NoSuchMethodError: method not found: 'web._log' 
Receiver: top-level 
Arguments: [...] 
#0 NoSuchMethodError._throwNew (dart:core-patch/errors_patch.dart:184) 
#1 main (file:///C:/Users/Administrator/WebstormProjects/untitled/Assertion.dart:6:3) 
#2 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:261) 
#3 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

Özel Kitaplıklar Oluşturma

Dart ayrıca kendi kodunuzu bir kitaplık olarak kullanmanıza izin verir. Özel bir kitaplık oluşturmak aşağıdaki adımları içerir -

Step 1: Declaring a Library

Açıkça bir kitaplık bildirmek için, library statement. Bir kitaplık bildirmek için sözdizimi aşağıda verildiği gibidir -

library library_name  
// library contents go here

Step 2: Associating a Library

Bir kitaplığı iki şekilde ilişkilendirebilirsiniz -

  • Aynı dizin içinde
import 'library_name'
  • Farklı bir dizinden
import 'dir/library_name'

Örnek: Özel Kitaplık

Önce özel bir kitaplık tanımlayalım, calculator.dart.

library calculator_lib;  
import 'dart:math'; 

//import statement after the libaray statement  
int add(int firstNumber,int secondNumber){ 
   print("inside add method of Calculator Library ") ; 
   return firstNumber+secondNumber; 
}  
int modulus(int firstNumber,int secondNumber){ 
   print("inside modulus method of Calculator Library ") ; 
   return firstNumber%secondNumber; 
}  
int random(int no){ 
   return new Random().nextInt(no); 
}

Ardından, kütüphaneyi içe aktaracağız -

import 'calculator.dart';  
void main() {
   var num1 = 10; 
   var num2 = 20; 
   var sum = add(num1,num2); 
   var mod = modulus(num1,num2); 
   var r = random(10);  
   
   print("$num1 + $num2 = $sum"); print("$num1 % $num2= $mod"); 
   print("random no $r"); 
}

Program aşağıdakileri üretmelidir output -

inside add method of Calculator Library  
inside modulus method of Calculator Library  
10 + 20 = 30 
10 % 20= 10 
random no 0

Kitaplık Öneki

Çakışan tanımlayıcılara sahip iki kitaplığı içe aktarırsanız, kitaplıklardan biri veya her ikisi için bir önek belirtebilirsiniz. Kullan'as'öneki belirtmek için anahtar sözcük. Aynı sözdizimi aşağıda verilmiştir -

Sözdizimi

import 'library_uri' as prefix

Misal

Önce bir kitaplık tanımlayalım: loggerlib.dart.

library loggerlib;  
void log(msg){ 
   print("Log method called in loggerlib msg:$msg");
}

Sonra, başka bir kitaplık tanımlayacağız: webloggerlib.dart.

library webloggerlib; 
void log(msg){ 
   print("Log method called in webloggerlib msg:$msg"); 
}

Son olarak, kütüphaneyi bir önek ile içe aktaracağız.

import 'loggerlib.dart'; 
import 'webloggerlib.dart' as web;  

// prefix avoids function name clashes 
void main(){ 
   log("hello from loggerlib"); 
   web.log("hello from webloggerlib"); 
}

Aşağıdakileri üretecek output -

Log method called in loggerlib msg:hello from loggerlib 
Log method called in webloggerlib msg:hello from webloggerlib

Bir asynchronous operation iş parçacığından ayrı olarak mainuygulama dizisi. Bir uygulama bir işlemi eşzamansız olarak gerçekleştirmek için bir yöntemi çağırdığında, zaman uyumsuz yöntem görevini gerçekleştirirken uygulama yürütülmeye devam edebilir.

Misal

Bu kavramı anlamak için bir örnek alalım. Program burada kullanıcı girişini kullanarak kabul eder.IO library.

import 'dart:io'; 
void main() { 
   print("Enter your name :");            
   
   // prompt for user input 
   String name = stdin.readLineSync();  
   
   // this is a synchronous method that reads user input 
   print("Hello Mr. ${name}"); 
   print("End of main"); 
}

readLineSync()senkronize bir yöntemdir. Bu, aşağıdaki tüm talimatların yürütülmesi anlamına gelir.readLineSync() işlev çağrısı, readLineSync() yöntem yürütmeyi bitirir.

stdin.readLineSyncgirdi bekler. İzlerinde durur ve kullanıcının girdisini alana kadar daha fazla yürütmez.

Yukarıdaki örnek şunla sonuçlanacaktır: output -

Enter your name :     
Tom                   

// reads user input  
Hello Mr. Tom 
End of main

Hesaplamada, bir şeyin synchronousDevam etmeden önce bir olayın olmasını beklediğinde. Bu yaklaşımın bir dezavantajı, kodun bir kısmının yürütülmesi çok uzun sürerse, sonraki blokların, ilgisiz olsa da, yürütülmesinin engellenmesidir. Bir kaynak için birden çok isteğe yanıt vermesi gereken bir web sunucusu düşünün.

Senkronize bir yürütme modeli, mevcut isteği işlemeyi bitirene kadar diğer her kullanıcının isteğini engelleyecektir. Böyle bir durumda, bir web sunucusunda olduğu gibi, her istek diğerlerinden bağımsız olmalıdır. Bu, web sunucusunun diğer kullanıcıların isteğine yanıt vermeden önce mevcut isteğin yürütülmesini beklememesi gerektiği anlamına gelir.

Basitçe söylemek gerekirse, önceki kullanıcıların isteklerini tamamlamadan önce yeni kullanıcılardan gelen istekleri kabul etmelidir. Bu, eşzamansız olarak adlandırılır. Eşzamansız programlama temelde bekleme veya engellemeyen programlama modeli olmadığı anlamına gelir. dart:async paketi, bir Dart komut dosyasında zaman uyumsuz programlama bloklarının uygulanmasını kolaylaştırır.

Misal

Aşağıdaki örnek, eşzamansız bir bloğun işleyişini daha iyi göstermektedir.

Step 1 - Bir contact.txt dosya aşağıda verildiği gibi and mevcut projedeki veri klasörüne kaydedin.

1, Tom 
2, John 
3, Tim 
4, Jane

Step 2 - Uygulamanın diğer kısımlarını engellemeden dosyayı okuyacak bir program yazın.

import "dart:async"; 
import "dart:io";  

void main(){ 
   File file = new File( Directory.current.path+"\\data\\contact.txt"); 
   Future<String> f = file.readAsString();  
  
   // returns a futrue, this is Async method 
   f.then((data)=>print(data));  
   
   // once file is read , call back method is invoked  
   print("End of main");  
   // this get printed first, showing fileReading is non blocking or async 
}

output Bu programın aşağıdaki gibi olacak -

End of main 
1, Tom 
2, John 
3, Tim 
4, Jan

Komut, dosyayı okumaya devam ederken "ana son" ilk olarak yürütülür. Future sınıfın parçası dart:async, zaman uyumsuz bir görev tamamlandıktan sonra bir hesaplamanın sonucunu almak için kullanılır. BuFuture değer daha sonra hesaplama bittikten sonra bir şeyler yapmak için kullanılır.

Okuma işlemi tamamlandığında, yürütme kontrolü içinde aktarılır. "then()". Bunun nedeni, okuma işleminin daha fazla zaman alabilmesi ve bu nedenle programın diğer bölümlerini engellemek istememesidir.

Dart Geleceği

Dart topluluğu bir Future"gelecekte bir değer elde etmenin bir yolu" olarak. Basit ifadeyle,Future objectsyürütmesi daha sonraki bir zamanda tamamlanacak olan bir ifadenin döndürdüğü değerleri temsil eden bir mekanizmadır. Dart'ın yerleşik sınıflarından bazıları birFuture zaman uyumsuz bir yöntem çağrıldığında.

Dart, tek iş parçacıklı bir programlama dilidir. Herhangi bir kod yürütme iş parçacığını engellerse (örneğin, zaman alan bir işlemi bekleyerek veya G / Ç'yi engelleyerek), program etkin bir şekilde donar.

Eşzamansız işlemler, programınızın engellenmeden çalışmasına izin verir. Dart kullanırFuture objects zaman uyumsuz işlemleri temsil etmek için.

Concurrencyaynı anda birkaç komut dizisinin yürütülmesidir. Aynı anda birden fazla görevi gerçekleştirmeyi içerir.

Dart kullanır Isolatesparalel işler yapmak için bir araç olarak. dart:isolate paketi, Dart'ın tek iş parçacıklı Dart kodunu alma ve uygulamanın mevcut donanımdan daha fazla yararlanmasına olanak tanıyan çözümüdür.

Isolates, adından da anlaşılacağı gibi, çalışan kodun yalıtılmış birimleridir. Aralarında veri göndermenin tek yolu, istemciyle sunucu arasında iletilerinizi iletme biçiminiz gibi iletilerdir. Birisolate programın çok çekirdekli mikroişlemcilerden kutunun dışında yararlanmasına yardımcı olur.

Misal

Bu kavramı daha iyi anlamak için bir örnek alalım.

import 'dart:isolate';  
void foo(var message){ 
   print('execution from foo ... the message is :${message}'); 
}  
void main(){ 
   Isolate.spawn(foo,'Hello!!'); 
   Isolate.spawn(foo,'Greetings!!'); 
   Isolate.spawn(foo,'Welcome!!'); 
   
   print('execution from main1'); 
   print('execution from main2'); 
   print('execution from main3'); 
}

Burada spawn yöntemi Isolate sınıf bir işlevi çalıştırmayı kolaylaştırır, foo, kodumuzun geri kalanıyla paralel olarak. spawn işlev iki parametre alır -

  • ortaya çıkacak işlev ve
  • ortaya çıkan işleve aktarılacak bir nesne.

Oluşturulan işleve geçirilecek bir nesne yoksa, buna NULL değeri verilebilir.

İki işlev (foo and main)her seferinde aynı sırada çalışmayabilir. Ne zaman olacağına dair bir garanti yokfoo yürütülecek ve ne zaman main()yürütülecek. Her çalıştırdığınızda çıktı farklı olacaktır.

Çıkış 1

execution from main1 
execution from main2 
execution from main3 
execution from foo ... the message is :Hello!!

Çıkış 2

execution from main1 
execution from main2 
execution from main3 
execution from foo ... the message is :Welcome!! 
execution from foo ... the message is :Hello!! 
execution from foo ... the message is :Greetings!!

Çıktılardan, Dart kodunun yeni bir isolate Java veya C # kodunun yeni bir iş parçacığı başlatabileceği gibi kod çalıştırmaktan.

Isolates konu başlıklarından farklıdır, isolatekendi hafızasına sahiptir. Arasında bir değişkeni paylaşmanın bir yolu yokisolates—Arasında iletişim kurmanın tek yolu isolates mesaj geçişi yoluyla.

Note - Yukarıdaki çıktı, farklı donanım ve işletim sistemi yapılandırmaları için farklı olacaktır.

İzole v / s Geleceği

Karmaşık hesaplama işlerini eşzamansız olarak yapmak, uygulamaların yanıt vermesini sağlamak için önemlidir. Dart Future eşzamansız bir görevin değerini tamamladıktan sonra almak için bir mekanizmadır. Dart Isolates paralelliği soyutlamak ve onu pratik bir üst düzey temelde uygulamak için bir araçtır.

Birim Testi, bir uygulamanın her bir biriminin test edilmesini içerir. Geliştiricinin, karmaşık uygulamanın tamamını çalıştırmadan küçük işlevleri test etmesine yardımcı olur.

Dart external library "test" adı verilen birim testleri yazmak ve çalıştırmak için standart bir yol sağlar.

Dart birimi testi aşağıdaki adımları içerir -

Step 1: Installing the "test" package

Mevcut projede üçüncü taraf paketleri kurmak için, pubspec.yamldosya. Yüklemektest packagesönce aşağıdaki girişi yapın pubspec.yaml dosya -

dependencies: 
test:

Girişi yaptıktan sonra, sağ tıklayın pubspec.yamldosya ve bağımlılıkları alın. Yükleyecek"test"paketi. Aşağıda verilen aynı ekran görüntüsüdür.WebStorm Editör.

Paketler şuradan yüklenebilir: command lineçok. Aşağıdakileri terminale yazın -

pub get

Step 2: Importing the "test" package

import "package:test/test.dart";

Step 3 Writing Tests

Testler, üst düzey işlev kullanılarak belirtilir test(), süre test assertions kullanılarak yapılır expect()işlevi. Bu yöntemleri kullanmak için, birpub bağımlılık.

Sözdizimi

test("Description of the test ", () {  
   expect(actualValue , matchingValue) 
});

group()işlevi testleri gruplamak için kullanılabilir. Her grubun açıklaması, test açıklamalarının başına eklenir.

Sözdizimi

group("some_Group_Name", () { 
   test("test_name_1", () { 
      expect(actual, equals(exptected)); 
   });  
   test("test_name_2", () { 
      expect(actual, equals(expected)); 
   }); 
})

Örnek 1: Başarılı Bir Test

Aşağıdaki örnek bir yöntemi tanımlar Add(). Bu yöntem iki tamsayı değeri alır ve şunu temsil eden bir tamsayı döndürürsum. Bunu test etmek içinadd() yöntem -

Step 1 - İçe aktar test aşağıda verilen paket.

Step 2 - testi kullanarak tanımlayın test()işlevi. Buradatest() işlevi kullanır expect() bir iddiayı zorlamak için işlev.

import 'package:test/test.dart';      
// Import the test package 

int Add(int x,int y)                  
// Function to be tested { 
   return x+y; 
}  
void main() { 
   // Define the test 
   test("test to check add method",(){  
      // Arrange 
      var expected = 30; 
      
      // Act 
      var actual = Add(10,20); 
      
      // Asset 
      expect(actual,expected); 
   }); 
}

Aşağıdakileri üretmelidir output -

00:00 +0: test to check add method 
00:00 +1: All tests passed!

Örnek 2: Başarısız Bir Test

subtract()aşağıda tanımlanan yöntemin mantıksal bir hatası var. Aşağıdakitest aynı şeyi doğrular.

import 'package:test/test.dart'; 
int Add(int x,int y){ 
   return x+y; 
}
int Sub(int x,int y){ 
   return x-y-1; 
}  
void main(){ 
   test('test to check sub',(){ 
      var expected = 10;   
      // Arrange 
      
      var actual = Sub(30,20);  
      // Act 
      
      expect(actual,expected);  
      // Assert 
   }); 
   test("test to check add method",(){ 
      var expected = 30;   
      // Arrange 
      
      var actual = Add(10,20);  
      // Act 
      
      expect(actual,expected);  
      // Asset 
   }); 
}

Output - İşlev için test durumu add() geçer ama için test subtract() aşağıda gösterildiği gibi başarısız olur.

00:00 +0: test to check sub 
00:00 +0 -1: test to check sub 
Expected: <10> 
Actual: <9> 
package:test  expect 
bin\Test123.dart 18:5  main.<fn> 
   
00:00 +0 -1: test to check add method 
00:00 +1 -1: Some tests failed.  
Unhandled exception: 
Dummy exception to set exit code. 
#0  _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:938) 
#1  _microtaskLoop (dart:async/schedule_microtask.dart:41)
#2  _startMicrotaskLoop (dart:async/schedule_microtask.dart:50) 
#3  _Timer._runTimers (dart:isolate-patch/timer_impl.dart:394) 
#4  _Timer._handleMessage (dart:isolate-patch/timer_impl.dart:414) 
#5  _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:148)

Test Durumlarını Gruplama

Gruplayabilirsiniz test casesböylece test kodunuza daha fazla anlam katar. Eğer çok varsatest cases bu, daha temiz kod yazmanıza yardımcı olur.

Verilen kodda, için bir test senaryosu yazıyoruz. split() fonksiyon ve trimişlevi. Bu nedenle, bu test durumlarını mantıksal olarak gruplandırıyoruz ve bunaString.

Misal

import "package:test/test.dart"; 
void main() { 
   group("String", () { 
      test("test on split() method of string class", () { 
         var string = "foo,bar,baz"; 
         expect(string.split(","), equals(["foo", "bar", "baz"])); 
      }); 
      test("test on trim() method of string class", () { 
         var string = "  foo "; 
         expect(string.trim(), equals("foo")); 
      }); 
   }); 
}

Output - Çıktı, aşağıda verildiği gibi her test senaryosu için grup adını ekleyecektir -

00:00 +0: String test on split() method of string class 
00:00 +1: String test on trim() method of string class 
00:00 +2: All tests passed

Her web sayfası, bir nesne olarak düşünülebilecek bir tarayıcı penceresi içinde bulunur.

Bir Document objecto pencerede görüntülenen HTML belgesini temsil eder. Belge nesnesi, belge içeriğine erişime ve içeriğin değiştirilmesine izin veren diğer nesnelere atıfta bulunan çeşitli özelliklere sahiptir.

Bir belge içeriğine erişilme ve değiştirilme şekline Document Object Modelveya DOM. Nesneler bir hiyerarşi içinde düzenlenmiştir. Bu hiyerarşik yapı, bir Web belgesindeki nesnelerin organizasyonu için geçerlidir.

  • Window- Hiyerarşinin zirvesi. Nesne hiyerarşisinin en dıştaki öğesidir.

  • Document- Bir pencereye yüklenen her HTML belgesi bir belge nesnesi haline gelir. Belge, sayfanın içeriğini içerir.

  • Elements- bir web sayfasındaki içeriği temsil eder. Örnekler arasında metin kutuları, sayfa başlığı vb. Yer alır.

  • Nodes - genellikle öğelerdir ancak öznitelikler, metinler, yorumlar ve diğer DOM türleri de olabilirler.

İşte birkaç önemli DOM nesnesinin basit bir hiyerarşisi -

Dart, dart:htmlDOM'daki nesneleri ve öğeleri işlemek için kütüphane. Konsol tabanlı uygulamalar,dart:htmlkütüphane. HTML kitaplığını web uygulamalarında kullanmak için içe aktarındart:html -

import 'dart:html';

Devam ediyoruz, biraz tartışacağız DOM Operations sonraki bölümde.

DOM Öğelerini Bulma

dart:html kütüphane sağlar querySelector DOM'daki öğeleri aramak için işlev.

Element querySelector(String selectors);

querySelector() işlevi, belirtilen seçici grubuyla eşleşen ilk öğeyi döndürür. "selectors aşağıda verildiği gibi CSS seçici sözdizimini kullanan bir dize olmalıdır

var element1 = document.querySelector('.className'); 
var element2 = document.querySelector('#id');

Örnek: DOM'da değişiklik yapma

Webstorm IDE'de aşağıda verilen adımları izleyin -

Step 1 - Yeni Proje Dosyası → Konumda, proje adını şu şekilde girin: DemoWebApp.

Step 1 - "Örnek içerik oluştur" bölümünde, SimpleWebApplication.

Örnek bir proje oluşturacak, DemoWebApp. Varpubspec.yaml indirilmesi gereken bağımlılıkları içeren dosya.

name: 'DemoWebApp' 
version: 0.0.1 
description: An absolute bare-bones web app. 

#author: Your Name <[email protected]> 
#homepage: https://www.example.com  
environment:   
   sdk: '>=1.0.0 <2.0.0'  
dependencies:   
   browser: '>=0.10.0 <0.11.0'   dart_to_js_script_rewriter: '^1.0.1'  
transformers: 
- dart_to_js_script_rewriter

Web'e bağlıysanız, bunlar otomatik olarak indirilecektir, aksi takdirde sağ tıklayabilirsiniz. pubspec.yaml ve bağımlılıklar edinin.

Web klasöründe üç dosya bulacaksınız: Index.html, main.dart, ve style.css

Index.html

<!DOCTYPE html>   
<html> 
   <head>     
      <meta charset = "utf-8">     
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge">     
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0">
      <meta name = "scaffolded-by" content = "https://github.com/google/stagehand">
      <title>DemoWebApp</title>     
      <link rel = "stylesheet" href = "styles.css">     
      <script defer src = "main.dart" type = "application/dart"></script>
      <script defer src = "packages/browser/dart.js"></script> 
   </head>
   
   <body>   
      <h1>
         <div id = "output"></div> 
      </h1>  
   </body> 
</html>

Main.dart

import 'dart:html';  
void main() {   
   querySelector('#output').text = 'Your Dart web dom app is running!!!.'; 
}

Çalıştır index.htmldosya; Aşağıdaki çıktıyı ekranınızda göreceksiniz.

Olay işleme

dart:html kütüphane sağlar onClickDOM Öğeleri için olay. Sözdizimi, bir öğenin tıklama olayları akışını nasıl işleyebileceğini gösterir.

querySelector('#Id').onClick.listen(eventHanlderFunction);

querySelector() işlevi verilen DOM'dan öğeyi döndürür ve onClick.listen() alacak eventHandlerbir tıklama olayı ortaya çıktığında çağrılacak olan yöntem. SözdizimieventHandler aşağıda verilmiştir -

void eventHanlderFunction (MouseEvent event){ }

Şimdi Dart'ta Olay İşleme kavramını anlamak için bir örnek alalım.

TestEvent.html

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1.0"> 
      <meta name = "scaffolded-by" content ="https://github.com/google/stagehand"> 
      <title>DemoWebApp</title> 
      <link rel = "stylesheet" href = "styles.css"> 
      <script defer src = "TestEvent.dart" type="application/dart"></script> 
      <script defer src = "packages/browser/dart.js"></script> 
   </head> 
   
   <body> 
      <div id = "output"></div> 
      <h1> 
         <div> 
            Enter you name : <input type = "text" id = "txtName"> 
            <input type = "button" id = "btnWish" value="Wish"> 
         </div> 
      </h1> 
      <h2 id = "display"></h2> 
   </body>
   
</html>

TestEvent.dart

import 'dart:html'; 
void main() { 
   querySelector('#btnWish').onClick.listen(wishHandler); 
}  
void wishHandler(MouseEvent event){ 
   String name = (querySelector('#txtName')  as InputElement).value; 
   querySelector('#display').text = 'Hello Mr.'+ name; 
}

Çıktı