Memulai
hello.dart
// fungsi tingkat atas di mana eksekusi aplikasi dimulai
void main(){
print("Hello World!"); // Mencetak ke konsol
}
Setiap aplikasi memiliki fungsi main()
Variabel
int x = 2; // diketik secara eksplisit
var p = 5; // tipe yang disimpulkan - Var umum dengan inferensi tipe
dynamic z = 8; // variabel bisa mengambil tipe apa saja
z = "cool"; // dingin
// jika Anda tidak pernah berniat untuk mengubah sebuah variabel, gunakan final atau const. Sesuatu yang seperti ini:
final email = "[email protected]"; // Sama seperti var tetapi tidak dapat dipindahkan
final String email = "[email protected]"; // Anda tidak dapat mengubah nilainya
const qty = 5; // Konstanta waktu kompilasi
Tipe data
int umur = 20; // bilangan bulat, rentang -2^63 sampai 2^63 - 1
double tinggi = 1.85; // bilangan floating-point
// Anda juga bisa mendeklarasikan variabel sebagai num
num x = 1; // x dapat memiliki nilai int dan double
num += 2.5;
print(num); //Mencetak: 3.5
String nama = "Nicola";
bool isFavourite = true;
bool isLoaded = false;
Interpolasi string
// dapat menggunakan qoutes tunggal atau ganda untuk tipe String
var firstName = 'Nicola';
var lastName = "Tesla";
// dapat menyematkan variabel dalam string dengan $
String nama lengkap = "$nama_pertama $nama_kelapa";
// menggabungkan dengan +
var nama = "Albert " + "Einstein";
String upperCase = '${nama_pertama.toUpperCase()}';
print(upperCase); //Mencetak: NICOLA
Komentar
// Ini adalah komentar satu baris yang normal.
/// Ini adalah komentar dokumentasi, digunakan untuk mendokumentasikan pustaka,
/// kelas-kelas, dan anggota-anggotanya. Alat-alat seperti IDE dan dartdoc memperlakukan
/// komentar doc secara khusus.
/* Komentar seperti ini juga didukung. */
Impor
// Mengimpor pustaka inti
import 'dart:math';
// Mengimpor pustaka dari paket eksternal
import 'package:test/test.dart';
// Mengimpor berkas
import 'path/to/my_other_file.dart';
Operator
Operator Aritmatika
print(2 + 3); //Mencetak: 5
print(2 - 3); //Mencetak: -1
print(2 * 3); //Mencetak: 6
print(5 / 2); //Cetak: 2.5 - Hasil adalah dobel
print(5 ~/ 2); //Cetak: 2 - Hasil berupa int
print(5 % 2); //Mencetak: 1 - Sisa
int a = 1, b;
// Penambahan
b = ++a; // preIncrement - Penambahan a sebelum b mendapatkan nilainya.
b = a++; // postIncrement - Penambahan a SETELAH b mendapatkan nilainya.
//Decrement
b = --a; // predecrement - Pengurangan a sebelum b mendapatkan nilainya.
b = a--; // postdecrement - Pengurangan a SETELAH b mendapatkan nilainya.
Operator kesetaraan dan relasional
print(2 == 2); //Mencetak: benar - Sama dengan
print(2 != 3); //Cetak: true - Tidak Sama
print(3 > 2); //Cetak: true - Lebih besar dari
print(2 < 3); //Print: true - Kurang dari
print(3 >= 3); //Print: true - Lebih besar dari atau sama dengan
print(2 <= 3); //Print: true - Kurang dari atau sama dengan
Operator-operator logika
// !expr membalikkan ekspresi (mengubah salah menjadi benar, dan sebaliknya)
// || logika OR
// && logika AND
bool isOutOfStock = false;
int jumlah = 3;
if (!isOutOfStock && (quantity == 2 || quantity == 3)) {
// ... Pesan produk ...
}
Arus Kontrol : 2. Kondisional
if dan else jika
if (usia < 18){
print("Remaja");
} else if( umur > 18 && umur < 60){
print("Dewasa");
} else {
print("Tua");
}
mengganti huruf besar/kecil
enum Hewan Peliharaan {anjing, kucing}
Hewan peliharaan myPet = Pet.dog;
switch(myPet){
case Pet.dog:
print('Hewan Peliharaan saya adalah Anjing.');
break;
case Pet.cat:
print('Hewan Peliharaan Saya adalah Kucing.');
break
default:
print('Saya tidak memiliki Hewan Peliharaan');
}
// Mencetak: Hewan peliharaan saya adalah Anjing.
Mengendalikan Aliran : 1. Loop
perulangan sementara
while (!dreamsAchieved) {
bekerjaKeras();
}
perulangan while memeriksa kondisi sebelum iterasi perulangan
perulangan do-while
do {
bekerjaKeras();
} while (!mimpiCapai);
perulangan do-while memverifikasi kondisi setelah eksekusi pernyataan di dalam perulangan
for loop (perulangan)
for(int i=0; i<10; i++){
print(i);
}
var angka = [1,2,3];
// perulangan for-in untuk daftar
for(var angka dalam bilangan){
print(angka);
}
Koleksi
Daftar
// kelompok objek yang terurut
var list = [1, 2, 3];
print(list.length); //Mencetak: 3
print(list[1]); //Mencetak: 2
// cara-cara lain untuk deklarasi dan inisialisasi daftar
List<String> kota-kota = <String>["New York", "Mumbai", "Tokyo"];
// Untuk membuat daftar yang merupakan konstanta waktu kompilasi
const constantCities = const ["New York", "Mumbai", "Tokyo"];
Set
// Sebuah set di Dart adalah kumpulan item unik yang tidak terurut.
var halogen = {'fluor', 'klorin', 'bromin', 'yodium', 'astrofosfat'};
// untuk membuat himpunan kosong
var nama-nama = <String>{};
Set<String> names = {}; // Ini juga bisa digunakan.
//var nama = {}; // Membuat sebuah peta, bukan himpunan.
Peta
// peta adalah objek yang mengasosiasikan kunci dan nilai
var orang = Map<String, String>();
// Untuk menginisialisasi peta, lakukan ini:
person['firstName'] = 'Nicola';
person['lastName'] = 'Tesla';
print(person); //Mencetak: {nama depan: Nicola, nama belakang: Tesla}
print(person['lastName']); //Cetak: Tesla
var nobleGases = {
// Key: Nilai
2: 'helium',
10: 'neon',
18: 'argon',
};
Fungsi
Fungsi
// fungsi-fungsi dalam dart adalah objek dan memiliki tipe
int tambah(int a, int b){
mengembalikan a + b;
}
// fungsi-fungsi dapat ditetapkan ke variabel-variabel
int jumlah = add(2,3); // mengembalikan: 5
// dapat diberikan sebagai argumen ke fungsi lain
int totalJumlah = add(2, add(2,3)); // mengembalikan: 7
Sintaks Panah (=>) ### Sintaks Panah (=>)
// fungsi yang hanya berisi satu ekspresi, Anda dapat menggunakan sintaksis singkatan
bool isFav(Produk produk) => favProductsList.contains(produk);
Fungsi anonim (lambda)
// fungsi satu baris kecil yang tidak memiliki nama
int tambah(a,b) => a+b;
// fungsi lambda kebanyakan dilewatkan sebagai parameter ke fungsi lain
const list = ['apel', 'pisang', 'jeruk'];
list.forEach(
(item) => print('${list.indexOf(item)}: $item'));
//Mencetak: 0: apel 1: pisang 2: jeruk
Kelas dan Objek
Kelas
class Kucing {
Nama string;
// metode
void suara(){
print("Meong");
}
}
Objek
// contoh dari sebuah kelas
// di bawah myCat adalah objek dari kelas Kucing
void main(){
Kucing myCat = Kucing();
myCat.name = "Kucing";
myCat.voice(); // Mencetak: Meong
}
Konstruktor
class Kucing {
String nama;
Kucing(ini.nama);
}
void main(){
Kucing myCat = Cat("Kucing");
print(myCat.name); // Mencetak: Kitty
}
Kelas Abstrak
// kelas abstrak-kelas yang tidak bisa diinstansiasi
// Kelas ini dideklarasikan sebagai kelas abstrak sehingga tidak bisa diinstansiasi.
kelas abstrak AbstractContainer {
// Mendefinisikan konstruktor, field, metode...
void updateChildren(); // Metode abstrak.
}
Pengambil Pengatur
// menyediakan akses baca dan tulis ke properti objek
kelas Kucing {
Nama string;
// pengambil
String mendapatkan nama kucing {
mengembalikan nama;
}
// setter
void set namaKucing(String nama){
this.name = nama;
}
}
Antarmuka implisit
Antarmuka dasar
// Seseorang. Antarmuka implisit berisi fungsi menyapa().
class Orang {
// Dalam antarmuka, tetapi hanya terlihat di pustaka ini.
final String _nama;
// Tidak ada di antarmuka, karena ini adalah konstruktor.
Person(this._nama);
// Di dalam antarmuka.
String menyapa(String siapa) => 'Halo, $siapa. Saya $_nama';
}
// Sebuah implementasi dari antarmuka Person.
class Penipu mengimplementasikan Orang {
String get _nama => '';
String menyapa(String siapa) => 'Hai $siapa. Apakah Anda tahu siapa saya?';
}
String menyapaBob(Person orang) => orang.menyapa('Bob');
void main() {
print(greetBob(Person('Kathy'))); // Halo, Bob. Saya Kathy.
print(greetBob(Penipu())); // Hai Bob. Apakah Anda tahu siapa saya?
}
Memperluas kelas
kelas Telepon {
void use(){
_panggilan();
_kirimPesan();
}
}
// Gunakan extends untuk membuat subkelas
class SmartPhone extends Phone {
void use(){
// gunakan super untuk merujuk ke superclass
super.use();
_mengambilFoto();
_memainkanGames();
}
}
Pengecualian
Throw
// melempar atau membangkitkan dan eksepsi
throw IntegerDivisionByZeroException();
// Anda juga bisa melempar objek sembarang
melempar "Produk kehabisan stok!";
Menangkap
try {
int c = 3/0;
print(c);
} on IntegerDivisionByZeroException {
// Pengecualian khusus
print('Tidak dapat membagi bilangan bulat dengan 0.')
} on Exception catch (e) {
// Hal lain yang merupakan pengecualian
print('Pengecualian yang tidak diketahui: $e');
} catch (e) {
// Tidak ada tipe yang ditentukan, menangani semua
print('Sesuatu yang benar-benar tidak diketahui: $e');
}
Akhirnya
// Untuk memastikan bahwa beberapa kode berjalan baik ketika ada pengecualian atau tidak
try {
masakMakanan();
} catch (e) {
print('Error: $e'); // Tangani pengecualian terlebih dahulu.
} finally {
cleanKitchen(); // Kemudian bersihkan.
}
Futures
Asinkronisasi Menunggu
// fungsi yang asinkron: fungsi ini akan kembali setelah menyiapkan operasi yang mungkin memakan waktu
// Kata kunci async dan menunggu mendukung pemrograman asinkron
Future<String> login() {
String userName = "Temidjoy";
return
Future.delayed(
Durasi(detik: 4), () => nama_pengguna);
}
// Asinkron
main() async {
print('Mengotentikasi harap tunggu...');
print(menunggu userName());
}
Lain-lain
Null dan Null aware
int x; // Nilai awal dari setiap objek adalah null
// ?? operator sadar null
x ??=6; // operator penugasan, yang memberikan nilai sebuah variabel hanya jika variabel tersebut saat ini bernilai null
print(x); //Mencetak: 6
x ??=3;
print(x); // Mencetak: 6 - hasilnya tetap 6
print(null ?? 10); // Mencetak: 10. Menampilkan nilai di sebelah kiri jika bukan null, jika tidak, kembalikan nilai di sebelah kanan
Operator Ternary
// kondisi ? exprIfTrue : exprIfFalse
bool isAvailable;
isAvailable ? orderproduct() : addToFavourite();
Operator Penyebaran (…)
// untuk menyisipkan beberapa nilai ke dalam sebuah koleksi.
var list = [1, 2, 3];
var list2 = [0, ... list];
print(list2.length); //Mencetak: 4
Notasi bertingkat (..)
// memungkinkan Anda untuk membuat urutan operasi pada objek yang sama
// daripada melakukan ini
var user = User();
user.name = "Nicola";
user.email = "[email protected]";
user.age = 24;
// Anda dapat melakukan ini
var user = User()
..nama = "Nicola"
..email = "[email protected]"
..age = 24;
Akses Properti Bersyarat
userObject?.userName
/ / Potongan kode di atas setara dengan berikut ini:
(userObject != null) ? userObject.userName : null
//Anda dapat merantai beberapa penggunaan ?. bersama-sama dalam satu ekspresi
userObject?.userName?.toString()
// Kode sebelumnya mengembalikan nilai null dan tidak pernah memanggil toString() jika userObject atau userObject.userName bernilai null