Lompat ke konten Lompat ke sidebar Lompat ke footer

Panduan Lengkap Belajar Bahasa Pemrograman Dart

Assalamualalaikum wr wb, Pada kesempatan kali ini kita akan membahasan mengenai Panduan Lengkap Bahasa Pemrograman Dart.

Sebelumnya kita telah mempelajari mengenai Tipe Data pada Dart , serta Operator pada Pemrograman Dart, dan Membuat Program dengan Dart. Selanjutnya kita akan belajar bahasa pemrograman dart secara lengkap dengan memerhatikan point- point yang admin tuliskan dibawah ini.

Jika kalian belum membaca artikel sebelumnya silahkan kunjungi halaman berikut: Instalasi dan Dasar - dasar Pemrograman Dart.

Point - point yang akan dipelajari mengenai Panduan Lengkap Belajar Bahasa Pemrograman Dart, sebagai berikut:
  1. Pembahasan Mengenai Perpustakaan dan Visibilitas
  2. Pembahasan Mengenai Asynchronous
  3. Pembahasan Mengenai Generator
  4. Pemanggilan Class Pada Dart
  5. Isolai Pada Dart
  6. Typedefs Pada Dart
  7. Metadata Pada Dart
  8. Komentar Pada Dart
Dari point - point diatas tentunya kita dapat memerhatikan mencangkup point apa saja yang akan kita bahas pada Artikel kali ini, mengenai Panduan Lengkap Belajar Bahasa Pemrograman Dart.

Untuk pembahasannya silahkan teman-teman perhatikan pembahasan dibawah ini dengan mikmat hhe :)

1. Perpustakaan dan visibilitas (library and visibility)

Library adalah kumpulan kode yang biasanya terkumpul dalam sebuah namespace/ module/ package (tergantung dari bahasa pemrograman yang kita gunakan) yang dapat di import/reuse ke program lain. Library di dalam Dart terdiri dari sekumpulan class (kelas), constant (konstanta), function (fungsi), typedef , (properties)properti, dan exception(pengecualian). 
Cara menggunakan library pada bahasa pemrograman dart :
  • Contoh 1:
import 'dart:io';
Catatan :
saat kita menggunakan library ‘dart:io’ maka semua fungsi yang ada di dalam library ini dapat kita gunakan di dalam program kita. Library ini digunakan agar kita bisa menggunakan fungsi-fungsi input dan output pada bahasa pemrograman dart.

  • Contoh 2:
import 'dart:html';
Catatan :
Saat kita menggunakan library ‘dart:html’ biasanya digunakan saat mengembangkan aplikasi web menggunakan dart. Cara menggunakan hanya sebagian fitur atau fungsi dalam library
  • Contoh 3:
//artinya hanya mengambil fungsi / fitur foo dan bar import 'package: lib1/lib1.dart' show foo, bar; // atau kita ingin mengambil semua fitur/fungsi kecuali foo import 'package: mylib/mylib.dart' hide foo;
Catatan :
Dalam membuat sebuah aplikasi terkadang kita hanya memerlukan sebagian fungsi/fitur dari library tersebut, maka kita dapat mengimplementasikan contoh import library di atas. Alasan mengapa kita membatasi fitur atau fungsi tersebut karena bila terlalu banyak library yang kita importkan, maka akan membuat aplikasi yang kita bangun menjadi kurang responsif atau smooth . Berikut ini beberapa library yang umum digunakan untuk mengembangkan aplikasi dengan bahasa dart.

Berikut merupakan penjelasan mengenai Library dan Deskripsinya , silahkan teman-teman simak:
  1. import ‘dart:io’ library ini digunakan untuk mendukung file, socket, HTTP, dan dukungan input/ output lainnya untuk aplikasi server. library ini tidak berfungsi di aplikasi berbasis browser, dan library ini diimpor secara default.
  2. import ‘dart:core’ library ini digunakan untuk mendukung tipe data bawaan, collection , dan fungsionalitas dari setiap program yang kita buat. Library ini biasanya otomatis di import saat kita membuat aplikasi Dart.
  3. import ‘dart:math’ library ini digunakan untuk mendukung rumus matematika yang konstan, fungsi-fungsi matematika, dan membuat angka random (acak).
  4. import ‘dart:convert’ library ini digunakan untuk mengkonversi antar representasi data yang berbeda, salah satunya yaitu JSON dan UTF-8
  5. import ‘dart:typed_data’ library ini digunakan untuk menangani data yang tetap.(contohnya, bilangan bulat 8 bit ).
