Masukkan Password
37 Exercise Solution Chapter 3 | Chapter 3 Functions in Dart | Learn Dart Language | Dart Course
Materi ini adalah latihan Chapter 3 Dart, dan sebenarnya hampir semua soal di sini mengulang konsep-konsep penting yang sudah dipelajari: function, parameter, return, loop, condition, List, Map, dart:math, dan default parameter.
Ada beberapa kesalahan transkripsi dari caption, misalnya βdotβ maksudnya Dart, βp wβ maksudnya pow(), dan βscareβ maksudnya square/pangkat. Saya akan jelaskan versi Dart yang benar dan mudah dipahami.
1. Mencetak nama menggunakan Function
Soalnya:
Buat program Dart untuk mencetak nama sendiri menggunakan function.
Contoh:
void printName() {
print("Budi");
}
void main() {
printName();
}
Cara membacanya
void printName()
Artinya kita membuat function bernama printName.
voidβ function tidak mengembalikan nilai.printNameβ nama function.()β function tidak membutuhkan parameter.
Kemudian:
print("Budi");
digunakan untuk mencetak nama.
Lalu di main():
printName();
kita memanggil function tersebut.
Alurnya
main()
β
printName()
β
print("Budi")
β
Budi
Inti yang harus dipahami
Function bisa dianggap seperti mesin.
Function printName
β
jalankan mesin
β
cetak nama
Kalau function tidak dipanggil, isinya tidak akan dijalankan.
2. Mencetak bilangan genap antara 50β100
Soalnya:
Buat function untuk mencetak bilangan genap antara 50 dan 100.
Bilangan genap:
50
52
54
56
...
100
Kita bisa menggunakan for dan operator %.
void printEvenNumbers() {
for (int i = 50; i <= 100; i++) {
if (i % 2 == 0) {
print(i);
}
}
}
void main() {
printEvenNumbers();
}
Kenapa menggunakan %?
Operator % adalah modulo, yaitu mencari sisa pembagian.
Contoh:
10 % 2 = 0
11 % 2 = 1
12 % 2 = 0
13 % 2 = 1
Jadi:
i % 2 == 0
artinya:
“Apakah
ihabis dibagi 2?”
Kalau iya β genap.
Bagaimana for bekerja?
for (int i = 50; i <= 100; i++)
Bisa dibaca:
Mulai
idari 50, jalankan selamai <= 100, dan setiap putaran tambahkan 1.
Urutannya:
i = 50 β genap β print
i = 51 β ganjil β tidak print
i = 52 β genap β print
i = 53 β ganjil β tidak print
...
i = 100 β genap β print
Catatan
Caption menggunakan:
i = 51
Itu juga bisa, karena angka genap pertama setelah 51 adalah 52. Tetapi memulai dari 50 lebih sederhana dan lebih langsung.
3. Function greet
Soalnya:
Buat function bernama
greetyang menerima nama sebagai argument dan mencetak pesan greeting.
Contoh:
void greet(String name) {
print("Hello, $name!");
}
void main() {
greet("Budi");
}
Output:
Hello, Budi!
Apa itu name?
Di sini:
String name
name adalah parameter.
Kita mengatakan kepada function:
“Function ini membutuhkan sebuah data berupa String.”
Kemudian ketika dipanggil:
greet("Budi");
"Budi" adalah argument.
Jadi:
| Istilah | Contoh |
|---|---|
| Parameter | String name |
| Argument | "Budi" |
Gampangnya:
Function
β
greet(name)
β
masukkan "Budi"
β
Hello, Budi!
4. Membuat Random Password
Soalnya:
Buat program Dart yang menghasilkan password secara random.
Di sini kita membutuhkan library:
import 'dart:math';
Lalu:
import 'dart:math';
void main() {
Random random = Random();
int password = random.nextInt(10000);
print(password);
}
Contoh output:
2593
Kalau dijalankan lagi bisa:
1740
atau:
8372
Apa fungsi Random()?
Random random = Random();
Kita membuat objek untuk menghasilkan angka acak.
Kemudian:
random.nextInt(10000)
artinya:
Buat angka integer random dari
0sampai9999.
Perlu diperhatikan: batas atas tidak termasuk.
Jadi:
nextInt(10)
menghasilkan:
0 - 9
bukan:
0 - 10
Kalau ingin password 4 digit?
Cara sederhana:
int password = 1000 + random.nextInt(9000);
Hasilnya selalu berada di antara:
1000 - 9999
Namun ini masih berupa angka, bukan password yang benar-benar aman. Untuk latihan Dart, contoh tersebut cukup untuk memahami konsep random.
5. Menghitung luas lingkaran
Soalnya:
Buat function untuk menghitung luas lingkaran.
Rumus:
$$ L = \pi r^2 $$Artinya:
Luas = pi Γ radius Γ radius
Contoh:
import 'dart:math';
double circleArea(double radius) {
return pi * radius * radius;
}
void main() {
double result = circleArea(30);
print(result);
}
Kenapa menggunakan double?
Karena hasil luas bisa berupa angka desimal.
Misalnya:
30 Γ 30 Γ 3.14159
= 2827.431
Jadi lebih cocok:
double
daripada:
int
Apa itu pi?
Karena kita meng-import:
import 'dart:math';
kita bisa menggunakan:
pi
Dart sudah menyediakan nilai Ο.
Jadi tidak perlu menulis sendiri:
double pi = 3.1415;
6. Membalik String
Soalnya:
Buat function untuk membalik sebuah string.
Misalnya:
hello
menjadi:
olleh
Kodenya:
String reverseString(String text) {
return text.split('').reversed.join('');
}
void main() {
String result = reverseString("hello");
print(result);
}
Output:
olleh
Mari kita pecah bagian ini:
text.split('')
Misalnya:
"hello"
dipecah menjadi:
[h, e, l, l, o]
Kemudian:
.reversed
membalik urutannya:
[o, l, l, e, h]
Kemudian:
.join('')
menggabungkannya kembali:
olleh
Jadi:
"hello"
β
split('')
β
[h,e,l,l,o]
β
reversed
β
[o,l,l,e,h]
β
join('')
β
"olleh"
7. Menghitung pangkat menggunakan pow()
Soalnya:
Hitung pangkat suatu angka.
Misalnya:
5Β³ = 125
Di Dart kita bisa menggunakan:
import 'dart:math';
void main() {
num result = pow(5, 3);
print(result);
}
Output:
125
Formatnya:
pow(base, exponent)
Misalnya:
pow(2, 3)
artinya:
2Β³
atau:
2 Γ 2 Γ 2 = 8
Contoh lain:
pow(8, 4)
berarti:
8β΄
Kenapa hasilnya num?
pow() dapat menghasilkan nilai yang tidak selalu cocok diperlakukan sebagai int, sehingga penggunaan:
num
lebih fleksibel.
8. Function add
Soalnya:
Buat function bernama
addyang menerima dua angka dan mengembalikan hasil penjumlahannya.
int add(int a, int b) {
return a + b;
}
void main() {
int result = add(10, 20);
print(result);
}
Output:
30
Perhatikan:
int add(int a, int b)
Artinya function:
- namanya
add - menerima
a - menerima
b - keduanya bertipe
int - mengembalikan
int
Kemudian:
return a + b;
mengembalikan hasil.
return itu apa?
Bayangkan function sebagai mesin:
10
β
βββββββββββ
β add β
βββββββββββ
β
20
β
30
return adalah cara function mengirim hasil keluar.
Contoh:
int add(int a, int b) {
return a + b;
}
Kemudian:
int result = add(10, 20);
berarti:
result = 30
9. Mencari angka terbesar dari 3 angka
Soalnya:
Buat function
maxNumberyang menerima tiga angka dan mengembalikan angka terbesar.
Misalnya:
10, 20, 30
hasilnya:
30
Kita bisa menggunakan max() dari dart:math.
import 'dart:math';
int maxNumber(int a, int b, int c) {
int largest = max(a, b);
largest = max(largest, c);
return largest;
}
void main() {
int result = maxNumber(10, 20, 30);
print(result);
}
Bagaimana cara kerjanya?
Pertama:
int largest = max(a, b);
Misalnya:
a = 10
b = 20
maka:
largest = 20
Kemudian:
largest = max(largest, c);
Misalnya:
largest = 20
c = 30
maka:
largest = 30
Terakhir:
return largest;
Hasil:
30
Polanya
Bandingkan A dan B
β
ambil yang terbesar
β
bandingkan dengan C
β
ambil yang terbesar
β
return
Ini sebenarnya konsep yang sangat berguna untuk mencari nilai maksimum dari banyak data.
10. Function isEven
Soalnya:
Buat function
isEvenyang menerima angka dan mengembalikantruejika angka tersebut genap, danfalsejika ganjil.
bool isEven(int number) {
return number % 2 == 0;
}
void main() {
print(isEven(10));
print(isEven(5));
}
Output:
true
false
Kenapa return type-nya bool?
Karena hasilnya hanya ada dua kemungkinan:
true
false
Jadi:
bool
adalah tipe data yang tepat.
Logikanya
Untuk angka 10:
10 % 2
hasilnya:
0
Maka:
0 == 0
hasilnya:
true
Sedangkan 5:
5 % 2
hasilnya:
1
Maka:
1 == 0
hasilnya:
false
Menariknya, kita bahkan tidak perlu menulis if:
bool isEven(int number) {
return number % 2 == 0;
}
Karena:
number % 2 == 0
sendiri sudah menghasilkan bool.
11. Function createUser dan Default Parameter
Ini bagian yang cukup penting karena memperkenalkan default parameter dan named parameter.
Soalnya:
Buat function
createUserdengan parametername,age, danisActive, di manaisActivememiliki nilai defaulttrue.
Contoh modern yang sangat rapi:
Map<String, dynamic> createUser({
required String name,
required int age,
bool isActive = true,
}) {
return {
"name": name,
"age": age,
"isActive": isActive,
};
}
Kemudian:
void main() {
var user = createUser(
name: "Budi",
age: 23,
);
print(user);
}
Hasil:
{name: Budi, age: 23, isActive: true}
Kenapa isActive tidak perlu ditulis?
Karena:
bool isActive = true
berarti:
Kalau pengguna tidak memberikan nilai
isActive, gunakantrue.
Jadi:
createUser(
name: "Budi",
age: 23,
);
secara otomatis dianggap seperti:
createUser(
name: "Budi",
age: 23,
isActive: true,
);
Kalau kita ingin false?
Kita bisa menggantinya:
var user = createUser(
name: "Budi",
age: 23,
isActive: false,
);
Sekarang:
isActive = false
Jadi default value bukan berarti nilainya selalu tetap.
Default hanya digunakan jika argument tersebut tidak diberikan.
12. Named Parameter vs Positional Parameter
Bagian ini sangat penting untuk dipahami.
A. Positional parameter
Contoh:
void greet(String name, int age) {
print(name);
print(age);
}
Memanggil:
greet("Budi", 23);
Urutannya penting:
"Budi" β name
23 β age
Kalau:
greet(23, "Budi");
akan error karena tipe dan posisinya salah.
B. Named parameter
Menggunakan {}:
void greet({
required String name,
required int age,
}) {
print(name);
print(age);
}
Pemanggilan:
greet(
name: "Budi",
age: 23,
);
Di sini kita secara jelas mengatakan:
name = "Budi"
age = 23
Jadi lebih mudah dibaca.
13. Default value pada positional parameter
Kalau menggunakan positional parameter, default value harus berada dalam [].
Contoh:
void createUser(
String name,
int age, [
bool isActive = true,
]) {
print(name);
print(age);
print(isActive);
}
Sekarang kita bisa:
createUser("Budi", 23);
Output:
Budi
23
true
Karena isActive tidak diberikan.
Tetapi kita juga bisa:
createUser("Budi", 23, false);
Output:
Budi
23
false
Bedanya {} dan []
Ini perlu diingat:
{} β named parameter
void example({
String name = "Budi",
}) {}
Pemanggilan:
example(name: "Andi");
[] β optional positional parameter
void example(
String name, [
int age = 20,
]) {}
Pemanggilan:
example("Budi");
atau:
example("Budi", 25);
14. Menghitung luas persegi panjang
Soalnya:
Buat function
calculateAreayang menghitung luas persegi panjang.lengthdanwidthmemiliki default value 1.
Rumus:
$$ L = panjang \times lebar $$Contoh dengan positional parameter:
double calculateArea([
double length = 1,
double width = 1,
]) {
return length * width;
}
Kemudian:
void main() {
print(calculateArea());
print(calculateArea(13, 44));
}
Output pertama:
1
Karena:
length = 1
width = 1
1 Γ 1 = 1
Sedangkan:
calculateArea(13, 44)
menghasilkan:
13 Γ 44 = 572
15. Versi Named Parameter
Kita juga bisa membuatnya seperti ini:
double calculateArea({
double length = 1,
double width = 1,
}) {
return length * width;
}
Pemanggilannya:
void main() {
print(calculateArea());
print(
calculateArea(
length: 55,
width: 898,
),
);
}
Perbedaannya sangat jelas:
Positional
calculateArea(55, 898);
Named
calculateArea(
length: 55,
width: 898,
);
Untuk function dengan banyak parameter, named parameter sering lebih mudah dibaca.
16. Konsep Besar yang Dilatih di Chapter 3
Kalau diperhatikan, 12 soal ini sebenarnya mengulang beberapa konsep utama.
| Soal | Konsep utama |
|---|---|
| 1. Print name | Function |
| 2. Even numbers | Function + for + if + % |
| 3. Greet | Parameter + String |
| 4. Random password | dart:math + Random |
| 5. Circle area | Function + pi + matematika |
| 6. Reverse string | String + split + reversed + join |
| 7. Power | pow() |
| 8. Add | Parameter + return |
| 9. Max number | max() + perbandingan |
| 10. Is even | bool + % |
| 11. Create user | Map + named parameter + default value |
| 12. Rectangle area | Default parameter + function |
17. Cara berpikir saat mengerjakan soal Function
Ini bagian yang menurut saya paling penting untuk kamu kuasai.
Ketika mendapat soal seperti:
Buat function untuk menghitung luas persegi panjang.
Jangan langsung mengetik kode.
Tanyakan 4 hal:
1. Apa nama function-nya?
Misalnya:
calculateArea
2. Apa input-nya?
Untuk persegi panjang:
length
width
3. Apa output-nya?
Luas berupa angka.
Misalnya:
double
4. Bagaimana prosesnya?
Rumus:
length Γ width
Baru kita tulis:
double calculateArea(double length, double width) {
return length * width;
}
18. Pola dasar Function Dart
Hampir semua function yang ada di latihan ini mengikuti pola:
returnType functionName(parameters) {
// proses
return result;
}
Contoh:
int add(int a, int b) {
return a + b;
}
Kita bisa membacanya:
Saya membuat function bernama
add, menerima duaint, dan mengembalikanint.
Kalau tidak mengembalikan nilai
Gunakan:
void
Contoh:
void greet(String name) {
print("Hello, $name");
}
Function ini langsung melakukan sesuatu, tetapi tidak mengembalikan hasil.
Kalau mengembalikan teks
String reverseString(String text) {
return text.split('').reversed.join('');
}
Kalau mengembalikan angka
int add(int a, int b) {
return a + b;
}
atau:
double calculateArea(double length, double width) {
return length * width;
}
Kalau mengembalikan true/false
bool isEven(int number) {
return number % 2 == 0;
}
Jadi tipe return mengikuti jenis hasil yang dikembalikan.
19. Perbedaan print dan return
Ini juga sangat penting.
Misalnya:
void add(int a, int b) {
print(a + b);
}
Function ini mencetak hasil.
Tetapi:
int add(int a, int b) {
return a + b;
}
Function ini mengembalikan hasil.
Bedanya:
print
Function β layar
return
Function β program yang memanggil function
Contoh return:
int result = add(10, 20);
Hasil dari function bisa disimpan ke:
result
Kemudian bisa digunakan lagi:
print(result);
Inilah salah satu alasan return sangat penting dalam programming.
20. Versi lengkap semua latihan
Kalau kamu ingin melihat semuanya sebagai satu file latihan, kurang lebih seperti ini:
import 'dart:math';
void printName() {
print("Budi");
}
void printEvenNumbers() {
for (int i = 50; i <= 100; i++) {
if (i % 2 == 0) {
print(i);
}
}
}
void greet(String name) {
print("Hello, $name!");
}
double circleArea(double radius) {
return pi * radius * radius;
}
String reverseString(String text) {
return text.split('').reversed.join('');
}
num calculatePower(num base, num exponent) {
return pow(base, exponent);
}
int add(int a, int b) {
return a + b;
}
int maxNumber(int a, int b, int c) {
int largest = max(a, b);
largest = max(largest, c);
return largest;
}
bool isEven(int number) {
return number % 2 == 0;
}
Map<String, dynamic> createUser({
required String name,
required int age,
bool isActive = true,
}) {
return {
"name": name,
"age": age,
"isActive": isActive,
};
}
double calculateArea({
double length = 1,
double width = 1,
}) {
return length * width;
}
void main() {
printName();
printEvenNumbers();
greet("Budi");
print(circleArea(30));
print(reverseString("hello"));
print(calculatePower(5, 3));
print(add(10, 20));
print(maxNumber(10, 20, 30));
print(isEven(10));
print(createUser(
name: "Budi",
age: 23,
));
print(calculateArea());
print(calculateArea(
length: 13,
width: 44,
));
}
π― Kesimpulan Chapter 3
Kalau disederhanakan, inti latihan ini adalah belajar membuat function yang bisa menerima data, mengolah data, lalu menghasilkan sesuatu.
Pola berpikirnya:
INPUT
β
ββββββββββββ
β FUNCTION β
ββββββββββββ
β
PROSES
β
OUTPUT
Contoh:
10 + 20
β
add()
β
30
Contoh:
"hello"
β
reverseString()
β
"olleh"
Contoh:
10
β
isEven()
β
true
Dan yang paling penting untuk kamu ingat dari latihan ini:
void β function tidak mengembalikan hasil.
return β mengirim hasil keluar dari function.
parameter β data yang disiapkan function untuk diterima.
argument β data yang kita kirim saat memanggil function.
bool β hasil true atau false.
% β mencari sisa pembagian, sangat berguna untuk mengecek genap/ganjil.
{} pada parameter β named parameter.
[] pada parameter β optional positional parameter.
= true / = 1 β default value.
required β argument wajib diberikan.
Kalau kamu sudah memahami bagian-bagian ini, berarti fondasi Function di Dart kamu sudah cukup kuat untuk masuk ke materi berikutnya.