Masukkan Password
03 1.2 What are the Data Types in Dart Programming Language | Learn Dart Language | Dart Course
Tutorial ketiga ini membahas data types (tipe data) di Dart, lalu dilanjutkan dengan beberapa operasi penting seperti pembulatan angka, multiline string, karakter khusus, konversi tipe data, serta perbedaan var dan dynamic.
Ada beberapa kata yang salah ditranskripsikan, misalnya “DOT/do” = Dart, “rooms” = runes, dan “V” = var.
1. Apa itu Data Type?
Sebelumnya kita sudah belajar variabel.
Contoh:
var name = "Ahmad";
var age = 22;
Sekarang pertanyaannya:
“Data apa yang disimpan oleh variabel tersebut?”
Jawabannya:
name → String
age → int
Data type (tipe data) adalah aturan yang memberi tahu Dart jenis data apa yang sedang kita simpan.
Contohnya:
String → teks
int → angka bulat
double → angka desimal
num → angka bulat/desimal
bool → true/false
List → kumpulan data berurutan
Map → data key-value
Set → kumpulan data unik
Memahami tipe data sangat penting karena Dart adalah bahasa yang strongly typed.
2. Tipe Data Angka
Untuk angka, tutorial menjelaskan tiga tipe utama:
int
double
num
Mari kita bahas.
3. int — Bilangan Bulat
int digunakan untuk menyimpan bilangan bulat.
Contoh:
int number = 20;
Bisa juga negatif:
int temperature = -10;
atau nol:
int number = 0;
Jadi int dapat menyimpan:
-100
-5
0
10
20
100
Tetapi tidak bisa menyimpan angka desimal.
Contoh:
int number = 10.5;
❌ Salah.
Karena 10.5 adalah angka desimal.
4. double — Bilangan Desimal
double digunakan untuk menyimpan angka yang memiliki bagian desimal.
Contoh:
double number = 4.6;
Contoh lain:
double height = 175.5;
double price = 99.99;
double score = 87.5;
Jadi:
int
↓
10
20
100
double
↓
10.5
20.5
100.75
5. num — Angka yang Lebih Fleksibel
num dapat menyimpan int maupun double.
Contoh:
num number = 30;
Boleh.
num number = 30.5;
Juga boleh.
Jadi:
num number1 = 20;
num number2 = 20.5;
keduanya valid.
Cara mudah mengingat:
num
/ \
/ \
int double
Jadi jika kamu membutuhkan variabel yang bisa menyimpan bilangan bulat maupun desimal, num bisa digunakan.
6. Perbandingan int, double, dan num
| Tipe | Nilai yang dapat disimpan |
|---|---|
int | Bilangan bulat |
double | Bilangan desimal |
num | Bilangan bulat atau desimal |
Contoh:
int a = 10;
double b = 10.5;
num c = 10;
num d = 10.5;
7. String
String digunakan untuk menyimpan teks atau kumpulan karakter.
Contoh:
String name = "Ahmad";
Bisa juga:
String message = "Hello World";
atau:
String city = 'Madiun';
String menggunakan:
" "
atau:
' '
Contohnya:
String firstName = "Ahmad";
String lastName = 'Hashi';
8. bool — Boolean
bool hanya mempunyai dua nilai:
true
dan:
false
Contoh:
bool isMale = true;
bool isMarried = false;
Secara sederhana:
true → benar / ya
false → salah / tidak
Contoh:
bool isLoggedIn = true;
Artinya:
User sedang login.
Sedangkan:
bool isLoggedIn = false;
Artinya:
User belum login.
bool nantinya sangat sering digunakan dalam:
if
else
Contoh:
if (isLoggedIn) {
print("Welcome");
}
9. List
Sekarang masuk ke tipe data yang sangat penting: List.
Kalau variabel biasa menyimpan satu nilai:
String name = "Ahmad";
List dapat menyimpan banyak nilai dalam satu variabel.
Contoh:
List<String> names = [
"Ahmad",
"Budi",
"Citra"
];
Di sini kita memiliki satu variabel:
names
yang berisi tiga data:
Ahmad
Budi
Citra
10. Mengapa menggunakan List?
Bayangkan kita ingin menyimpan 5 nama.
Tanpa List:
String name1 = "Ahmad";
String name2 = "Budi";
String name3 = "Citra";
String name4 = "Doni";
String name5 = "Eko";
Ini kurang praktis.
Dengan List:
List<String> names = [
"Ahmad",
"Budi",
"Citra",
"Doni",
"Eko"
];
Lebih rapi dan mudah dikelola.
11. Index pada List
Ini bagian yang sangat penting.
Setiap item di dalam List mempunyai index.
Dan index di Dart dimulai dari 0, bukan 1.
Misalnya:
List<String> names = [
"Ahmad",
"Budi",
"Citra"
];
Index-nya:
Index Value
0 Ahmad
1 Budi
2 Citra
Jadi:
names[0]
menghasilkan:
Ahmad
Sedangkan:
names[1]
menghasilkan:
Budi
dan:
names[2]
menghasilkan:
Citra
12. Contoh List lengkap
void main() {
List<String> names = [
"Ahmad",
"Budi",
"Citra"
];
print(names);
print(names[0]);
print(names[1]);
print(names[2]);
}
Output:
[Ahmad, Budi, Citra]
Ahmad
Budi
Citra
13. List memiliki tipe
Perhatikan:
List<String> names = [
"Ahmad",
"Budi",
"Citra"
];
Bagian:
<String>
memberitahu Dart bahwa List tersebut hanya boleh berisi String.
Jadi ini benar:
List<String> names = [
"Ahmad",
"Budi"
];
Tetapi ini salah:
List<String> names = [
"Ahmad",
22
];
Karena 22 adalah int, bukan String.
14. List Integer
Kalau kita ingin menyimpan angka:
List<int> numbers = [
22,
44,
77
];
Ini valid.
Kita dapat mengaksesnya:
print(numbers[0]);
Output:
22
Index:
0 → 22
1 → 44
2 → 77
15. Map
Sekarang kita masuk ke Map.
Kalau List menggunakan:
index → value
Map menggunakan:
key → value
Ini perbedaan yang sangat penting.
Contoh:
Map<String, String> person = {
"name": "Ahmad",
"gender": "Male",
"phone": "333"
};
Kita memiliki:
key value
----------------
name Ahmad
gender Male
phone 333
16. Mengambil data dari Map
Kalau List:
names[0]
kita menggunakan index.
Kalau Map:
person["name"]
kita menggunakan key.
Contoh:
print(person["name"]);
Output:
Ahmad
Sedangkan:
print(person["gender"]);
Output:
Male
Dan:
print(person["phone"]);
Output:
333
17. List vs Map
Ini sangat penting untuk dibedakan.
List
List<String> names = [
"Ahmad",
"Budi",
"Citra"
];
Akses dengan index:
names[0]
names[1]
names[2]
Map
Map<String, String> person = {
"name": "Ahmad",
"gender": "Male"
};
Akses dengan key:
person["name"]
person["gender"]
Gambaran:
LIST
0 → Ahmad
1 → Budi
2 → Citra
Sedangkan:
MAP
"name" → Ahmad
"gender" → Male
18. Tipe Key dan Value pada Map
Perhatikan:
Map<String, String> person = {
"name": "Ahmad",
"gender": "Male"
};
Ada dua String:
Map<String, String>
↑ ↑
key value
Artinya:
Key harus String dan Value juga harus String.
Jadi:
"name": "Ahmad"
valid.
Tetapi kalau:
"age": 22
akan bermasalah karena 22 adalah int, sementara value ditentukan sebagai String.
19. Map dengan String dan Integer
Kalau kita ingin:
key → String
value → int
kita bisa menulis:
Map<String, int> scores = {
"math": 80,
"english": 90
};
Sekarang:
Map<String, int>
↑ ↑
key value
Key harus String:
"math"
"english"
Value harus integer:
80
90
20. Set
Set mirip dengan List karena sama-sama menyimpan kumpulan data.
Tetapi ada perbedaan penting:
Set tidak menyimpan nilai duplikat.
Contoh:
Set<String> names = {
"Ahmad",
"Budi",
"Citra"
};
Semua unik.
Tetapi kita tidak boleh mempunyai nilai yang sama sebagai elemen Set.
Misalnya:
Set<String> names = {
"Ahmad",
"Budi",
"Ahmad"
};
Ada "Ahmad" dua kali.
Set dirancang untuk menyimpan nilai unik.
21. Perbedaan List dan Set
List
List<String> names = [
"Ahmad",
"Budi",
"Ahmad"
];
Boleh ada duplikat.
Ahmad
Budi
Ahmad
Set
Set<String> names = {
"Ahmad",
"Budi"
};
Tidak boleh ada duplikat.
Jadi cara mudah mengingat:
List
→ kumpulan data
→ punya index
→ boleh duplikat
Set
→ kumpulan data unik
→ tidak boleh duplikat
22. Runes
Bagian ini mungkin agak membingungkan karena runes bukan sesuatu yang biasanya langsung digunakan oleh pemula.
Runes berkaitan dengan Unicode code points.
Unicode adalah sistem yang memberikan kode kepada karakter.
Misalnya karakter:
A
mempunyai nilai Unicode:
65
Karakter:
a
mempunyai nilai:
97
Contoh:
var text = "Ahad";
print(text.runes);
Dart akan menampilkan nilai Unicode dari karakter-karakter tersebut.
Secara konsep:
A → 65
h → 104
a → 97
d → 100
Jadi runes dapat digunakan ketika kita perlu bekerja dengan representasi Unicode dari String.
Untuk tahap awal belajar Dart, kamu tidak perlu terlalu fokus pada runes. Cukup pahami konsepnya terlebih dahulu.
23. null
Sekarang kita sampai pada konsep null.
null secara sederhana berarti:
tidak ada nilai / tidak memiliki nilai.
Contoh konsep:
String? name = null;
Artinya name saat ini tidak memiliki nilai String.
Perhatikan tanda:
?
Tanda tersebut berkaitan dengan null safety, yang akan menjadi materi penting dalam Dart modern.
Untuk saat ini cukup ingat:
null = tidak ada nilai
Contoh dalam kehidupan nyata:
Nama seseorang → "Ahmad"
Umur → 22
Alamat → null
Artinya alamat tersebut belum memiliki data.
24. toStringAsFixed()
Sekarang kita masuk ke fungsi untuk angka desimal.
Misalnya:
double number = 10.4534;
Kita ingin menampilkan hanya 2 angka di belakang koma.
Kita dapat menggunakan:
number.toStringAsFixed(2)
Contoh:
double number = 10.4534;
print(number.toStringAsFixed(2));
Hasil:
10.45
25. Mengubah jumlah angka desimal
Misalnya:
print(number.toStringAsFixed(1));
Hasil:
10.5
Kalau:
print(number.toStringAsFixed(2));
hasil:
10.45
Kalau:
print(number.toStringAsFixed(4));
hasil:
10.4534
Jadi angka dalam kurung menentukan berapa digit yang ingin ditampilkan setelah desimal.
26. Multiline String
Biasanya String ditulis dalam satu baris:
String message = "Hello World";
Tetapi bagaimana jika kita ingin membuat teks beberapa baris?
Kita dapat menggunakan triple quotes.
Contoh:
String message = '''
Hello
World
Welcome to Dart
''';
Perhatikan:
'''
di awal dan:
'''
di akhir.
Hasilnya mempertahankan format beberapa baris.
Contoh:
print(message);
Output:
Hello
World
Welcome to Dart
27. \n — New Line
Sekarang kita belajar karakter khusus.
\n berarti new line, atau pindah ke baris baru.
Contoh:
print("Hello\nWorld");
Output:
Hello
World
Karena:
\n
memberitahu Dart:
Pindah ke baris berikutnya.
28. \t — Tab
\t digunakan untuk memberikan jarak/tab.
Contoh:
print("Hello\tWorld");
Hasilnya kira-kira:
Hello World
Jadi:
\n → new line
\t → tab
Contoh:
print("Name:\tAhmad");
Output:
Name: Ahmad
29. Contoh karakter khusus
Misalnya:
print("Ahmad\nHashi");
Output:
Ahmad
Hashi
Sedangkan:
print("Ahmad\tHashi");
Outputnya memiliki jarak tab antara kedua teks.
30. Type Conversion
Ini merupakan salah satu bagian paling penting dari tutorial.
Type conversion berarti:
mengubah data dari satu tipe ke tipe lainnya.
Misalnya:
int → String
String → int
double → String
String → double
Kenapa diperlukan?
Karena dalam pemrograman kita sering mendapatkan data dalam tipe yang berbeda.
31. int → String
Misalnya:
int age = 22;
Kita ingin mengubahnya menjadi String.
Gunakan:
age.toString()
Contoh:
int age = 22;
String ageString = age.toString();
print(ageString);
Sekarang ageString adalah String.
Secara konsep:
22
↓
toString()
↓
"22"
Perhatikan perbedaannya:
22
adalah int.
Sedangkan:
"22"
adalah String.
32. String → int
Sekarang kebalikannya.
Misalnya:
String number = "50";
Kita ingin mengubah "50" menjadi angka 50.
Gunakan:
int.parse()
Contoh:
String number = "50";
int result = int.parse(number);
print(result);
Secara konsep:
"50"
↓
int.parse()
↓
50
Sekarang result adalah int.
33. Mengapa konversi ini penting?
Misalnya user memasukkan umur melalui input.
Input dari user biasanya berupa String.
User mengetik:
22
Program mungkin menerima:
"22"
Padahal kita ingin melakukan:
"22" + 5
Kita tidak bisa memperlakukannya sebagai angka sebelum dikonversi.
Kita ubah:
int age = int.parse("22");
Sekarang kita mempunyai angka:
22
dan bisa melakukan operasi matematika.
34. double → String
Sama seperti int.
Misalnya:
double number = 33.5;
Gunakan:
String text = number.toString();
Sekarang:
33.5
sudah menjadi String:
"33.5"
35. String → double
Jika kita mempunyai:
String number = "33.5";
kita bisa mengubahnya menjadi double dengan:
double result = double.parse(number);
Contoh lengkap:
String number = "33.5";
double result = double.parse(number);
print(result);
36. Ringkasan Type Conversion
| Dari | Ke | Cara |
|---|---|---|
int | String | .toString() |
double | String | .toString() |
String | int | int.parse() |
String | double | double.parse() |
Contoh:
int a = 20;
String b = a.toString();
String c = "20";
int d = int.parse(c);
double e = 20.5;
String f = e.toString();
String g = "20.5";
double h = double.parse(g);
37. Hati-hati dengan parse()
Ada hal penting.
Kalau kita melakukan:
int number = int.parse("50");
berhasil.
Tetapi:
int number = int.parse("Hello");
akan menghasilkan error karena "Hello" bukan angka yang bisa diubah menjadi int.
Begitu juga:
double number = double.parse("Hello");
tidak valid.
Jadi parse() mengharapkan String yang formatnya sesuai dengan tipe tujuan.
38. runtimeType
Tutorial juga menunjukkan:
.runtimeType
Ini digunakan untuk mengetahui tipe data sebuah nilai saat program berjalan.
Contoh:
var name = "Ahmad";
print(name.runtimeType);
Hasil:
String
Contoh:
var age = 22;
print(age.runtimeType);
Hasil:
int
Contoh:
var score = 90.5;
print(score.runtimeType);
Hasil:
double
Ini sangat berguna untuk memahami dan mengecek tipe data.
39. Perbedaan var dan dynamic
Ini adalah bagian sangat penting dari tutorial.
Sekilas:
var name = "Ahmad";
dan:
dynamic name = "Ahmad";
terlihat mirip.
Tetapi perilakunya berbeda.
40. var
Jika kita menulis:
var name = "Ahmad";
Dart mengetahui bahwa:
name → String
Setelah itu kita dapat mengubah nilainya, tetapi bukan tipenya.
Ini boleh:
var name = "Ahmad";
name = "Budi";
Karena keduanya String.
Tetapi:
var name = "Ahmad";
name = 22;
❌ Tidak boleh.
Kenapa?
Karena awalnya:
name → String
Kemudian kita mencoba memberikan:
22 → int
Tipe tidak cocok.
41. dynamic
dynamic lebih fleksibel.
Contoh:
dynamic data = "Ahmad";
Awalnya:
data → String
Tetapi kita bisa menggantinya menjadi:
data = 22;
Sekarang:
data → int
Bahkan dapat berubah lagi:
data = true;
Sekarang:
data → bool
Jadi dynamic memungkinkan tipe nilai berubah selama program berjalan.
42. Perbandingan var vs dynamic
var
var data = "Ahmad";
data = "Budi"; // OK
data = 22; // ERROR
Tipe ditentukan dari nilai awal.
var
↓
String
↓
tetap String
dynamic
dynamic data = "Ahmad";
data = 22; // OK
data = true; // OK
data = 90.5; // OK
Tipe dapat berubah.
dynamic
↓
String
↓
int
↓
bool
↓
double
43. Apakah dynamic selalu lebih baik?
Tidak.
Justru dalam banyak kasus, kita sebaiknya tidak menggunakan dynamic secara sembarangan.
Mengapa?
Karena semakin jelas tipe data yang digunakan, semakin mudah:
- membaca kode
- menemukan error
- mendapatkan bantuan dari editor
- memahami struktur program
Contoh yang lebih aman:
String name = "Ahmad";
int age = 22;
Daripada:
dynamic name = "Ahmad";
dynamic age = 22;
Kalau memang kita tahu tipe datanya, lebih baik gunakan tipe yang jelas atau var dengan inferensi tipe.
44. Gambaran besar semua tipe data
Sekarang kita rangkum:
DART DATA TYPES
│
├── Numbers
│ ├── int
│ ├── double
│ └── num
│
├── String
│
├── Boolean
│ └── bool
│
├── Collection
│ ├── List
│ ├── Map
│ └── Set
│
├── Runes
│
└── Null
Kemudian ada cara deklarasi yang penting:
var
dynamic
Perlu dibedakan bahwa var dan dynamic tidak persis berada dalam kategori yang sama seperti String atau int.
45. Contoh program yang menggabungkan banyak materi
Coba lihat program berikut:
void main() {
String name = "Ahmad";
int age = 22;
double height = 175.5;
num score = 90.5;
bool isStudent = true;
List<String> hobbies = [
"Coding",
"Reading",
"Gaming"
];
Map<String, dynamic> person = {
"name": "Ahmad",
"age": 22,
"isStudent": true
};
Set<String> cities = {
"Madiun",
"Surabaya",
"Jakarta"
};
print("Name: $name");
print("Age: $age");
print("Height: $height");
print("Score: $score");
print("Student: $isStudent");
print("Hobby pertama: ${hobbies[0]}");
print("Nama dari Map: ${person["name"]}");
print("Cities: $cities");
}
Di sini kamu sudah melihat banyak konsep sekaligus:
String
int
double
num
bool
List
Map
Set
String interpolation
index
key-value
46. Satu hal penting: $variable dan ${expression}
Sebelumnya kita belajar:
var name = "Ahmad";
print("My name is $name");
Ini cocok untuk variabel sederhana.
Tetapi kalau kita ingin melakukan sesuatu yang lebih kompleks, kita bisa menggunakan:
${...}
Contoh:
var age = 22;
print("Age next year: ${age + 1}");
Output:
Age next year: 23
Untuk List:
print("First hobby: ${hobbies[0]}");
Untuk Map:
print("Name: ${person["name"]}");
Jadi:
$variable
untuk variabel sederhana.
Sedangkan:
${expression}
untuk ekspresi yang lebih kompleks.
47. Yang paling penting untuk diingat
Kalau materi ini terasa banyak, jangan mencoba menghafal semuanya sekaligus.
Prioritaskan dalam urutan berikut:
Level 1 — Wajib dikuasai
String
int
double
bool
var
Pahami kapan masing-masing digunakan.
Level 2
num
List
Map
Set
Pahami perbedaan ketiganya:
List → data berurutan + index
Map → key + value
Set → data unik
Level 3
Pahami konversi:
.toString()
int.parse()
double.parse()
Level 4
Pahami:
var
dynamic
dan kenapa keduanya berbeda.
Level 5
Baru pelajari lebih dalam:
runes
null safety
🧠 Cheat Sheet Tutorial 3
Simpan bagian ini sebagai ringkasan:
// String
String name = "Ahmad";
// Integer
int age = 22;
// Decimal
double height = 175.5;
// Integer atau decimal
num score = 90.5;
// True / False
bool isStudent = true;
// List
List<String> names = [
"Ahmad",
"Budi",
"Citra"
];
// Ambil data List
print(names[0]);
// Map
Map<String, String> person = {
"name": "Ahmad",
"gender": "Male"
};
// Ambil data Map
print(person["name"]);
// Set
Set<String> cities = {
"Madiun",
"Surabaya",
"Jakarta"
};
// Var
var city = "Madiun";
// Dynamic
dynamic data = "Ahmad";
data = 22;
// int → String
String text = age.toString();
// String → int
int number = int.parse("50");
// double → String
String decimalText = height.toString();
// String → double
double decimal = double.parse("33.5");
// Cek tipe data
print(name.runtimeType);
// Pembulatan tampilan desimal
print(height.toStringAsFixed(2));
// New line
print("Hello\nWorld");
// Tab
print("Hello\tWorld");
Inti terbesar dari tutorial ini:
Tipe data memberi tahu Dart jenis nilai yang disimpan oleh sebuah variabel.
Dan tiga hal yang paling perlu kamu kuasai setelah tutorial ini adalah:
int vs double vs num,
List vs Map vs Set, dan
var vs dynamic.
Kalau tiga kelompok tersebut sudah benar-benar kamu pahami, kamu sudah mempunyai fondasi yang cukup kuat untuk melanjutkan ke materi Dart berikutnya.