Contoh import dan penggunaan library:
Kita akan menggunakan library ‘dart:math’ untuk menghitung akar dari sebuah bilangan integer dan double .
Contoh 1 (bilangan integer ) :
import 'dart:math';
main(){ print("akar dari bilangan integer 36 adalah: ${sprt(36)}"); }
Contoh 2 (bilangan double ):
import 'dart:math';
main(){ print("akar dari bilangan integer 36 adalah: ${sprt(36)}"); }
Selanjutnya kita akan membahasan mengenai Asynchrony Support, Silahkan ikuti pembahasan dibawah ini:

2. Asynchrony Support Pada Dart 

Library dalam Dart penuh dengan fungsi yang mengembalikan objek Future dan Stream . Fungsi-fungsi ini tidak sinkron : fungsi-fungsi ini sinkron kembali setelah menyiapkan operasi yang mungkin memakan waktu (seperti I / O), tanpa menunggu operasi itu selesai. Untuk mengatasi hal itu kita bisa menggunakan teknik asinkron, artinya kode tersebut dijalankan namun dia sifatnya non-blocking, sehingga program tidak akan terlihat hang. Singkatnya, Anda memiliki dua kata kunci untuk dipahami - async dan await . Setiap fungsi yang ingin Anda jalankan secara tidak sinkron, perlu ditambahkan modifier async. Modifier ini diterapkan tepat setelah signature dari sebuah fungsi,
contohnya seperti ini :
import 'dart:async';
main(){
hitungDetik();
 print("hitung");
}

hitungDetik() async {
int i=1;
  while (i < 60){
    print(i);
    i++;
    // kita hentikan program 1 detik
    await Future.delayed(Duration(seconds: 1));
  }
}
  • async = untuk membuat fungsi kita bersifat asinkron
  • await = fungsinya untuk menunggu proses asinkron hingga selesai
Selanjutnya kita akan belajar mengenai Generator Pada Dart, Silahkan ikuti pembahasan dibawah ini:

3. Generator Pada Dart

Ada 2 macam fungsi generator dalam bahasa pemrograman Dart.
  • Generator Sinkron
  • Generator Asinkron
Sinkron generator mengembalikan objek Iterable dan generator asinkron mengembalikan objek Stream . Objek iterable adalah kumpulan nilai, yang dapat diakses secara berurutan , objek stream mewakili peristiwa data yang tidak sinkron.

Generator Sinkron
Untuk membuat generator sinkron, tandai body pada fungsi sebagai sync* lalu gunakan kata kunci yield untuk memberikan nilai.
import 'dart:io';

Iterrable<int> countStream(int max) sync * {
 for (int i = 0; i < max; ++i){
  yield i;
  sleep(Duration(seconds: 1));
 }
}

void main() {
 print('start');
 countStream(5).forEach((data){
  print(data);
 });
 print('end');
}
Generator Asinkron
Untuk membuat generator asinkron, tandai body pada fungsi sebagai async* lalu gunakan kata kunci yield untuk memberikan nilai.
import 'dart:io';

Stream<int> countStream(int max) async * {
 for (int i= 0; i < max; ++i){
  yield i;
  sleep(Duration(seconds: 1));
 }
}

void main() {
 print('start');
 countStream(5).lisren((data){
  print(data);
 },
 onDone: (){
  print("Done");
 });
 print('end');
}
Selanjutnya pembahasan mengenai Pemanggilan Class (Callable Class) Pada Dart, Silahkan simak pembahasan berikut: 


4. Pemanggilan Class (Callable Class) Pada Dart

Agar turunan class dapat dipanggil kita menggunakan method call (). Dalam contoh berikut, class PanggilFungsi mendefinisikan fungsi call () yang mengambil tiga string lalu menggabungkannya, memisahkan masing-masing dengan spasi, dan menambahkan tanda seru.
main() {
 //Pemanggilan Class
 var PF = new PanggilFungsi();
 var out = PF("Hallo","Selamat","pagi");
 print("$out");
}

class PanggilFungsi{
 call(String a, String b, String c)=>"$a, $b, $c";
}
Selanjutnya pembahasan menganai Isolasi Pada Pemrograman Dart, Silahkan simak pembahasan berikut:

