Dart Programming Untuk Pemula Bagian 2

Pada artikel sebelumnya kita sudah membahas tentang apa itu Dart, cara menginstalnya, dan Tipe data pada Dart. Maka pada artikel kali ini kita akan melanjutkan pembahasan Dart Programming ke bagian Operator, Function, dan Control Flow (Loops).


1. Operator

Expression merupakan jenis pernyataan khusus yang merepresentasikan suatu nilai. Expression terdiri dari:

  • Operands – Merepresentasikan data
  • Operator – Mendefinisilan bagaimana operands akan diproses untuk menghasilkan nilai.

Contohnya, 2 + 3 = 5. Maka 2 dan 3 adalah operands dan simbol “+” (Plus) adalah operator.

Operator pada dart terdiri dari 6 bagian:

Arithmetic Operators

Equality and Relational Operators

Relational Operators berfungsi untuk menguji atau mendefinisikan jenis hubungan antara 2 entitas dengan mengembalikan nilai boolean yaitu True/False.

Type test Operators

Operator ini berguna untuk memeriksa Tipe Data saat runtime.

Bitwise Operators

Assignment Operators

Logical Operators

Operator ini biasanya digunakan untuk menggabungkan dua atau lebih kondisi dengan mengembalikan nilai boolean.


Conditional Operators

Dart memiliki 2 operator untuk mengevaluasi Expression yang mungkin memerlukan statement if-else.

condition ? expr1 : expr2 – Jika kondisi true, maka expression mengevaluasi expr1 (dan mengembalikan nilainya). jika falseexpr2 yang akan dievaluasi bersama nilainya.

expr1 ?? expr2 – Jika expr1 non-null,  maka kembalikan nilai dari expr1. Jika null, maka akan mengevaluasi dan mengembalikan nilai expr2.


2. Function

Function merupakan bangunan blok kode yang mudah dibaca, dipelihara, dan digunakan kembali. Di dalam function terdapat sekumpulan statement untuk melakukan tugas tertentu. Function mengatur program ke dalam blok kode, kemudian setelah didefinisikan function dapat dipanggil untuk mengakses kode yang ada di dalamnya. Berikut step-step untuk menggunakan function:

    1. Defining a Function yaitu menentukan apa dan bagaimana tugas tertentu akan dieksekusi, sebelum menggunakannya function wajib didefinisikan.
    2. Supaya function dapat digunakan maka kita harus melakukan Calling a Function, proses ini disebut sebagai function invocation.
    3. Selanjutnya, function juga dapat mengembalikan nilai bersamaan dengan kontrol untuk kembali ke pemanggilnya atau caller. Fungsi tersebut dikenal juga sebagai returning functions. Berikut sintaksnya:
      return_type function_name(){  
         //statements  
         return value;  
      }


    4. Terakhir, pada function kita juga dapat memberikan parameter. Parameter sendiri merupakan mekanisme untuk meneruskan nilai ke function. Nilai parameter tersebut akan diteruskan ke function selama invocation, kecuali nilai sudah ditentukan secara eksplisit. Kemudian jumlah nilai yang diteruskan ke suatu function harus sesuai dengan jumlah parameter yang sudah ditentukan. Berikut sintaksnya:
      Function_name(data_type param_1, data_type param_2[…]) { 
         //statements 
      }
      

Optional Parameters

Optional Parameters dapat digunakan ketika argumen tidak perlu diteruskan pada saat function dieksekusi. Parameter dapat ditandai optional dengan menambahkan tanda tanya(?) pada namanya.  Ada 3 jenis tipe dari Optional Parameters, sebagai berikut:

  1. Jenis Pertama yaitu Optional Positional Parameter, untuk menggunakan jenis ini kita harus menggunakan kurung siku. Berikut adalah sintaks dari Optional Positional Parameter:
    void function_name(param1, [optional_param_1, optional_param_2]) { } 
    

    Jika optional patameters tidak memberikan nilai, maka secara otomatis akan diatur ke NULL.

  2. Jenis Kedua yaitu Optional Named Parameter. Tidak seperti positional parameter, Named Parameter harus ditentukan saat nilai sedang diteruskan. Tanda kurung kurawal { } digunakan untuk menetapkan Optional Named Parameter. Berikut adalah sintaks dari Optional Named Parameter:
    ➡️
    Syntax – Declaring the function

    void function_name(a, {optional_param1, optional_param2}) { } 
    

    ➡️Syntax – Calling the function

    function_name(optional_param:value,…); 
    

  3. Jenis yang terakhir yaitu Optional Parameters with Default Values. Parameter function juga dapat diberi nilai secara default. Namun, parameter tersebut juga dapat secara eksplisit melewati nilai. Berikut adalah sintaks dari Optional Parameters with Default Values:
    function_name(param1,{param2= default_value}) { 
       //...... 
    }

