Masukkan Password
36 Chapter 3 Practice Exercise | Chapter 3 Functions in Dart | Learn Dart Language | Dart Course
Ini adalah latihan setelah Chapter 3 selesai, dan sebenarnya soal-soalnya dibuat untuk menguji beberapa konsep yang sudah kamu pelajari: function, parameter, return value, kondisi, loop, random, String, dan default parameter.
Saya akan jelaskan maksud setiap soal, konsep yang diuji, cara berpikirnya, lalu contoh penyelesaiannya dalam Dart. Saya juga akan memperbaiki beberapa istilah dari caption yang kemungkinan salah karena hasil speech-to-text, misalnya at maksudnya kemungkinan add, dan Max number maksudnya fungsi untuk mencari nilai maksimum.
🧠 Gambaran besar latihan
Ada 12 soal:
| No | Latihan | Konsep utama |
|---|---|---|
| 1 | Print nama | Function |
| 2 | Print bilangan genap | Function + Loop |
| 3 | Greet | Parameter |
| 4 | Random password | Random + String |
| 5 | Luas lingkaran | Function + Formula |
| 6 | Reverse String | String + Function |
| 7 | Pangkat | pow() |
| 8 | Penjumlahan 2 angka | Parameter + Return |
| 9 | Nilai terbesar dari 3 angka | Perbandingan |
| 10 | Cek bilangan genap | Boolean + if |
| 11 | Create user | Default parameter |
| 12 | Luas persegi panjang | Default parameter + Return |
Mari kita bahas satu per satu.
1. Print nama menggunakan function
Soalnya:
Buat program Dart untuk mencetak nama sendiri menggunakan function.
Misalnya nama kita adalah Budi.
Tanpa function kita bisa:
void main() {
print("Budi");
}
Tetapi soal meminta menggunakan function.
Maka:
void printName() {
print("Budi");
}
void main() {
printName();
}
Apa yang terjadi?
Kita membuat function:
void printName() {
print("Budi");
}
Kemudian memanggilnya:
printName();
Alurnya:
main()
↓
printName()
↓
print("Budi")
Kenapa menggunakan function?
Karena function memungkinkan kita membuat sebuah pekerjaan yang bisa dipanggil kembali.
Misalnya:
printName();
printName();
printName();
Maka nama akan dicetak tiga kali tanpa harus menulis ulang:
print("Budi");
2. Mencetak bilangan genap dalam interval
Soalnya:
Buat function untuk mencetak bilangan genap di antara suatu interval.
Misalnya kita ingin:
1 sampai 20
Bilangan genapnya:
2
4
6
8
10
12
14
16
18
20
Kita bisa membuat:
void printEvenNumbers(int start, int end) {
for (int i = start; i <= end; i++) {
if (i % 2 == 0) {
print(i);
}
}
}
void main() {
printEvenNumbers(1, 20);
}
Mari pahami bagian pentingnya
Function:
void printEvenNumbers(int start, int end)
mempunyai dua parameter:
start → angka awal
end → angka akhir
Ketika kita memanggil:
printEvenNumbers(1, 20);
berarti:
start = 1
end = 20
Bagaimana mengetahui angka genap?
Kita menggunakan operator modulus:
%
Contoh:
4 % 2 = 0
5 % 2 = 1
6 % 2 = 0
7 % 2 = 1
Jadi:
i % 2 == 0
artinya:
Sisa pembagian
idengan 2 adalah 0.
Kalau iya, berarti i genap.
Ingat:
Genap → habis dibagi 2
Ganjil → masih memiliki sisa 1 ketika dibagi 2
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!
4. Apa itu parameter dan argument?
Ini penting karena kamu akan sering bertemu istilah ini.
Pada:
void greet(String name)
name disebut parameter.
Ketika:
greet("Budi");
"Budi" disebut argument.
Sederhananya:
Parameter = tempat menerima data
Argument = data yang dikirim
Analoginya seperti function adalah sebuah mesin:
"Budi"
↓
┌─────────────┐
│ greet │
│ │
└─────────────┘
↓
Hello, Budi!
5. Membuat random password
Soalnya:
Buat program Dart yang menghasilkan password secara random.
Ini lebih menarik karena kita menggabungkan beberapa konsep.
Misalnya kita ingin menghasilkan password seperti:
a8Kp2Zx9
Kita bisa menggunakan library:
import 'dart:math';
Kemudian:
import 'dart:math';
String generatePassword(int length) {
const chars =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
final random = Random();
String password = '';
for (int i = 0; i < length; i++) {
password += chars[random.nextInt(chars.length)];
}
return password;
}
void main() {
print(generatePassword(8));
}
Contoh hasil:
aK7p2xQ9
Setiap kali program dijalankan, hasilnya bisa berbeda.
6. Bagaimana random password bekerja?
Kita memiliki karakter:
const chars =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
Isinya:
a b c d ... z
A B C D ... Z
0 1 2 3 ... 9
Kemudian:
Random()
digunakan untuk menghasilkan nilai random.
Bagian:
random.nextInt(chars.length)
menghasilkan angka random yang bisa digunakan sebagai index.
Misalnya:
chars[5]
mengambil karakter pada index 5.
Kemudian kita lakukan berkali-kali menggunakan:
for
sampai password memiliki panjang yang kita inginkan.
7. Luas lingkaran menggunakan function
Soalnya:
Buat function untuk menghitung luas lingkaran.
Rumus:
L = π × r²
atau:
area = pi * radius * radius
Kita bisa membuat:
import 'dart:math';
double circleArea(double radius) {
return pi * radius * radius;
}
void main() {
print(circleArea(7));
}
8. Kenapa menggunakan double?
Karena hasil perhitungan luas bisa berupa angka desimal.
Misalnya:
radius = 7
L = π × 7 × 7
hasilnya kira-kira:
153.93
Maka:
double
lebih sesuai daripada:
int
9. Apa fungsi return?
Perhatikan:
double circleArea(double radius) {
return pi * radius * radius;
}
Function ini menghasilkan sebuah nilai.
Misalnya:
double result = circleArea(7);
Artinya:
circleArea(7)
↓
menghitung luas
↓
return
↓
153.93...
↓
result
Jadi return digunakan untuk mengembalikan hasil dari function.
10. Reverse String
Soalnya:
Buat function untuk membalik sebuah String.
Misalnya:
Hello
menjadi:
olleH
Cara sederhana:
String reverseString(String text) {
return text.split('').reversed.join('');
}
void main() {
print(reverseString("Hello"));
}
Output:
olleH
11. Bagaimana reverseString() bekerja?
Bagian ini:
text.split('')
mengubah String:
Hello
menjadi karakter-karakter:
H
e
l
l
o
Kemudian:
.reversed
membalik urutannya:
o
l
l
e
H
Kemudian:
.join('')
menggabungkannya kembali:
olleH
Jadi:
String
↓
split('')
↓
List karakter
↓
reversed
↓
urutan terbalik
↓
join('')
↓
String
Ini juga menghubungkan materi sebelumnya tentang List.
12. Menghitung pangkat
Soalnya:
Buat program untuk menghitung pangkat sebuah angka.
Misalnya:
2³
artinya:
2 × 2 × 2 = 8
Di Dart kita bisa menggunakan pow() dari:
import 'dart:math';
Contoh:
import 'dart:math';
num calculatePower(num base, num exponent) {
return pow(base, exponent);
}
void main() {
print(calculatePower(2, 3));
}
Hasil:
8
13. Memahami base dan exponent
Pada:
calculatePower(2, 3)
angka:
2 = base
3 = exponent
Jadi:
2³
atau:
2 × 2 × 2
14. Function untuk menjumlahkan dua angka
Soalnya di caption terdengar seperti:
Buat function bernama
addyang menerima dua angka dan mengembalikan hasil penjumlahannya.
Kita bisa:
int add(int a, int b) {
return a + b;
}
void main() {
print(add(10, 20));
}
Output:
30
Ini adalah contoh function yang mempunyai:
- parameter
- return value
15. Memahami add()
Ketika:
add(10, 20)
maka:
a = 10
b = 20
Kemudian:
return a + b;
menjadi:
return 10 + 20;
dan akhirnya:
30
16. Mencari angka terbesar dari 3 angka
Soalnya:
Buat function
maxNumberyang menerima tiga angka dan mengembalikan angka terbesar.
Misalnya:
10
25
17
hasilnya:
25
Kita bisa menggunakan:
int maxNumber(int a, int b, int c) {
int max = a;
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
return max;
}
void main() {
print(maxNumber(10, 25, 17));
}
Hasil:
25
17. Bagaimana cara kerjanya?
Pertama:
int max = a;
Misalnya:
a = 10
b = 25
c = 17
Maka:
max = 10
Kemudian:
if (b > max)
Apakah:
25 > 10
Ya.
Maka:
max = 25
Kemudian:
if (c > max)
Apakah:
17 > 25
Tidak.
Maka max tetap:
25
Kemudian:
return max;
menghasilkan:
25
18. Function isEven
Soalnya:
Buat function bernama
isEvenyang menerima angka dan mengembalikantruejika angka tersebut genap danfalsejika ganjil.
Contoh:
bool isEven(int number) {
return number % 2 == 0;
}
void main() {
print(isEven(10));
print(isEven(7));
}
Output:
true
false
19. Kenapa return type-nya bool?
Karena hasilnya hanya mempunyai dua kemungkinan:
true
false
Maka:
bool
adalah tipe yang tepat.
Function:
bool isEven(int number)
bisa dibaca:
Function
isEvenmenerimaintdan menghasilkanbool.
20. Kenapa number % 2 == 0?
Misalnya:
10 % 2 = 0
berarti genap.
Sedangkan:
7 % 2 = 1
berarti ganjil.
Jadi:
number % 2 == 0
sudah menghasilkan Boolean:
true / false
Maka kita bahkan tidak perlu menulis if.
Cukup:
return number % 2 == 0;
Ini contoh yang bagus tentang bagaimana expression Boolean bisa langsung dikembalikan.
21. Function createUser dengan default parameter
Ini salah satu soal yang sangat penting.
Soalnya:
Buat function
createUserdengan parametername,age, danisActive, di manaisActivememiliki nilai defaulttrue.
Kita bisa menggunakan named parameter:
Map<String, dynamic> createUser({
required String name,
required int age,
bool isActive = true,
}) {
return {
"name": name,
"age": age,
"isActive": isActive,
};
}
Kemudian:
void main() {
print(createUser(
name: "Budi",
age: 23,
));
}
Hasil:
{name: Budi, age: 23, isActive: true}
22. Apa itu default parameter?
Perhatikan:
bool isActive = true
Artinya:
Kalau user tidak memberikan nilai
isActive, otomatis gunakantrue.
Jadi:
createUser(
name: "Budi",
age: 23,
);
otomatis menjadi:
name = Budi
age = 23
isActive = true
23. Kita juga bisa mengubah isActive
Misalnya:
createUser(
name: "Budi",
age: 23,
isActive: false,
);
Sekarang hasilnya:
name = Budi
age = 23
isActive = false
Jadi:
Tidak dikirim
↓
isActive = true
Dikirim false
↓
isActive = false
24. Kenapa menggunakan required?
Perhatikan:
required String name,
required int age,
Artinya kedua parameter tersebut wajib diberikan ketika function dipanggil.
Misalnya:
createUser(
name: "Budi",
age: 23,
);
Benar.
Tetapi:
createUser(
name: "Budi",
);
akan bermasalah karena age diwajibkan.
Sementara:
bool isActive = true
tidak required, karena sudah mempunyai nilai default.
25. Soal terakhir: luas persegi panjang
Soalnya:
Buat function
calculateAreauntuk menghitung luas persegi panjang. Function menerimalengthdanwidth, dan keduanya mempunyai nilai default1.
Rumus:
Luas = panjang × lebar
Kita bisa:
double calculateArea({
double length = 1,
double width = 1,
}) {
return length * width;
}
Kemudian:
void main() {
print(calculateArea());
}
Karena tidak memberikan parameter:
length = 1
width = 1
Maka:
1 × 1 = 1
Output:
1
26. Memberikan nilai sendiri
Kita juga bisa:
print(calculateArea(
length: 10,
width: 5,
));
Maka:
10 × 5 = 50
Output:
50
27. Kenapa soal ini bagus untuk latihan?
Karena soal terakhir menggabungkan beberapa konsep:
Function
+
Parameter
+
Default value
+
Return
+
Matematika
Jadi ini bukan sekadar menghitung luas.
Kamu sedang belajar bagaimana membuat function yang fleksibel.
28. Semua soal dalam satu program
Kalau kamu ingin mencoba latihan ini sekaligus, berikut contoh implementasinya:
import 'dart:math';
void printName() {
print("Budi");
}
void printEvenNumbers(int start, int end) {
for (int i = start; i <= end; i++) {
if (i % 2 == 0) {
print(i);
}
}
}
void greet(String name) {
print("Hello, $name!");
}
String generatePassword(int length) {
const chars =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
final random = Random();
String password = '';
for (int i = 0; i < length; i++) {
password += chars[random.nextInt(chars.length)];
}
return password;
}
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 max = a;
if (b > max) {
max = b;
}
if (c > max) {
max = c;
}
return max;
}
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(1, 20);
greet("Budi");
print(generatePassword(8));
print(circleArea(7));
print(reverseString("Hello"));
print(calculatePower(2, 3));
print(add(10, 20));
print(maxNumber(10, 25, 17));
print(isEven(10));
print(createUser(
name: "Budi",
age: 23,
));
print(calculateArea(
length: 10,
width: 5,
));
}
🧠 Hubungan semua soal dengan materi sebelumnya
Sebenarnya latihan ini dibuat supaya kamu mengulang banyak materi sekaligus.
FUNCTION
│
├── printName()
│
├── greet(name)
│
├── add(a, b)
│
└── maxNumber(a, b, c)
CONDITION
│
├── if
├── %
└── isEven()
LOOP
│
└── printEvenNumbers()
MATH
│
├── pi
├── pow()
└── perkalian
STRING
│
└── reverseString()
RANDOM
│
└── generatePassword()
MAP
│
└── createUser()
DEFAULT PARAMETER
│
├── isActive = true
├── length = 1
└── width = 1
⭐ Bagian yang paling penting untuk kamu pahami
Menurut saya, dari 12 soal ini ada 5 konsep yang sebaiknya benar-benar kamu kuasai.
1. Function tanpa parameter
void printName() {
print("Budi");
}
Dipanggil:
printName();
2. Function dengan parameter
void greet(String name) {
print("Hello $name");
}
Dipanggil:
greet("Budi");
3. Function dengan return
int add(int a, int b) {
return a + b;
}
Dipanggil:
print(add(10, 20));
4. Function yang mengembalikan Boolean
bool isEven(int number) {
return number % 2 == 0;
}
Hasilnya:
true / false
5. Default parameter
double calculateArea({
double length = 1,
double width = 1,
}) {
return length * width;
}
Kalau:
calculateArea()
maka:
length = 1
width = 1
Kalau:
calculateArea(
length: 10,
width: 5,
)
maka:
length = 10
width = 5
🎯 Pola berpikir saat mengerjakan soal
Saat mendapat soal function, coba selalu tanyakan 4 hal:
① Function ini namanya apa?
Contoh:
greet
add
isEven
calculateArea
② Function menerima data apa?
Contoh:
greet → name
add → a, b
isEven → number
calculateArea → length, width
③ Function mengembalikan apa?
Contoh:
greet → tidak mengembalikan nilai → void
add → angka → int
isEven → true/false → bool
calculateArea → angka desimal → double
④ Apa proses di dalam function?
Contoh:
add
→ a + b
isEven
→ number % 2 == 0
calculateArea
→ length × width
circleArea
→ pi × radius × radius
Kalau kamu terbiasa menjawab empat pertanyaan tersebut, kamu akan jauh lebih mudah membuat function sendiri daripada sekadar menghafalkan syntax.