5. Isolasi (Isolates) Pada Dart

Sebagian besar komputer, bahkan pada platform mobile, memiliki CPU multi-core. Untuk memanfaatkan semua inti itu, pengembang biasanya menggunakan shared memory . Namun, konsekuensinya adalah rawan kesalahan dan dapat menyebabkan kode menjadi rumit.

Bahasa pemrograman Dart memiliki kelebihan dengan adanya konstruksi nyata dari concurrency dan paralelisme . Kelebihan bahasa pemrograman Dart satu ini ditawarkan dengan bentuk Dart Isolates. Dengan adanya Dart Isolates, program-program akan terisolasi untuk bekerja secara independen tanpa adanya pembagian memori, akan tetapi tetap terdapat komunikasi diantaranya. Setiap program Dart menggunakan setidaknya satu buah isolasi.

6. Typedefs Pada Dart

Typedef , atau alias tipe-fungsi, membantu menentukan pointer ke kode yang dapat dieksekusi di dalam memori. Sederhananya, typedef dapat digunakan sebagai pointer yang mereferensikan suatu fungsi.
Diberikan di bawah ini adalah langkah-langkah untuk mengimplementasikan typedef.

Langkah 1: Mendefinisikan typedef signature
Typedef dapat digunakan untuk menentukan signature fungsi yang kita inginkan untuk mencocokkan fungsi tertentu. signature fungsi ditentukan oleh parameter fungsi (termasuk tipenya). Jenis kembali bukan bagian dari signature fungsi. Sintaksnya adalah sebagai berikut.
typedef nama_fungsi(paramenters)
Langkah 2: Menetapkan Fungsi ke Variabel typedefs
Variabel typedef dapat menunjuk ke fungsi apa pun yang memiliki signature yang sama dengan typedef . Anda dapat menggunakan signature berikut untuk menetapkan fungsi ke variabel typedefs.
type_def nama_var = nama_fungsi
Langkah 3: Menjalankan Fungsi
Variabel typedef dapat digunakan untuk menjalankan fungsi. Inilah cara Anda menjalankan fungsi.
nama_var(parameters)
Sekarang mari kita ambil contoh untuk memahami lebih lanjut tentang typedef di Dart.
Pada awalnya, mari kita mendefinisikan typedef . Di sini kita mendefinisikan signature fungsi. Fungsi akan mengambil dua parameter input dari tipe integer . Jenis kembali bukan merupakan bagian dari signature fungsi.
typedef BanyakOperasi(int noKesatu , int noKedua); //function signature
Selanjutnya, mari kita mendefinisikan fungsinya. Tentukan beberapa fungsi dengan signature fungsi yang sama dengan yang ada pada typedef Banyak Operasi.
{
BanyakOperasi oper :
//can point to any method of same signature
oper = Add;
oper(10,20);
oper = Subtract;
oper(30,20);
oper = Divide;
oper(50,5);
}
Akhirnya, kita akan memanggil fungsi melalui typedef . Deklarasikan variabel dari tipe BanyakOperasi. Tetapkan nama fungsi ke variabel yang dideklarasikan.
Variabel oper dapat menunjuk ke metode apa pun yang mengambil dua parameter bilangan bulat. Referensi Tambahkan fungsi ditugaskan ke variabel. Typedefs dapat beralih referensi fungsi saat runtime

Program Gabungan Typedefs

Mari kita sekarang menyatukan semua bagian dan melihat program yang lengkap.
typedef BanyakOperasi(int noSatu , int noKedua); //function signature Add(int noSatu, int second){    print("Add result is ${noSatu+second}"); } Subtract(int noSatu, int second){    print("Subtract result is ${noSatu-second}"); } Divide(int noSatu, int second){    print("Divide result is ${noSatu-second}"); } Calculator(int a, int b, BanyakOperasi oper){    print("Inside calculator");     oper(a,b); } void main(){ BanyakOperasi oper = Add; oper = Add; oper(10,20); oper = Subtract; oper(30,20); oper = Divide; oper(50,5); }
Catatan - Kode di atas akan menghasilkan kesalahan jika variabel typedef mencoba menunjuk ke fungsi dengan signature fungsi yang berbeda. Typedefs juga dapat diteruskan sebagai parameter ke suatu fungsi. Pertimbangkan contoh berikut .
typedef BanyakOperasi(int noSatu , int noKedua); //function signature Add(int noSatu, int second){    print("Add result is ${noSatu+second}"); } Subtract(int noSatu, int second){    print("Subtract result is ${noSatu-second}"); } Divide(int noSatu, int second){    print("Divide result is ${noSatu-second}"); } Calculator(int a, int b, BanyakOperasi oper){    print("Inside calculator");     oper(a,b); } main(){ Calculator(5,5,Add);
Calculator(5,5,Subtract);
Calculator(5,5,Divide); }

