Masukkan Password
04 The Complete Kotlin Course #3 - Constants in Kotlin
Materi ini mulai masuk ke konsep yang sangat fundamental dalam programming, yaitu data, tipe data, val, dan var di Kotlin.
Kalau materi sebelumnya membahas komentar, sekarang kita mulai belajar bagaimana menyimpan data di dalam program.
Saya akan jelaskan dari konsep paling dasar karena bagian ini akan menjadi fondasi untuk materi Kotlin berikutnya.
1. Inti materi ini: program bekerja dengan data
Pembicara membuka dengan ide:
“At its simplest, computer programming is all about manipulating data.”
Artinya:
Pada dasarnya, programming adalah proses mengolah data.
Contohnya ketika kamu membuat aplikasi kasir.
Aplikasi tersebut harus mengolah:
Nama barang
Harga
Jumlah barang
Total harga
Diskon
Pajak
Atau aplikasi media sosial:
Nama pengguna
Umur
Foto
Postingan
Komentar
Jumlah like
Atau aplikasi perbankan:
Nama nasabah
Nomor rekening
Saldo
Jumlah transfer
Riwayat transaksi
Semuanya adalah data.
2. Data bisa memiliki berbagai bentuk
Data tidak selalu berupa angka.
Misalnya:
Angka
10
100
3.14
Teks
"Budi"
"Hello World"
"Kotlin"
Boolean
true
false
Collection
[10, 20, 30, 40]
Object
Misalnya data seorang pengguna:
User
├── name
├── age
├── email
└── address
Jadi ketika membuat program, kita perlu memberi tahu komputer:
“Data ini jenisnya apa?”
Di sinilah kita membutuhkan data type / tipe data.
3. Apa itu variable?
Bayangkan kamu mempunyai sebuah kotak.
┌──────────────┐
│ 10 │
└──────────────┘
Kotak tersebut kita beri nama:
number
Sekarang kita bisa mengatakan:
number = 10
Dalam programming, konsep seperti ini disebut variable/value declaration.
Di Kotlin kita dapat menulis:
val number = 10
Artinya secara sederhana:
Buat sebuah nama
numberdan simpan nilai10di dalamnya.
4. Apa itu val?
val adalah keyword Kotlin yang digunakan untuk membuat read-only variable/reference.
Contoh:
val number = 10
Kita bisa membacanya sebagai:
“Buat
numberdengan nilai 10.”
Setelah dideklarasikan:
val number = 10
kita tidak dapat melakukan:
number = 20
Karena val tidak dapat di-reassign.
5. val sebenarnya bukan selalu berarti “constant”
Ini bagian yang perlu diluruskan dari video.
Video menyebut val sebagai constant.
Untuk pemahaman awal, hal itu masih bisa membantu, tetapi secara teknis val bukan berarti compile-time constant.
Lebih tepatnya:
valadalah read-only property/variable reference yang tidak dapat di-assign ulang setelah initialization.
Sedangkan compile-time constant di Kotlin menggunakan:
const val
dan memiliki aturan tertentu.
Jadi:
val age = 20
dan:
const val MAX_AGE = 100
bukan hal yang persis sama.
Kita akan bahas const val nanti.
6. Apa itu var?
Sekarang kita punya keyword lain:
var
var digunakan ketika nilai dapat berubah.
Contoh:
var age = 20
age = 21
Ini diperbolehkan.
Awalnya:
age = 20
kemudian:
age = 21
Jadi:
val → tidak dapat di-reassign
var → dapat di-reassign
7. Perbedaan val dan var
Ini WAJIB kamu kuasai.
| Keyword | Bisa diubah/reassign? |
|---|---|
val | ❌ Tidak |
var | ✅ Ya |
Contoh:
val
val name = "Budi"
name = "Andi" // ERROR
Tidak boleh.
var
var name = "Budi"
name = "Andi" // OK
Boleh.
8. Kenapa ada val kalau kita punya var?
Pertanyaan bagus.
Karena kita tidak selalu ingin data berubah.
Misalnya:
val pi = 3.14159
Nilai pi secara konsep tidak perlu diganti-ganti.
Atau:
val birthYear = 2000
Tahun lahir seseorang tidak seharusnya tiba-tiba menjadi 2010.
Maka kita menggunakan:
val
Sebaliknya, kalau nilainya memang berubah:
var score = 0
score = 10
score = 20
score = 30
gunakan:
var
9. Prinsip sederhana memilih val atau var
Sebagai pemula, gunakan aturan:
Gunakan
valsecara default. Gunakanvarhanya kalau nilainya memang perlu berubah.
Contoh:
val name = "Budi"
val birthYear = 2000
val country = "Indonesia"
Kemudian:
var score = 0
var currentLevel = 1
Ketika score berubah:
score = 100
10. Apa itu tipe data?
Sekarang kita masuk ke konsep berikutnya.
Contoh:
val number: Int = 10
Perhatikan bagian:
number
↓
Int
Int adalah data type.
Artinya:
numbermenyimpan nilai bertipe integer.
11. Apa itu Int?
Int adalah tipe data untuk bilangan bulat.
Contoh:
val age: Int = 20
val score: Int = 100
val quantity: Int = 5
Semua nilainya adalah bilangan bulat.
Contoh:
20
100
5
-10
0
Tidak memiliki angka di belakang koma.
12. Contoh Int
fun main() {
val age: Int = 20
println(age)
}
Output:
20
Kita bisa menggunakan age di tempat lain:
fun main() {
val age: Int = 20
println(age)
println(age + 1)
}
Output:
20
21
13. Kotlin bisa mengetahui tipe data secara otomatis
Kotlin memiliki kemampuan type inference.
Jadi kita tidak selalu perlu menulis:
val number: Int = 10
Kita dapat menulis:
val number = 10
Kotlin akan mengetahui bahwa:
10 → Int
Sehingga secara konsep:
val number = 10
↓
number bertipe Int
Ini salah satu alasan Kotlin bisa terasa ringkas.
14. Kapan perlu menulis tipe secara eksplisit?
Misalnya:
val number: Int = 10
Kita sedang secara eksplisit mengatakan:
numberharus bertipeInt.
Sedangkan:
val number = 10
Kita membiarkan Kotlin menyimpulkan tipenya.
Keduanya valid.
Untuk kode sederhana, biasanya type inference membuat kode lebih bersih.
15. Apa itu Double?
Sekarang pembicara memperkenalkan:
Double
Double digunakan untuk angka yang memiliki bagian desimal.
Contoh:
val pi: Double = 3.14159
atau:
val price: Double = 99.99
Contoh lain:
val temperature = 36.5
Kotlin akan mengenali angka tersebut sebagai tipe floating-point yang sesuai, umumnya Double.
16. Perbedaan Int dan Double
Sangat sederhana:
Int
Untuk bilangan bulat:
10
20
100
-5
Double
Untuk angka desimal:
3.14
10.5
99.99
-2.75
Contoh:
val age: Int = 20
val height: Double = 175.5
Masuk akal karena:
age → 20
height → 175.5
17. Apa itu Float?
Kotlin juga memiliki tipe:
Float
Float juga digunakan untuk menyimpan angka floating-point/desimal.
Contoh:
val number: Float = 6.5f
Perhatikan huruf:
f
di belakang:
6.5f
18. Mengapa harus menggunakan f?
Ini bagian yang dibahas dalam video.
Jika kita menulis:
val number: Float = 6.5
Kotlin akan menganggap:
6.5 → Double
bukan Float.
Karena itu kita menulis:
val number: Float = 6.5f
Huruf f memberi tahu compiler:
“Angka ini adalah Float.”
19. Double vs Float
Perbedaannya terutama berkaitan dengan precision dan ukuran penyimpanan.
Secara umum:
Float → 32-bit
Double → 64-bit
Akibatnya Double biasanya memiliki presisi lebih tinggi daripada Float.
Sederhananya:
Float
↓
presisi lebih rendah
memori lebih kecil
Double
↓
presisi lebih tinggi
memori lebih besar
20. Contoh Float dan Double
val a: Float = 3.14f
val b: Double = 3.14159265359
Double dapat menyimpan nilai dengan presisi yang lebih tinggi.
Dalam banyak aplikasi umum, Double cukup sering menjadi pilihan default ketika memang membutuhkan floating-point.
Tetapi untuk kebutuhan tertentu, Float dapat digunakan ketika ukuran data dan karakteristik precision memang sesuai.
21. Jangan berpikir Float berarti “angka kecil”
Ini salah satu bagian video yang perlu diluruskan.
Video mengatakan kira-kira:
Float untuk small numbers, Double untuk higher numbers.
Ini kurang tepat.
Perbedaan utama bukan:
Float = angka kecil
Double = angka besar
Melainkan terutama:
Float
→ precision lebih rendah
Double
→ precision lebih tinggi
Jadi Float masih dapat merepresentasikan angka dengan magnitude yang cukup besar. Yang menjadi perbedaan penting adalah precision/range dan representasi floating-point, bukan sekadar “angka kecil vs angka besar”.
Untuk pembelajaran dasar, cukup ingat:
Double lebih presisi daripada Float.
22. Mengapa angka desimal memiliki masalah precision?
Ini konsep yang nanti akan sangat penting.
Komputer tidak selalu dapat merepresentasikan semua angka desimal secara persis menggunakan floating-point.
Misalnya operasi:
val result = 0.1 + 0.2
Secara matematika:
0.1 + 0.2 = 0.3
Tetapi representasi floating-point dapat menghasilkan nilai yang sangat dekat dengan 0.3, bukan selalu representasi eksak.
Karena itu untuk aplikasi keuangan, kita tidak boleh sembarangan menggunakan Double untuk semua perhitungan uang.
Nanti kamu akan belajar tipe seperti:
BigDecimal
ketika membahas kebutuhan precision tertentu.
23. Tidak perlu menggunakan semicolon
Video juga mengatakan:
“We don’t use semicolon.”
Dalam Kotlin, kamu biasanya tidak perlu menggunakan ;.
Contoh:
val age = 20
val name = "Budi"
Tidak perlu:
val age = 20;
val name = "Budi";
Keduanya bisa memiliki konteks tertentu, tetapi gaya normal Kotlin adalah tanpa semicolon.
Ini membuat kode terlihat lebih bersih.
24. Apa itu identifier?
Pembicara sempat menggunakan istilah:
identifier
Identifier adalah nama yang kita berikan pada sesuatu di dalam kode, misalnya variable/property/function/class.
Contoh:
val age = 20
Di sini:
age
adalah nama/identifier yang kita gunakan untuk merujuk pada data tersebut.
Contoh lain:
val userName = "Budi"
Identifier-nya:
userName
25. Bagaimana komputer mengetahui data yang dimaksud?
Misalnya:
val age = 20
Kita bisa membayangkan:
┌──────────────┐
│ age │
├──────────────┤
│ 20 │
└──────────────┘
Kemudian kita bisa menggunakan:
println(age)
Kotlin tahu bahwa age mengacu pada nilai 20.
26. Contoh lengkap beberapa tipe data
fun main() {
val age: Int = 20
val height: Double = 175.5
val temperature: Float = 36.5f
println(age)
println(height)
println(temperature)
}
Output:
20
175.5
36.5
27. Sekarang kita masuk ke const val
Ini bagian yang sedikit lebih advanced.
Video menyebut:
const
dan mengatakan bahwa const harus berada di luar function/top-level dalam contoh yang mereka jelaskan.
Contoh:
const val PI = 3.14159
Ini berbeda dengan:
val pi = 3.14159
28. Apa perbedaan val dan const val?
val
val pi = 3.14159
Nilai tidak dapat di-reassign melalui variable tersebut, tetapi tidak otomatis berarti compile-time constant.
const val
const val PI = 3.14159
Ini adalah compile-time constant, dengan persyaratan tertentu.
Secara sederhana:
val
↓
read-only
const val
↓
compile-time constant
29. Contoh const val
Misalnya:
const val MAX_LOGIN_ATTEMPTS = 3
Kemudian:
fun main() {
println(MAX_LOGIN_ATTEMPTS)
}
Kita dapat menggunakannya di function.
Yang penting deklarasinya memenuhi aturan const.
Untuk sekarang, kamu cukup ingat bahwa const val digunakan untuk nilai konstan yang dapat diketahui saat compile time.
30. Kenapa const val harus di luar main()?
Contoh:
const val PI = 3.14159
fun main() {
println(PI)
}
PI dideklarasikan di level top-level.
Salah satu aturan Kotlin adalah const val harus dideklarasikan pada lokasi yang diperbolehkan oleh Kotlin, seperti top-level atau sebagai member tertentu yang sesuai aturan, dan nilainya harus berupa compile-time constant.
Untuk tahap awal, gunakan pola paling sederhana:
const val PI = 3.14159
fun main() {
println(PI)
}
31. Kapan menggunakan const val?
Misalnya kita mempunyai:
Jumlah maksimum
URL dasar tertentu
Konstanta matematika
Nilai konfigurasi compile-time
Contoh:
const val MAX_USERS = 100
const val APP_NAME = "My App"
const val PI = 3.14159
Tetapi jangan menjadikan semua val sebagai const val.
Gunakan const hanya ketika memang memenuhi kebutuhan dan aturan compile-time constant.
32. Contoh val vs var dalam kehidupan nyata
Bayangkan aplikasi game.
val playerName = "Budi"
var score = 0
Kenapa?
Nama pemain mungkin tidak perlu diganti melalui variable tersebut:
playerName = Budi
Sedangkan score memang berubah:
0
↓
100
↓
250
↓
500
Maka:
var score = 0
Kemudian:
score = 100
score = 250
score = 500
33. Contoh aplikasi toko
Misalnya:
val productName = "Laptop"
val price = 1000.0
var quantity = 1
productName tidak perlu diubah.
price mungkin juga kita perlakukan sebagai read-only dalam konteks tertentu.
Sedangkan quantity bisa berubah:
quantity = 2
quantity = 3
quantity = 4
34. Cara berpikir yang benar
Jangan menghafal:
“
valuntuk ini,varuntuk itu.”
Lebih baik berpikir:
Pertanyaan:
“Apakah nilai ini perlu di-reassign setelah dibuat?”
Kalau:
Tidak → val
val name = "Budi"
Kalau:
Ya → var
var score = 0
Ini akan menjadi kebiasaan programming yang sangat bagus.
35. Contoh kesalahan umum pemula
Misalnya:
val age = 20
age = 21
Compiler akan memberikan error.
Karena:
age
↓
val
↓
tidak bisa di-reassign
Kalau memang ingin berubah:
var age = 20
age = 21
36. val bukan berarti object-nya selalu immutable
Ini konsep yang lebih advanced, tetapi sangat penting untuk masa depan.
Misalnya:
val numbers = mutableListOf(1, 2, 3)
numbers.add(4)
Ini bisa dilakukan.
Mengapa?
Karena val mencegah reassignment terhadap reference, bukan otomatis membuat object yang dirujuk menjadi immutable.
Secara sederhana:
val
↓
reference tidak dapat diganti
bukan selalu:
object
↓
mustahil berubah
Untuk tahap awal, cukup pahami perbedaan ini secara garis besar.
37. Ringkasan tipe data yang dibahas
Dalam materi ini, kamu diperkenalkan pada:
Int
Bilangan bulat.
val age: Int = 20
Double
Bilangan floating-point dengan precision lebih tinggi dibanding Float.
val pi: Double = 3.14159
Float
Bilangan floating-point dengan precision lebih rendah dibanding Double.
val value: Float = 3.14f
38. Gambaran besar konsepnya
Sekarang kita bisa membuat hubungan:
DATA
│
↓
diberi sebuah nama
│
↓
Identifier
│
↓
punya tipe data
│
┌──────────┼──────────┐
↓ ↓ ↓
Int Double Float
│ │ │
10 3.14 3.14f
Kemudian data tersebut bisa dideklarasikan menggunakan:
val
atau
var
Jadi:
val age: Int = 20
dapat kita pecah menjadi:
val
↓
cara deklarasi
age
↓
nama/identifier
Int
↓
tipe data
20
↓
nilai
Ini konsep yang sangat penting.
39. Cara membaca kode
Ketika melihat:
val age: Int = 20
bacalah:
“Saya membuat sebuah nilai bernama
age, bertipeInt, dan nilainya20.”
Sedangkan:
var score: Int = 0
dibaca:
“Saya membuat variable
score, bertipeInt, dengan nilai awal0, dan nilainya boleh diubah.”
Dan:
val pi: Double = 3.14159
dibaca:
“Saya membuat nilai bernama
pi, bertipeDouble, dengan nilai 3.14159.”
40. Latihan kecil
Coba pahami kode berikut:
fun main() {
val name = "Budi"
val age = 20
var score = 0
score = 100
println(name)
println(age)
println(score)
}
Output:
Budi
20
100
Kenapa score boleh berubah?
Karena:
var score = 0
Kenapa name tidak boleh diubah?
Karena:
val name = "Budi"
41. Kesalahan dalam subtitle yang perlu kamu waspadai
Karena materi ini berasal dari caption/transkrip video, ada beberapa istilah yang terdengar kurang tepat.
Misalnya:
“val is values of all the constants and var is a value”
Ini tidak tepat secara terminologi.
Pemahaman yang lebih benar:
val
→ read-only variable/property reference
var
→ variable/property yang dapat di-reassign
const val
→ compile-time constant
Kemudian pernyataan bahwa Float digunakan untuk “small numbers” juga terlalu menyederhanakan.
Yang lebih tepat:
Float
→ precision lebih rendah
Double
→ precision lebih tinggi
42. Apa yang harus benar-benar kamu kuasai dari materi ini?
Untuk sekarang jangan mencoba menghafal semua detail.
Pastikan kamu benar-benar memahami 6 hal berikut:
1. Data
Program mengolah data.
10
"Budi"
3.14
true
2. Variable/value
Data dapat diberi nama:
val age = 20
3. val
Tidak dapat di-reassign:
val age = 20
// age = 21 ❌
4. var
Dapat di-reassign:
var age = 20
age = 21 // ✅
5. Type
Data memiliki tipe:
val age: Int = 20
val pi: Double = 3.14
val x: Float = 3.14f
6. const val
Untuk compile-time constant:
const val PI = 3.14159
43. Peta konsep materi
Simpan gambaran ini:
DATA
│
↓
Variable / Value
│
┌─────────┴─────────┐
↓ ↓
val var
│ │
tidak reassign bisa reassign
│ │
└─────────┬─────────┘
↓
DATA TYPE
│
┌────────────┼────────────┐
↓ ↓ ↓
Int Double Float
│ │ │
10 3.14 3.14f
Dan satu tingkat lebih lanjut:
const val
↓
compile-time constant
Kesimpulan
Materi ini sebenarnya sedang mengajarkan cara pertama kita menyimpan dan mengelola data di Kotlin.
Contoh paling dasar:
val age: Int = 20
memiliki empat bagian:
val
↓
cara deklarasi
age
↓
nama data
Int
↓
tipe data
20
↓
nilai
Kemudian kamu perlu membedakan:
val → tidak bisa di-reassign
var → bisa di-reassign
dan:
Int → bilangan bulat
Double → angka desimal/floating-point, precision lebih tinggi
Float → angka floating-point, precision lebih rendah
Sedangkan:
const val PI = 3.14159
adalah konsep yang lebih spesifik untuk compile-time constant.
Kalau kamu sudah memahami val, var, Int, Double, Float, dan konsep “nama + tipe + nilai”, kamu sudah memiliki fondasi penting untuk masuk ke materi berikutnya seperti String, Boolean, operator, input, dan conditional statement.