Recursive Dart Functions

Recursion adalah teknik untuk mengulangi suatu operasi dengan melakukan pemanggilan function ke dirinya sendiri berulang kali sampai tiba di suatu hasil. Recursion paling baik diterapkan ketika kita perlu memanggil function yang sama berulang kali dengan parameter berbeda dari dalam satu perulangan.

Lambda Functions

Lambda Functions adalah mekanisme ringkas untuk merepresentasikan fungsi. Fungsi-fungsi ini juga disebut sebagai Arrow functions.


3. Control Flow (Loops)

Terkadang kita temui instruksi tertentu memerlukan instruksi yang berulang, maka Loops adalah cara yang paling ideal untuk melakukan hal tersebut. Sebuah Loops, mewakili satu set instruksi yang harus diulang dan pengulangan tersebut disebut iteration. Berikut klasifikasi dari Loops:

Mari kita mulai diskusi tentang Definite Loops. Perulangan yang jumlah iterasinya pasti/tetap disebut definite loop atau perulangan pasti. Ada 2 jenis perulangan pasti yaitu for loop dan for…in loop, penjelasannya sebagai berikut:

  1. for loop merupakan implementasi dari definite loop yang mengeksekusi blok kode secara berulang kali dengan batasan tertentu. Ini dapat digunakan untuk mengulangi serangkaian pengeksekusian blok kode yang memiliki nilai tetap, seperti array. Berikut adalah sintaks dari for loop:
    for (initial_count_value; termination-condition; step) { 
       //statements 
    }    
    


  2. Jenis yang berikutnya yaitu for…in loop, biasanya digunakan untuk mengulang properti dari sebuah objek. Berikut sintaksnya:
    for (variablename in object){  
       statement or block to execute  
    }

    Dalam setiap iterasi, satu properti dari objek ditetapkan ke sebuah variabel dan loop ini berlanjut hingga semua properti objek tersebut habis.

Selanjutnya kita akan membahas indefinite loops atau loop tak tentu, indefinite loops digunakan ketika jumlah iterasi dalam loop tidak tentu atau tidak diketahui. Indefinite loops dapat diimplementasikan menggunakan while loop dan do…while loop. Contohnya sebagai berikut:

  1. while loop mengeksekusi instruksi setiap kalo kondisi yang ditentukan bernilai true. Dengan kata lain, loop mengevaluasi kondisi sebelum blok kode dieksekusi. Berikut ilustrasi dari while loop:Berikut adalah sintaks dari while loop:
    while (expression) {
       Statement(s) to be executed if expression is true  
    }
    

  2. do…while loop hampir sama seperti while loop, namun do…while loop tidak mengevaluasi kondisi pada saat pertama kali loop dieksekusi. Kondisi akan dievaluasi pada iterasi berikutnya, dengan kata lain blok kode akan dieksekusi setidaknya sekali dalam perulangan do…while loop. Berikut ilustrasi dari do…while loop:Berikut adalah sintaks dari do…while loop:
    do {  
       Statement(s) to be executed;  
    } while (expression);

Loops di Dart terdapat Loop Control Statements yang harus kita ketahui, contohnya sebagai berikut:

  1. Break Statement digunakan untuk mengambil kendali sebuah konstruksi kode. Menggunakan Break Statement pada sebuah loop menyebabkan eksekusi program akan langsung keluar dari loop.
  2. Continue Statement akan melewatkan konstruksi kode berikutnya dalam iterasi saat program berjalan dan mengambil kendali jalannya program untuk kembali ke awal perulangan atau loop. Tidak seperti break yang keluar dari loop, continue akan mengakhiri iterasi yang sedang berjalan dan memulai iterasi berikutnya.Contoh di atas menampilkan nilai genap antara 0 sampai 20. Perulangan akan keluar dari iterasi yang sedang berjalan saat angkanya genap.
