Topik ini membahas pemilihan dan pembatasan lingkup proyek yang menutup jalur Rust. Pembahasan mencakup kriteria penilaian calon proyek, perbandingan beberapa kandidat, penetapan batas berupa daftar hal yang dikerjakan beserta daftar hal yang sengaja tidak dikerjakan, lalu pembuktian kelayakan bentuk data lewat purwarupa, yakni program kecil sekali jalan yang dibuang setelah keputusannya diambil. Hasil akhir topik adalah proyek arsip-suhu dengan lingkup terkunci dan format data yang sudah terbukti dapat diolah, sehingga perancangan arsitektur dapat dimulai tanpa menebak bentuk masukannya.
Kriteria penilaian calon proyek#
Proyek penutup dinilai dari empat kriteria yang berkaitan langsung dengan materi jalur ini. Kriteria pertama adalah cakupan latihan, yaitu proyek harus memindahkan kepemilikan data antar fungsi, modul, dan utas secara nyata, serta memaksa penanganan error pada setiap batas antarmuka. Kriteria kedua adalah kemampuan bertahap, yaitu proyek harus dapat dibangun dalam beberapa versi yang masing-masing berdiri dan dapat dijalankan, bukan program yang hanya jadi utuh di akhir. Kriteria ketiga adalah kemandirian, yaitu seluruh masukan dan keluaran berupa berkas lokal atau teks sehingga tidak bergantung pada layanan eksternal. Kriteria keempat adalah bentuk data yang ringkas, yaitu masukan dapat ditulis tangan dan hasilnya dapat dihitung ulang tanpa alat bantu.
Tiga calon proyek dibandingkan terhadap kriteria tersebut. Kalkulator konversi satuan kalah pada cakupan karena seluruh datanya berupa angka tunggal yang tidak berpindah tempat. Server pencatat daring kalah pada kemandirian karena pengujian yang berarti menuntut klien dan jaringan. Pengolah arsip catatan sensor suhu lolos keempat kriteria sekaligus, karena membaca teks baris demi baris, mengubahnya menjadi struktur data milik sendiri, menggabungkan hasil dari beberapa berkas secara paralel, dan melaporkan kegagalan pada tingkat baris.
| Calon proyek | Cakupan ownership dan error | Dapat bertahap | Mandiri tanpa layanan |
|---|---|---|---|
| kalkulator konversi satuan | lemah, data tidak berpindah | ya | ya |
| server pencatat daring | kuat | sebagian | tidak, butuh jaringan |
| pengolah arsip catatan suhu | kuat | ya | ya |
Pengolah arsip catatan juga menyambung ranah contoh yang sudah dipakai di sepanjang jalur, yaitu catatan (log) sensor suhu, sehingga tidak ada istilah baru yang perlu diperkenalkan pada data contohnya.
Lingkup proyek arsip-suhu#
Proyek terpilih diberi nama arsip-suhu, sebuah alat baris perintah yang membaca arsip catatan suhu harian, memvalidasi setiap barisnya, lalu mencetak statistik lengkap. Satu baris arsip memuat tanggal dan suhu yang dipisahkan spasi, dan berkas contoh berikut menjadi data uji resmi untuk seluruh pengerjaan berikutnya.
2026-01-01 24.1
2026-01-02 25.6
2026-01-03 26.5
2026-01-04 28.4
2026-01-05 27.3Aturan bentuk barisnya ditetapkan sejak awal supaya keputusan validasi tidak berubah di tengah jalan. Tanggal dibaca sebagai teks apa adanya, suhu harus berupa bilangan, dan nilai di luar jangkauan sensor yang masuk akal ditolak. Nilai ukur berupa bilangan pecahan membuat pembulatan dan pembandingan nilai pecahan ikut terlatih. Daftar hal yang dikerjakan pun tetap pendek, yaitu membaca satu atau beberapa berkas, mengurai baris menjadi catatan, menghitung jumlah baris, rata-rata, suhu tertinggi, dan suhu terendah, lalu mencetak laporan teks.
Daftar hal yang tidak dikerjakan ditetapkan dengan kesungguhan yang sama, karena daftar itulah yang menjaga lingkup tetap tertutup. Validasi kalender tanggal tidak dikerjakan, sehingga “2026-13-45” diterima sepanjang kolomnya dua. Baris kembar tidak digabungkan, format keluaran tidak dibuat dapat diatur, dan tidak ada jaringan sama sekali. Diagram berikut memisahkan alur yang termasuk lingkup dari hal yang berada di luarnya.
Purwarupa satu berkas#
Purwarupa menguji satu risiko terbesar proyek ini, yaitu apakah bentuk baris yang dipilih memang cukup untuk diolah menjadi statistik. Program berikut ditulis sebagai satu berkas tanpa modul, memuat data contoh yang sama di dalam kodenya, dan menerima nama berkas sebagai argumen opsional. Ia dapat dikompilasi langsung oleh rustc tanpa proyek Cargo karena seluruh logikanya berada dalam satu berkas tunggal.
//! Purwarupa arsip-suhu: satu berkas tanpa modul untuk menguji bentuk data.
fn main() {
let teks = match std::env::args().nth(1) {
Some(nama) => std::fs::read_to_string(nama).expect("berkas dapat dibaca"),
None => String::from(
"2026-01-01 24.1\n2026-01-02 25.6\n2026-01-03 26.5\n2026-01-04 28.4\n2026-01-05 27.3\n",
),
};
let mut suhu: Vec<f64> = Vec::new();
for baris in teks.lines() {
let kolom: Vec<&str> = baris.split_whitespace().collect();
if kolom.len() == 2 {
if let Ok(nilai) = kolom[1].parse() {
suhu.push(nilai);
}
}
}
let jumlah = suhu.len();
let rata = suhu.iter().sum::<f64>() / jumlah as f64;
println!("jumlah baris : {jumlah}");
println!("rata-rata : {rata:.2} °C");
println!(
"tertinggi : {:.2} °C",
suhu.iter().copied().fold(f64::NEG_INFINITY, f64::max)
);
println!(
"terendah : {:.2} °C",
suhu.iter().copied().fold(f64::INFINITY, f64::min)
);
}jumlah baris : 5
rata-rata : 26.38 °C
tertinggi : 28.40 °C
terendah : 24.10 °CKeluaran tersebut berasal dari data yang tertanam pada program. Nilai 26.38 adalah rata-rata dari 24.1, 25.6, 26.5, 28.4, dan 27.3, dan dua nilai ekstremnya dapat diperiksa langsung dari kelima baris data. Perintah berikut mengompilasi purwarupa ke luar pohon konten situs lalu menjalankannya terhadap berkas catatan pada bundle topik ini.
# kompilasi purwarupa menjadi biner di luar pohon konten
rustc --edition=2021 purwarupa.rs -o /tmp/purwarupa-arsip
# jalankan purwarupa terhadap berkas catatan dari bundle
/tmp/purwarupa-arsip catatan.txtjumlah baris : 5
rata-rata : 26.38 °C
tertinggi : 28.40 °C
terendah : 24.10 °CKeluaran kedua identik dengan keluaran pertama, dan itulah bukti yang dibutuhkan, yaitu bentuk baris tanggal lalu suhu memang cukup untuk menghasilkan statistik yang benar. Purwarupa sekaligus memperlihatkan tiga kelemahan yang menjadi pekerjaan arsitektur berikutnya. Baris rusak dilewati tanpa pesan apa pun, kegagalan membaca berkas menggugurkan program melalui expect, dan penguraian bercampur dengan pencetakan di dalam satu fungsi. Kelemahan itu tidak diperbaiki di sini karena purwarupa memang dibuang begitu keputusannya diambil, dan perbaikannya menuntut pembagian modul serta tipe error yang layak.
Kesalahan umum#
Memilih proyek dari daftar fitur, bukan dari materi yang ingin diasah. Daftar fitur yang panjang membuat proyek terasa megah tetapi sering kali seluruh fiturnya memakai pola kode yang sama. Nilailah calon proyek terhadap materi yang ingin dilatih, misalnya perpindahan kepemilikan dan penanganan error, lalu susun fitur setelah calonnya menang.
Tidak menuliskan hal yang tidak dikerjakan. Lingkup tanpa daftar pengecualian tumbuh diam-diam, misalnya validasi tanggal yang masuk karena terlihat kecil, lalu format keluaran lain menyusul. Tuliskan daftar pengecualiannya bersama daftar fiturnya, dan perlakukan keduanya sebagai keputusan yang sama kuatnya.
Menjadikan purwarupa sebagai fondasi kode akhir. Purwarupa sengaja mengabaikan struktur supaya keputusan bentuk data tercapai dengan cepat, dan kualitas rendah itulah yang membuatnya layak dibuang. Salin pelajarannya, yaitu bentuk data yang terbukti, bukan berkas kodenya, ke tahap perancangan.
Ringkasan#
- Proyek penutup dinilai dengan empat kriteria, yaitu cakupan latihan ownership dan error, kemampuan bertahap, kemandirian tanpa layanan eksternal, dan bentuk data yang ringkas.
- Proyek terpilih adalah arsip-suhu, alat baris perintah pengolah arsip catatan sensor suhu harian dengan format baris tanggal lalu suhu.
- Daftar hal yang tidak dikerjakan ditetapkan setara dengan daftar fitur agar lingkup tetap tertutup selama pengerjaan.
- Purwarupa satu berkas membuktikan bentuk data dapat diolah menjadi statistik yang benar sekaligus menunjukkan kelemahan yang menjadi pekerjaan arsitektur.
Referensi#
- An I/O Project: Building a Command Line Program — The Rust Book — Studi proyek baris perintah lengkap dari membaca berkas sampai pengujian.
- Command Line Applications in Rust — rust-cli.github.io — Panduan struktur dan kebiasaan alat baris perintah pada Rust.
- Creating a New Package — The Cargo Book — Pembuatan proyek baru dengan cargo new beserta pilihan templatnya.