7. Metadata Pada Dart

Gunakan metadata untuk memberikan informasi tambahan tentang kode kita. Anotasi metadata dimulai dengan karakter ( @ ), diikuti oleh referensi ke konstanta compile-time (seperti deprecated) atau panggilan ke konstruktor konstan.
Ada dua anotasi untuk semua kode Dart: @deprecated dan @override. Berikut ini contoh penggunaan anotasi @deprecated:
class Television{
  /// Deprecated: gunakan [turnOn] sebagai gantinya
  @deprecated
  void activate(){
     turnOn();
  }

  /// Menyalakan Tv.
  void turnOn() {...}
}
Kita dapat menentukan anotasi metadata kita sendiri. Berikut adalah contoh mendefinisikan anotasi @todo yang mengambil dua argumen:
Dan ini contoh penggunaan anotasi @todo:
library todo;
class Todo{
  final String who;
  final String what;
  cost Todo(this.who, this.what);
}
@Todo('Muhammad Rizal', 'ubah ini agar melakukan sesuatu')
void doSomething(){
  print('lakukan sesuatu');
}
Metadata dapat muncul sebelum library, class, typedef, type parameters, constructor, factory, function, field, atau deklarasi variabel dan sebelum arahan import atau export . Kita dapat mengambil metadata saat runtime menggunakan reflection.

8. Komentar (Comment) Pada Dart

Bahasa Dart mendukung komentar satu baris, komentar multi-baris, dan komentar untuk dokumentasi.
Komentar Satu Baris
Komentar satu baris dimulai dengan tanda 2 garis miring ( // ). Semua kode di antara ( // ) sampai akhir baris akan diabaikan oleh compiler Dart.
void main(){
  //ini adalah komentar satu baris
  print('Hello Dart');
}
Komentar Multi-baris
Komentar multi-baris dimulai dengan tanda ( /* ) dan diakhiri dengan tanda ( */ ). Semua kode di antara ( /* ) dan ( */ ) akan diabaikan oleh compiler Dart (kecuali komentarnya adalah komentar dokumentasi; lihat bagian selanjutnya). Komentar multi-baris dapat bersarang.

void main(){
   /* Ini adalah komentar multi-baris
      Baris selanjutnya sampai akhir
      akan diabaikan oleh kompiler
   */

  print('Hello Dart');
}
Komentar Dokumentasi
Komentar dokumentasi adalah komentar multi-baris atau satu-baris yang dimulai dengan ( /// ) atau ( /** ). Menggunakan ( /// ) pada baris yang berurutan memiliki efek yang sama dengan komentar multi-baris dokumentasi.
Di dalam komentar dokumentasi, kompiler Dart mengabaikan semua teks kecuali jika tertutup dalam tanda kurung siku. Dengan menggunakan tanda kurung siku kita bisa merujuk ke class , method , field , top-level variable , function , dan parameter. Nama-nama dalam tanda kurung siku diselesaikan
dalam lingkup leksikal dari elemen program yang didokumentasikan.
/// Seekor unta Amerika Selatan yang didomestikasi (LLama glama).
///
/// Budaya Andes telah menggunakan Llama sebagai daging dan
/// binatang pengemas sejak zaman pra-Hispanik.
class Llama{
 String name;

 /// Beri makan Llama kita [food].
 ///
 /// Biasanya Llama memakan satu bae jerami per minggu.
 void feed(Food food){
   // ...
 }

 /// latih Llama kita dengan [activity] untuk
 /// [timeLimit] menit.
 coid exercise(Activity activity, int timeLimit){
   // ...
 }
}
Mungkin sampai disini dulu untuk pembahasan kali ini mengenai Panduan Lengkap Belajar Bahasa Pemrograman Dart. terimakasi teman-teman telah berkunjung dan membaca artikel ini.

Semoga bermanfaat, Salam Success :)

By: Muhammad Rizal Supriadi