Penggunaan Labels pada Control Flow

Secara sederhana Label diidentifikasi diikuti oleh titik 2 ( : ) yang diterapkan pada sebuah statement atau sebuah blok kode. Sebuah Label dapat digunakan dengan break dan continue supaya dapat mengontrol aliran program dengan lebih tepat. Contohnya penerapan Label pada break:Selanjutnya adalah penerapan Label pada continue:


Jika ada pertanyaan silahkan komen dan jika artikel ini dirasa bermanfaat, jangan lupa like dan sharenya ya teman-teman. ??????? Sampai bertemu di artikel selanjutnya.
Terima Kasih, Assalamu’alaykum… Salam KODINGINDONESIA

Referensi : dart.dev, tutorialspoint.com 

Anton Prafanto

Konten developer kodingindonesia.com & staf pengajar tetap di Universitas Mulawarman Samarinda

all author posts
void main() {
var num1 = 101;
var num2 = 2;
//Operasi Penjumlahan
var add = num1+num2;
print("Addition: ${add}");
//Operasi Pengurangan
var subtract = num1-num2;
print("Subtraction: ${subtract}");
//Operasi Perkalian
var multiply = num1*num2;
print("Multiplication: ${multiply}");
//Operasi Pembagian
var divide = num1/num2;
print("Division: ${divide}");
//Operasi Pembulatan Hasil Bagi
var value = num1~/num2;
print("Division returning Integer: ${value}");
//Operasi Modulus/Mencari Sisa Bagi
var modulo = num1%num2;
print("Remainder: ${modulo}");
//Operasi Increment
num1++;
print("Increment: ${num1}");
//Operasi Decrement
num2--;
print("Decrement: ${num2}");
}
void main() {
var num1 = 5;
var num2 = 9;
//Lebih Dari
var value = num1>num2;
print('num1 greater than num2 :: ' +value.toString());
//Kurang Dari
value = num1<num2;
print('num1 lesser than num2 :: ' +value.toString());
//Lebih Dari Sama Dengan
value = num1 >= num2;
print('num1 greater than or equal to num2 :: ' +value.toString());
//Kurang Dari Sama Dengan
value = num1 <= num2;
print('num1 lesser than or equal to num2 :: ' +value.toString());
//Tidak Sama Dengan
value = num1 != num2;
print('num1 not equal to num2 :: ' +value.toString());
//Sama Dengan
value = num1 == num2;
print('num1 equal to num2 :: ' +value.toString());
}
void main() {
//Menguji apakah variabel n bernilai integer atau tidak
int n = 2;
print(n is int);
//Menguji apakah variabel m tidak bernilai integer
double m = 2.20;
var num = m is! int;
print(num);
}
void main() {
var a = 2; // Bit presentation 0010
var b = 3; // Bit presentation 0011
//0010 AND 0011 = 10 (dalam biner), 2 (desimal)
var result = (a & b);
print("(a & b) => ${result}");
//0010 OR 0011 = 11 (dalam biner), 3 (desimal)
result = (a | b);
print("(a | b) => ${result}");
//0010 XOR 0011 = 01 (dalam biner), 1 (desimal)
result = (a ^ b);
print("(a ^ b) => ${result}");
//0011 NOT = FFFC (dalam biner), -4 (desimal)
result = (~b);
print("(~b) => ${result}");
//0010 Geser Ke Kiri 3 kali, 0001 0000 (dalam biner), 16 (desimal)
result = (a << b);
print("(a << b) => ${result}");
//0010 Geser Ke Kanan 3 kali, 0000 0000 (dalam biner), 0 (desimal)
result = (a >> b);
print("(a >> b) => ${result}");
}
void main() {
var a = 12;
var b = 3;
//Pengganti a = a + b
a+=b;
print("a+=b : ${a}");
//Pengganti a = a - b
a = 12; b = 13;
a-=b;
print("a-=b : ${a}");
//Pengganti a = a * b
a = 12; b = 13;
a*=b;
print("a*=b' : ${a}");
//Pengganti a = a / b;
num a1 = 12; var b1 = 13;
a1/=b1;
print("a1/=b1 : ${a1}");
//Pengganti a = a % b;
a = 12; b = 13;
a%=b;
print("a%=b : ${a}");
}
void main() {
var a = 10;
var b = 12;
//Operator Logika && atau AND
var res = (a<b)&&(b>10);
print(res);
}
void main() {
var a = 10;
var b = 12;
//Operator Logika || atau OR
var res = (a>b)||(b<10);
//Operator Logika ! atau NOT
print(res);
var res1 = !(a==b);
print(res1);
}
void main() {
var a = 10;
//condition ? expr1 : expr2
var res = a > 12 ? "value greater than 10":"value lesser than or equal to 10";
print(res);
}
void main() {
var a = null;
var b = 12;
//expr1 ?? expr2
var res = a ?? b;
print(res);
}
//Mendefinisikan Function
test1() {
print("function1 called");
}
//atau dapat juga seperti di bawah ini
//Mendefinisikan Function
void test2() {
print("function2 called");
}
void main() {
//Memanggil Function test
test();
}
//Mendefinisikan function
test() {
print("function called");
}
void main() {
//Memanggil Function
print(test());
}
//Mendefinisikan Function
String test() {
//Mengembalikan nilai menggunakan fungsi "return"
return "hello world";
}
void main() {
//Memanggil Function yang memiliki parameter
test_param(123,"this is a string");
}
//Mendefinisikan Function dengan tipe data parameternya
test_param(int n1,String s1) {
print(n1);
print(s1);
}
void main() {
//Memanggil Function yang memiliki parameter
test_param(123,"this is a string");
}
//Mendefinisikan Function dengan tipe data parameternya
test_param(int n1,String s1) {
print(n1);
print(s1);
}
void main() {
test_param(123);
test_param(123,s1:'hello');
test_param(123,s2:'hello',s1:'world');
}
test_param(n1,{s1,s2}) {
print(n1);
print(s1);
}
void main() {
test_param(123);
}
void test_param(n1,{s1:12}) {
print(n1);
print(s1);
}
void main() {
print(factorial(6));
}
factorial(number) {
if (number <= 0) {
// termination case
return 1;
} else {
return (number * factorial(number - 1));
// function memanggil dirinya sendiri
}
}
void main() {
printMsg();
print(test());
}
printMsg()=>
print("hello");
int test()=>123;
// returning function
void main() {
var num = 5;
var factorial = 1;
for( var i = num ; i >= 1; i-- ) {
factorial *= i ;
}
print(factorial);
}
void main() {
for(int temp, i = 0, j = 1; j<30; temp = i, i = j, j = i + temp) {
print('${j}');
}
}
void main() {
var obj = [12,13,14];
for (var prop in obj) {
print(prop);
}
}
void main() {
var num = 5;
var factorial = 1;
while(num >=1) {
factorial = factorial * num;
num--;
}
print("The factorial is ${factorial}");
}
void main() {
var n = 10;
do {
print(n);
n--;
}
while(n>=0);
}
void main() {
var i = 1;
while(i<=10) {
if (i % 5 == 0) {
print("The first multiple of 5 between 1 and 10 is : ${i}");
break ;
//Keluar Loop jika kelipatan pertama ditemukan
}
i++;
}
}
void main() {
var num = 0;
var count = 0;
for(num = 0;num<=20;num++) {
if (num % 2==0) {
continue;
}
count++;
}
print(" The count of odd values between 0 and 20 is: ${count}");
}
void main() {
outerloop: //Ini merupakan Label
for (var i = 0; i < 5; i++) {
print("Innerloop: ${i}");
innerloop: //Ini merupakan Label
for (var j = 0; j < 5; j++) {
if (j > 3 ) break ;
//Keluar dari loop terdalam
if (i == 2) break innerloop;
//Melakukan hal yg sama
if (i == 4) break outerloop;
//Keluar dari loop terluar
print("Innerloop: ${j}");
}
}
}
void main() {
outerloop: //Ini merupakan label
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}");
}
}
}