Tugas 4 - Komponen Button Dice Roller
Nama : Christoforus Indra Bagus Pratama
NRP : 5025231124
Mata Kuliah : Pemrograman Perangkat Bergerak (C)
Tanggal : 26 Maret 2026
Pertemuan : 5
Penjelasan Kode Aplikasi Lempar Dadu Acak
Aplikasi lempar dadu acak ini dibangun menggunakan Jetpack Compose, yang menggunakan pendekatan deklaratif untuk mengelola state dan tata letak komponen antarmuka pengguna (UI). Berikut adalah penjelasan detail mengenai alur program dan fungsionalitas kode baris demi baris.
Alur Program Bekerja (Program Flow)
Secara garis besar, alur kerja aplikasi ini adalah sebagai berikut:
- Saat aplikasi dijalankan, OS Android memanggil dan mengeksekusi
MainActivity. MainActivitymemuat tema aplikasi (Pertemuan5Theme) dan memanggil komponen antarmuka utama, yaituDiceRollerApp().DiceRollerApp()mengatur agar elemen di dalamnya berada tepat di tengah layar, kemudian memanggil komponen inti:DiceRollerWithImageAndButton().- Di dalam
DiceRollerWithImageAndButton(), aplikasi menyimpan nilai awal dadu (yaitu1) menggunakan sistem State (mutableStateOf). - Tampilan awal dirender: sebuah gambar dadu angka 1 dan sebuah tombol "Roll" di bawahnya.
- Interaksi: Ketika tombol "Roll" diklik, program menghasilkan angka acak dari 1 hingga 6, yang kemudian memperbarui nilai State.
- Recomposition: Karena nilai State berubah, Jetpack Compose secara otomatis menggambar ulang (refresh) komponen UI yang terdampak. Logika
whenakan mencocokkan angka baru tersebut dengan sumber gambar dadu yang sesuai, lalu menampilkannya ke layar.
Bedah Kode Detail
Berikut adalah rincian fungsionalitas dari setiap bagian kode:
1. Deklarasi Package & Import
package com.example.pertemuan5 import android.os.Bundle // ... (beberapa baris import lainnya disembunyikan agar ringkas) import com.example.pertemuan5.ui.theme.Pertemuan5Theme
package com.example.pertemuan5: Mendefinisikan lokasi atau identitas unik dari file ini di dalam struktur direktori proyek aplikasi.import ...: Mengimpor library dan fungsi bawaan Android serta Jetpack Compose yang diperlukan agar komponen sepertiImage,Button,Text, danModifierdapat dikompilasi oleh sistem.
2. Entry Point (Pintu Masuk Aplikasi)
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
setContent{
Pertemuan5Theme(){
DiceRollerApp()
}
}
}
}
class MainActivity : ComponentActivity(): Mendefinisikan kelas utama yang mewarisi sifat dariComponentActivity, yang merupakan fondasi standar untuk membuat antarmuka layar aplikasi Android berbasis Compose.override fun onCreate(...): Fungsi siklus hidup (lifecycle) yang dipanggil pertama kali saat aktivitas (layar) baru saja diciptakan oleh sistem Android.setContent { ... }: Berfungsi sebagai jembatan antara kerangka kerja Android tradisional dengan Jetpack Compose. Semua hierarki komponen UI diletakkan di dalam blok ini.Pertemuan5Theme(): Menerapkan konfigurasi tema aplikasi (warna, tipografi, bentuk) ke dalam hierarki UI di bawahnya.DiceRollerApp(): Memanggil fungsi Composable yang mendefinisikan struktur tampilan utama aplikasi.
3. Komponen Layout Utama (Wrapper)
@Preview(showBackground=true)
@Composable
fun DiceRollerApp(){
DiceRollerWithImageAndButton(modifier = Modifier
.fillMaxSize()
.wrapContentSize(align = Alignment.Center)
)
}
@Composable: Anotasi wajib yang menginformasikan kepada compiler bahwa fungsi ini berperan untuk membangun komponen UI.@Preview(...): Sebuah fitur tooling yang memungkinkan pengembang untuk melihat pratinjau desain (preview) secara langsung di dalam IDE tanpa harus menjalankan aplikasi di perangkat atau emulator.Modifier.fillMaxSize(): Atribut yang menginstruksikan komponen untuk membentang dan mengisi seluruh ruang layar yang tersedia secara maksimal, baik lebar maupun tinggi.wrapContentSize(align = Alignment.Center): Memastikan komponen-komponen di dalamnya diposisikan terpusat (tepat di tengah) dari ruang layar yang telah dialokasikan.
4. Logika Inti & Tampilan Dadu
@Composable
fun DiceRollerWithImageAndButton(modifier: Modifier = Modifier){
var result by remember {
mutableStateOf(1)
}
mutableStateOf(1): Menginisialisasi sebuah variabel State reaktif dengan nilai awal1. Dalam paradigma Compose, setiap perubahan pada nilai State akan memicu pembaruan antarmuka secara otomatis.remember { ... }: Berfungsi untuk menjaga atau "mengingat" nilai state (dalam hal ini variabelresult) agar tidak di-reset kembali ke nilai awal ketika proses penggambaran ulang (recomposition) terjadi.
var imageOfDice = when(result){
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
when(result): Blok kontrol aliran bersyarat yang mengevaluasi nilai integer saat ini yang tersimpan di dalam variabelresult.- Blok ini memetakan nilai numerik ke referensi sumber daya gambar yang sesuai. Sebagai contoh, jika
resultbernilai3, maka referensi yang dikembalikan adalahR.drawable.dice_3. Kondisielseberfungsi sebagai penangkap nilai 6 (atau nilai di luar jangkauan 1-5).
Column(
horizontalAlignment = Alignment.CenterHorizontally
,modifier = modifier
){
Image(painter = painterResource(id = imageOfDice), contentDescription = null)
Button(onClick = {result = (1.. 6).random()}){
Text(text = "Roll")
}
}
}
Column { ... }: Kontainer tata letak yang menyusun komponen-komponen anak di dalamnya secara vertikal dari atas ke bawah.horizontalAlignment = Alignment.CenterHorizontally: Parameter yang memastikan semua elemen di dalamColumnsejajar di bagian tengah sumbu horizontal.Image(...): Komponen untuk memuat dan merender aset gambar. FungsipainterResource(id = imageOfDice)bertugas menarik file gambar dari direktorires/drawableberdasarkan ID yang dihasilkan oleh evaluasi blokwhensebelumnya.Button(onClick = { result = (1..6).random() }): Komponen tombol yang dapat ditekan. ParameteronClickmenangani *event listener* saat tombol disentuh: mengeksekusi fungsi(1..6).random()untuk menghasilkan bilangan bulat acak baru dari 1 hingga 6, lalu menetapkannya ke dalam variabel stateresult.Text(text = "Roll"): Menampilkan teks label "Roll" di dalam area tombol tersebut.


Komentar
Posting Komentar