Pemrograman Modular
Pemrograman modular adalah cara bagaimana kita memecah kode kita yang sebelumnya dalam sebuah file besar menjadi kumpulan file-file kecil. Berikut contoh program transaksi saldo sederhana :
# april.nim
type
StatusTransaksi = enum
menungguPembayar | dibatalkan | berhasil
Saldo = object
id: string
saldo: int
Transaksi = object
bcId: string # pengirim
ccId: string # penerima
nominal: int # jumlah yang diterima
status: StatusTransaksi
deskripsi: string
var saldoNasabah : []Saldo = [
Saldo(id: "Anya", saldo: 10000),
Saldo(id: "Elisabet", saldo: 5000)
]
proc efekSaldo(transfer: Transaksi) =
for nasabah in saldoNasabah:
if nasabah.id == transfer.bcId:
nasabah.saldo -= transfer.nominal
elif nasabah.id == transfer.ccId:
nasabah.id += transfer.nominal
proc cekSaldo(id: string) =
for saldo in saldoNasabah:
if saldo.id == id:
echo "-- Akun ditemukan --"
echo "Nama : " & saldo.id
echo "Saldo : " & saldo.saldo
proc transaksiBaru(pbcid: string, pccId: string,pnominal:int ,pdeskripsi: string) : Transaksi =
return Transaksi(
bcid:pid,
ccId:pccId,
deskripsi:pdeskripsi,
nominal: pnominal,
status: StatusTransaksi.menungguPembayar)
# aksi untuk membatalkan transaksi
proc batalkanTransaksi(self:Transaksi) =
if self.status != berhasil:
self.status = StatusTransaksi.dibatalkan
echo "Transaksi " & self.deskripsi & " dibatalkan "
else:
echo "Transaksi yang berhasil tidak bisa dibatalkan"
# aksi untuk membayar transaksi
proc bayar(self: Transaksi) =
if self.status != dibatalkan:
efekSaldo(self)
self.status = StatusTransksi
echo "Berhasil membayar untuk " & self.deskripsi
else:
echo "Transaksi yang dibatalkan tidak bisa berhasil"
when isMainModule:
cekSaldo("Anya")
cekSaldo("Elisabet")
var transferTeman = transaksiBaru("Anya","Elisabet",5000,"Subrek OnlyFans Elisabet")
transferTeman.berhasil()
cekSaldo("Anya")
cekSaldo("Elisabet")
Sekarang kita akan membagi kode diatas sesuai dengan kegunaanya masing-masing
(transaksi.nim
,saldo.nim
dan april.nim
):
# transaksi.nim
import ./saldo
type
StatusTransaksi = enum
menungguPembayar | dibatalkan | berhasil
Transaksi = object
bcId: string # pengirim
ccId: string # penerima
nominal: int # jumlah yang diterima
status: StatusTransaksi
deskripsi: string
proc transaksiBaru(pbcid: string, pccId: string,pnominal:int ,pdeskripsi: string) : Transaksi =
return Transaksi(
bcid:pid,
ccId:pccId,
deskripsi:pdeskripsi,
nominal: pnominal,
status: StatusTransaksi.menungguPembayar)
# aksi untuk membatalkan transaksi
proc batalkanTransaksi(self:Transaksi) =
if self.status != berhasil:
self.status = StatusTransaksi.dibatalkan
echo "Transaksi " & self.deskripsi & " dibatalkan "
else:
echo "Transaksi yang berhasil tidak bisa dibatalkan"
# aksi untuk membayar transaksi
proc bayar(self: Transaksi) =
if self.status != dibatalkan:
efekSaldo(self)
self.status = StatusTransksi
echo "Berhasil membayar untuk " & self.deskripsi
else:
echo "Transaksi yang dibatalkan tidak bisa berhasil"
# saldo.nim
type
Saldo = object
id: string
saldo: int
var saldoNasabah : []Saldo = [
Saldo(id: "Anya", saldo: 10000),
Saldo(id: "Elisabet", saldo: 5000)
]
proc efekSaldo(transfer: Transaksi) =
for nasabah in saldoNasabah:
if nasabah.id == transfer.bcId:
nasabah.saldo -= transfer.nominal
elif nasabah.id == transfer.ccId:
nasabah.id += transfer.nominal
proc cekSaldo(id: string) =
for saldo in saldoNasabah:
if saldo.id == id:
echo "-- Akun ditemukan --"
echo "Nama : " & saldo.id
echo "Saldo : " & saldo.saldo
#april.nim
import ./transaksi
import ./saldo
when isMainModule:
cekSaldo("Anya")
cekSaldo("Elisabet")
var transferTeman = transaksiBaru("Anya","Elisabet",5000,"Subrek OnlyFans Elisabet")
transferTeman.berhasil()
cekSaldo("Anya")
cekSaldo("Elisabet")
Bentuk folder kita sekarang:
+-[src]
|-- april.nim
|-- saldo.nim
|-- transaksi.nim
+- april.nimble
Pada file transaksi.nim
dan april.nim
kita mempunyai kata kunci import
, import
(atau
sebutanya mengimpor) berguna untuk memanggil sebuah file lokal atau pustaka untuk isinya diguankan di program kita.
File transaksi.nim
kita mengimpor file ./saldo
(saldo.nim
untuk import .nim
tidak perlu ditulis, ./
berarti lokasi script yang mengimpor) karena didalam file transaksi
kita menggunakan fungsi efekSaldo
dari saldo.nim
begitu juga di dalam file april.nim
mengimpor file transaksi.nim
dan saldo.nim
.
Bagian ini sudah keluar dari pemahasan Nim dasar dan masuk pembahasan fitur khusus yang dimiliki Nim, jadi bagian buku setelah pembahasan ini sudah memasuki bagian khusus Nim, bila pernasaran bila melangkah ke bab lain.