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
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 -
|
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.
|
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;
}