Pustaka standar Nim terpasang bersama kompilator dan terbagi atas puluhan modul dengan tanggung jawab yang tegas, sehingga kebutuhan harian seperti pengolahan teks, penyaringan koleksi, tabel asosiatif, jalur berkas, dan tanggal tidak menuntut paket pihak ketiga. Topik ini menelusuri lima modul yang paling sering dipanggil pada proyek nyata, yaitu strutils, sequtils, tables, os, dan times, melalui satu program inventaris buku yang memakai kelimanya sekaligus.
Lima modul dalam satu program#
Program inventaris berikut menerima empat baris katalog berformat judul; penulis; tahun, menyaring buku terbitan 2020 ke atas, menghitung isi per dekade, merapikan jalur berkas arsip, lalu menampilkan tanggal jatuh tempo. Setiap tahap memakai satu modul pustaka standar, dan seluruh tahap dijalankan dari satu berkas yang sama.
# inventaris_pustaka.nim: lima modul pustaka standar dalam satu program
import strutils, sequtils, tables, os, times
let entri = @[
"Nim dalam Praktik; Citra; 2019",
"Dasar Pemrograman; Budi; 2023",
"Jaringan Komputer; Ali; 2016",
"Struktur Data; Dewi; 2021",
]
# strutils: memecah dan membersihkan tiap baris
let buku = entri.mapIt(it.split(';').mapIt(it.strip))
# sequtils: memilih buku terbitan 2020 ke atas
for b in buku.filterIt(parseInt(it[2]) >= 2020):
echo b[0], " (", b[1], ", ", b[2], ")"
# tables: menghitung jumlah buku per dekade dengan urutan terjaga
var perDekade: OrderedTable[int, int]
for b in buku:
let dekade = parseInt(b[2]) div 10 * 10
perDekade[dekade] = perDekade.getOrDefault(dekade, 0) + 1
for dekade, jumlah in perDekade.pairs:
echo "dekade ", dekade, ": ", jumlah, " buku"
# os: merapikan jalur berkas arsip
echo "arsip: ", normalizedPath(joinPath("/home/pustaka", "data", "../katalog.tsv"))
# times: tanggal tetap dibangun dari parse agar keluaran dapat diulang
let jatuhTempo = parse("2026-11-04T10:00:00", "yyyy-MM-dd'T'HH:mm:ss")
echo "jatuh tempo: ", format(jatuhTempo, "dddd, d MMMM yyyy 'pukul' HH:mm")# kompilasi dan jalankan program inventaris lima modul
nim c --hints:off -r inventaris_pustaka.nimDasar Pemrograman (Budi, 2023)
Struktur Data (Dewi, 2021)
dekade 2010: 2 buku
dekade 2020: 2 buku
arsip: /home/pustaka/katalog.tsv
jatuh tempo: Wednesday, 4 November 2026 pukul 10:00Perhatikan cara lima import yang ditulis sebaris menggantikan lima pernyataan terpisah, karena Nim mengizinkan beberapa modul pada satu import yang dipisah koma. Dua buku lolos saringan tahun, tabel dekade mencatat empat buku pada dua entrinya, dan jalur berkas menyusut setelah segmen .. dinormalisasi.
Teks dan koleksi dengan strutils dan sequtils#
strutils adalah perangkat dasar teks, berisi split untuk memecah string menurut pemisah, strip untuk membuang spasi di kedua tepi, dan parseInt untuk penguraian angka. Ketiganya bekerja pada tipe string dan seq[string] bawaan Nim tanpa kelas pembungkus. Pada program inventaris, satu baris katalog menjadi tiga bagian melalui it.split(';').mapIt(it.strip), dan proses membersihkan terjadi di tempat yang sama dengan proses memecah.
sequtils melengkapi koleksi dengan gaya fungsional yang berantai. Proc mapIt mengubah setiap elemen, filterIt memilih yang lolos syarat, dan keduanya memakai parameter implisit it sehingga tubuh pemrosesannya ringkas. Rangkaian filterIt(parseInt(it[2]) >= 2020) membaca sebagai kalimat, yaitu pilih buku yang kolom ketiganya bernilai 2020 atau lebih. Pendekatan deklaratif ini menggantikan perulangan bersarang yang manual dan menurunkan peluang salah indeks. Kedua modul ini memang dirancang untuk berpasangan, karena strutils menghasilkan seq[string] dari split, dan hasil itu langsung menjadi masukan bagi pemrosesan sequtils. Koleksi lain dari sequtils seperti anyIt dan allIt menjawab pertanyaan keberadaan dengan nilai boolean, sedangkan foldl melipat seluruh koleksi menjadi satu nilai, dan semua pemrosesnya tetap memakai notasi it yang sama.
Modul lain yang sering berdampingan dengan keduanya adalah strformat untuk pembentukan teks berpola, dan unicode untuk teks yang melampaui ASCII, karena strutils bekerja pada tingkat byte sehingga prosedurnya cepat tetapi tidak memahami aksara berbita ganda.
Tabel asosiatif dengan tables#
Modul tables menyediakan Table[K, V] untuk pemetaan kunci ke nilai dengan akses yang cepat, serta OrderedTable yang mempertahankan urutan kunci pertama kali dimasukkan. Pada penghitungan dekade, getOrDefault mengambil isi lama atau 0 untuk kunci baru, sehingga penambahan pencacah menjadi satu baris tanpa percabangan. OrderedTable sengaja dipilih di sini karena keluaran program harus sama pada setiap eksekusi, sedangkan Table biasa tidak menjamin urutan penyisipannya. Perulangan for dekade, jumlah in perDekade.pairs membedah tabel menjadi pasangan kunci dan nilai secara langsung.
Jalur berkas dan waktu dengan os dan times#
Modul os mengelola jalur dan berkas tanpa menuntut penulisnya menyentuh sistem operasi secara langsung. joinPath menggabungkan segmen jalur dengan pemisah yang benar, dan normalizedPath menyederhanakan segmen relatif seperti .., sehingga /home/pustaka/data/../katalog.tsv menjadi /home/pustaka/katalog.tsv. Fungsi seperti getEnv, fileExists, dan walkDir berada di modul yang sama, menjadikannya titik masuk tunggal untuk kebutuhan berkas pada program baris perintah. Jalur yang dirakit dengan joinPath selalu benar pada sistem operasi tempat program disusun, sehingga program yang sama berpindah antara pemisah jalur yang berbeda tanpa konstanta khusus.
Pada modul times, kebutuhan yang melampaui tampilan dilayani konversi ke bilangan. Proc toUnix mengubah DateTime menjadi detik sejak epoch sehingga selisih dua tanggal menjadi pengurangan biasa, dan fromUnix mengembalikannya, sehingga pencatatan waktu pada basis data maupun protokol jaringan yang memakai format epoch tetap alami di Nim.
Modul times menangani tanggal dan jam melalui tipe DateTime beserta format pembentuknya. Fungsi parse menguraikan teks menurut pola yyyy-MM-dd'T'HH:mm:ss, dan format mengembalikannya ke teks menurut pola bebas, sehingga tanggal dapat disimpan, dibandingkan, dan ditampilkan tanpa manipulasi string manual.
Tanggal pada program inventaris dibangun dari parse terhadap teks tetap, bukan dari now(), karena now() menghasilkan nilai yang berbeda setiap saat sehingga keluaran program tidak dapat diulang. Pola tanggal tetap ini juga membuat pengujian dapat membandingkan keluaran secara persis.
Ringkasan#
strutilsmemecah, membersihkan, dan menguraikan teks, sedangkansequtilsmemproses koleksi secara deklaratif denganmapItdanfilterItyang memakai parameter implisitit.tablesmenyediakanTableuntuk pemetaan cepat danOrderedTableuntuk urutan kunci yang terjaga, dan pilihan keduanya menentukan apakah keluaran program dapat diulang secara persis.osmenangani jalur berkas denganjoinPathdannormalizedPath, sedangkantimesmenguraikan dan membentuk tanggal melaluiparsedanformatdengan pola yang dinyatakan eksplisit.
Referensi#
- Module strutils — Nim documentation
— Daftar proc pengolahan string seperti
split,strip, danparseInt. - Module sequtils — Nim documentation
— Kontrak
mapIt,filterIt, dan proc koleksi deklaratif lainnya. - Module tables — Nim documentation
— Perbedaan
TabledanOrderedTablebeserta jaminan urutannya. - Module os — Nim documentation — Proc jalur berkas, lingkungan, dan direktori pada modul os.
- Module times — Nim documentation
— Tipe
DateTime, polaparsedanformat, serta daftar format pengenalnya.