Prosedur dan
Fungsi
Prosedur adalah kumpulan
statemen yang melakukan sebuah pekerjaan. Event handler, misalnya, adalah
prosedur. Fungsi adalah kumpulan statemen yang melakukan sebuah pekerjaan dan
kemudian menghasilkan suatu nilai yang diberikan kepada bagian program yang
mengeksekusinya. Anda telah menggunakan banyak fungsi built-in Visual Basic seperti CInt
dan IsNumeric.
Bab ini akan mendiskusikan
bagaimana menuliskan prosedur dan fungsi. Prosedur tidak merespon event, tetapi
dieksekusi hanya ketika dipanggil oleh statemen. Anda akan belajar bagaimana
menciptakan, memanggil, dan melewatkan argumen kepada prosedur. Anda juga akan
belajar teknik-teknik untuk aplikasi debugging yang menggunakannya.
Dalam terminologi
berorientasi-objek, istilah metode dipakai untuk prosedur dan fungsi.
4.1 Prosedur
KONSEP: Anda dapat menuliskan prosedur sendiri yang melakukan pekerjaan
spesifik. Prosedur tidak dipicu oleh event, tetapi dipanggil dari statemen di
dalam prosedur lain.
Prosedur adalah
sekumpulan statemen yang melakukan sebuah pekerjaan. Event handler atau
prosedur event adalah sejenis prosedur yang dieksekusi ketika sebuah event,
seperti klik mouse, terjadi ketika program dijalankan. Bagian ini akan
menjelaskan prosedur-prosedur yang tidak dipicu oleh event, tetapi dieksekusi
oleh statemen di dalam prosedur lain.
Dengan menuliskan
prosedur sendiri, Anda dapat memodularisasi kode aplikasi, yaitu, memecahnya
menjadi prosedur-prosedur yang lebih kecil dan terkelolakan. Aplikasi-aplikasi
dunia-nyata pada umumnya memiliki ribuan baris kode, dan kecuali jika aplikasi
itu dimodularisasi, ia akan sangat sulit untuk dimodifikasi dan dikembangkan.
Prosedur dapat mereduksi
jumlah kode duplikat di dalam sebuah program. Jika pekerjaan tertentu dilakukan
di beberapa tempat, sebuah prosedur untuk melakukan pekerjaan itu dapat
dituliskan sekali dan dieksekusi kapanpun ia dibutuhkan.
Tutorial 4-1 akan
mengajarkan pada Anda sebuah aplikasi contoh yang menggunakan prosedur.
Tutorial 4-1:
Langkah 1: Bukalah projek Demo Prosedur.
Form aplikasi ditampilkan pada Gambar 4.1. Form ini memiliki sebuah kotak list
dengan nama listKeluaran dan dua tombol: tombolJalankan
dan tombolKeluar.
Gambar 4.1 Form Demo Prosedur
Langkah 2: Buka jendela Code dan temukan prosedur dengan nama TampilPesan, yang ditunjukkan di sini:
Sub TampilPesan()
'Ini adalah
sebuah prosedur yang menampilkan sebuah pesan.
listKeluaran.Items.Add("")
listKeluaran.Items.Add("Hallo
dari prosedur TampilPesan.")
listKeluaran.Items.Add("")
End Sub
Deklarasi dari sebuah
prosedur diawali dengan statemen Sub
dan diakhiri dengan statemen End Sub. Kode yang ditampilkan di antara
kedua statemen tersebut adalah tubuh prosedur. Ketika prosedur TampilPesan dieksekusi, ia akan
menampilkan sebuah baris kosong di dalam kotak list, yang diikuti dengan string
“Hallo dari prosedur TampilPesan.”, yang diikuti dengan sebaris kosong yang
lain. Gambar 4.2 menunjukkan bagian-bagian dari statemen Sub.
Gambar 4.2 Baris pertama dari prosedur
TampilPesan
Baris pertama dari
prosedur diawali dengan kata Sub,
yang diikuti dengan nama prosedur, yang diikuti dengan sepasang kurung. Pada
prosedur ini, kurung tersebut kosong. Nanti, Anda akan melihat prosedur yang
memiliki item-item di dalam kurung.
CATATAN:
Sebuah event handler
dilekatkan dengan kontrol, jadi namanya biasanya diawali dengan nama kontrol.
Sebagai contoh, event handler Click
dari tombolJalankan diberi nama tombolJalankan_Click. Karena prosedur
dengan tujuan umum tidak dilekatkan dengan kontrol, Anda tidak menggunakan
prefiks dengan sebuah nama kontrol.
Langkah 3: Prosedur tujuan umum tidak dieksekusi oleh sebuah event. Tetapi, ia
hanya bisa dipanggil. Lihat kode berikut untuk event handler tombolJalankan_Click. Statemen pada
baris 7 memanggil prosedur TampilPesan.
1
2
3
4
5
6
7
8
9
10
11
|
Private Sub
tombolJalankan_Click(…) Handles
tombolJalankan.Click
'Menampilkan
teks tertentu di dalam kotak list.
listKeluaran.Items.Add("Hallo dari prosedur
tombolJalankan_Click.")
listKeluaran.Items.Add("Sekarang, Saya memanggil prosedur
TampilPesan.")
'Memanggil
prosedur TampilPesan
TampilPesan()
'Menampilkan teks tertentu pada kotak list
listKeluaran.Items.Add("Sekarang, Saya kembali ke prosedur tombolJalankan_Click.")
End Sub
|
Jenis statemen ini, yang
dikenal dengan pemanggilan prosedur,
menyebabkan prosedur dieksekusi. Pemanggilan prosedur hanyalah nama prosedur
yang akan dieksekusi. Kurung mengikuti nama prosedur. Anda dapat pula
menggunakan katakunci Call, seperti
ditunjukkan di sini:
Call TampilPesan()
Katakunci Call bersifat opsional dan tidak
digunakan pada buku ini.
Ketika sebuah pemanggilan
prosedur dieksekusi, kendali program dicabangkan atau diarahkan ke prosedur dan
tubuh dari prosedur itu akan dieksekusi. Ketika prosedur selesai dieksekusi,
kendali kembali ke pemanggilan prosedur dan memulai mengeksekusi statemen
selanjutnya. Gambar 4.3 mengilustrasikan bagaimana aplikasi ini dieksekusi dari
prosedur tombolJalankan_Click kepada
pemanggilan prosedur TampilPesan,
dan kemudian kembali ke prosedur tombolJalankan_Click.
Gambar 4.3 Pemanggilan prosedur
Langkah 4: Jalankan aplikasi. Klik tombol Jalankan.
Form akan ditampilkan seperti ditunjukkan pada Gambar 4.4.
Gambar 4.4 Hasil dari prosedur demo
Seperti yang dapat Anda
lihat, statemen-statemen di dalam event handler tombolJalankan_Click dieksekusi sampai pemanggilan prosedur TampilPesan. Pada titik itu, kendali
program diarahkan ke prosedur TampilPesan
dan semua statemen di dalamnya dieksekusi. Ketika prosedur TampilPesan selesai dieksekusi, kendali program kembali ke event
handler tombolJalankan_Click dan
memulai eksekusi pada baris setelah pemanggilan TampilPesan.
Langkah 5: Klik tombol Keluar untuk mengakhiri aplikasi.
Mendeklarasikan Prosedur
Bentuk umum dari
pendeklarasian prosedur adalah sebagai berikut:
[Penspesifikasi_Akses]
Sub Nama_Prosedur ([Daftar_Parameter])
[Statemen_Statemen]
End Sub
Item-item yang
ditunjukkan di dalam kurung siku bersifat opsional. Penspesifikasi_Akses menetapkan aksesibilitas dari prosedur. Ini
adalah permasalahan penting karena sejumlah aplikasi memiliki lebih dari satu
form. Ketika Anda menggunakan penspesifikasi akses Private, prosedur tersebut hanya dapat diakses oleh
prosedur-prosedur lain yang dideklarasikan di dalam kelas yang sama atau form
yang sama. Ketika prosedur diawali dengan Public,
maka prosedur itu dapat diakses oleh prosedur-prosedur yang dideklarasikan di
dalam form-form lain. Jika Anda mengabaikan (tidak menetapkan) penspesifikasi
akses, ma ia akan dianggap dideklarasikan Public.
Anda akan menggunakan penspesifikasi akses pada bab-bab ke depan.
Yang mengikuti katakunci Sub adalah nama prosedur. Anda
sebaiknya selalu memberikan prosedur sebuah nama yang merefleksikan tujuannya.
Anda sebaiknya mengadopsi gaya yang konsisten dalam penggunaan huruf besar dan
huruf kecil. Untuk nama prosedur, Anda sebaiknya menggunakan Pascal casing, yang membuat karakter
pertama dan karakter pertama dari tiap kata selanjutnya di dalam prosedur
sebagai huruf besar. Semua karakter lain huruf kecil. Penggunaan gaya
kapitalisasi yang berbeda untuk variabel dan prosedur akan memudahkan pembaca
kode Anda dalam mengetahui tipe entitas yang dimiliki tiap nama.
Di dalam kurung adalah DaftarParameter yang bersifat opsional.
Parameter adalah sebuah variabel spesial yang menerima sebuah nilai yang
dilewatkan kepada prosedur. Nanti pada bab ini, Anda akan melihat prosedur yang
menggunakan parameter untuk menerima data yang dilewatkan kepadanya.
Baris terakhir dari
sebuah deklarasi prosedur adalah statemen End
Sub. Di antara statemen Sub dan statemen End Sub, Anda menuliskan
statemen-statemen yang dieksekusi setiap kali prosedur dipanggil.
Tutorial 4.2 akan
menuntun Anda dalam melihat proses penulisan prosedur. Di dalam tutorial
tersebut, Anda akan menciptakan sebuah aplikasi yang menggunakan dua prosedur,
selain beberapa event handlernya.
Tutorial 4.2: Menciptakan
dan Memanggil Prosedur
Pada tutorial ini, Anda
akan menyelesaikan sebuah projek dimana di dalamnya sebuah lampu dinyalakan
atau dimatikan. Form dari projek ditunjukkan pada Gambar 4.5.
Gambar 4.5 Form dari projek Lampu
Form ini memiliki
sejumlah kontrol berikut:
·
Sebuah kontrol PictureBox dengan nama gbrLampuHidup,
yang menunjukkan citra dari sebuah bola lampu yang dinyalakan. Awalnya,
properti Visible dari PictureBox ini ditetapkan True.
·
Sebuah kontrol PictureBox dengan nama gbrLampuMati,
yang menunjukkan citra dari sebuah bola lampu yang dimatikan. Awalnya, properti
Visible dari PictureBox ini ditetapkan False.
·
Sebuah kontrol Label dengan nama labelStatusLampu
yang akan menampilkan “Hidup” atau “Mati”. Awalnya, properti Text dari kontrol ini ditetapkan
“Hidup”.
·
Sebuah kontrol Button dengan nama tombolTukarLampu
yang menghidup atau mematikan lampu.
·
Sebuah kontrol Button dengan nama tombolKeluar
yang menutup form.
Ketika user mengklik
tombol Tukar Lampu, status lampu akan dibalik. Dengan kata lain, jika lampu
sedang hidup, ia akan dimatikan. Jika lampu sedang mati, ia akan dihidupkan.
Ketika lampu dihidupkan,
aksi-aksi berikut akan terjadi:
·
Properti Visible
dari kontrol gbrLampuHidup akan
ditetapkan True.
·
Properti Visible
dari kontrol gbrLampuMati akan
ditetapkan False.
·
Properti Text
dari label labelStatusLampu akan
ditugasi string “Hidup”.
Ketika lampu dimatikan,
aksi-aksi berikut akan terjadi:
·
Properti Visible
dari kontrol gbrLampuMati akan
ditetapkan True.
·
Properti Visible
dari kontrol gbrLampuHidup akan
ditetapkan False.
·
Properti Text
dari label labelStatusLampu akan
ditugasi string “Mati”.
Langkah 1: Buka projek Lampu.
Langkah 2: Buka jendela Code dan ketikkan dua prosedur berikut, yang menunjukkan
baris 3 sampai baris 23. (Jangan ketikkan nomor baris. Nomor baris di sini
hanya untuk referensi).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
Public Class FormLampu
Sub HidupkanLampu()
'Menampilkan citra "Lampu
Hidup"
gbrLampuHidup.Visible = True
'Menyembunyikan citra "Lampu
Mati"
gbrLampuMati.Visible = False
'Mengubah teks label
labelStatusLampu.Text =
"Hidup"
End Sub
Sub MatikanLampu()
'Menampilkan citra "Lampu
Mati"
gbrLampuMati.Visible = True
'Menyembunyikan citra "Lampu
Hidup"
gbrLampuHidup.Visible = False
'Mengubah teks label
labelStatusLampu.Text =
"Mati"
End Sub
End Class
|
Sebelum melanjutkan, Anda
perlu melihat lebih dekat pada kode yang diberikan. Baris 3 adalah awal dari
sebuah prosedur dengan nama HidupkanLampu. Tujuan dari prosedur ini adalah
untuk mensimulasikan lampu yang menyala. Ketika prosedur ini dieksekusi, baris
5 membuat kontrol gbrLampuHidup
terlihat, baris 8 menyembunyikan kontrol gbrLampuMati,
dan baris 11 menetapkan properti Text
dari kontrol labelStatusLampu
menjadi “Hidup”.
Baris 14 merupakan awal
dari sebuah prosedur dengan nama MatikanLampu.
Tujuan dari prosedur ini adalah untuk mensimulasikan mematikan lampu. Ketika
prosedur ini dieksekusi, baris 16 membuat kontrol gbrLampuMati terlihat, baris 19 menyembunyikan kontrol gbrLampuHidup, dan baris 22 menetapkan
properti Text dari kontrol labelStatusLampu menjadi “Mati”.
Langkah 3: Buka jendela Designer dan
klik-ganda pada tombolTukarLampu
untuk menciptakan sebuah template kode untuk event handler Click. Ciptakan event handler ini dengan menuliskan kode yang
ditebalkan, seperti ditunjukkan di sini dari baris 2 sampai baris 7. (Jangan
ketik nomor baris, karena hanya untuk referensi saja).
1
2
3
4
5
6
7
8
|
Private Sub tombolTukarLampu_Click(…) Handles
tombolTukarLampu.Click
'Membalik status lampu
If gbrLampuHidup.Visible = True Then
MatikanLampu()
Else
HidupkanLampu()
End If
End Sub
|
Perhatikan kode tersebut.
Statemen If…Then pada baris 3
menentukan apakah kontrol gbrLampuHidup
terlihat atau tidak. Jika ya, ini berarti lampu dihidupkan, jadi statemen pada
baris 4 memanggil prosedur MatikanLampu
untuk mematikan lampu. Sebaliknya, klausa Else
pada baris 5 mengambil alih, dan prosedur HidupkanLampu
dipanggil pada baris 6 untuk menghidupkan lampu.
Langkah 4: Buka jendela Designer dan
klik-ganda pada tombolKeluar untuk
menciptakan sebuah template kode untuk event handler Click. Tuliskan kode berikut:
Private Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
'Menutup form
Me.Close()
End Sub
Langkah 5: Simpan projek, dan kemudian jalankan aplikasi. Form awalnya akan
ditampilkan seperti di sebelah kiri pada Gambar 4.6. Ketika Anda mengklik
tombol Tukar Lampu, form akan ditampilkan seperti di sebelah kanan pada Gambar 4.6.
Setiap kali Anda mengklik tombol Tukar
Lampu, status dari lampu akan
dibalik.
Gambar 4.6 Lampu dihidupkan atau
dimatikan
Langkah 6: Ketika selesai, keluar dari aplikasi.
Catatan:
Gambar 4.7 menunjukkan
sebuah form dari aplikasi.
Kotak list diberi nama listKeluaran. Tombol-tombol diberi nama
tombolJalankan dan tombolKeluar. Prosedur-prosedur dari
aplikasi adalah berikut:
Public Class FormPeriksa
Private Sub
tombolJalankan_Click(…) Handles tombolJalankan.Click
Dim intAngka
As Integer
Dim
strMasukan As String
strMasukan =
InputBox("Masukkan sebuah nilai")
intAngka =
CInt(strMasukan)
If intAngka
< 10 Then
Pesan1()
Pesan2()
Else
Pesan2()
Pesan1()
End If
End Sub
Private Sub
tombolKeluar_Click(…) Handles tombolKeluar.Click
'Menutup
form
Me.Close()
End Sub
Sub Pesan1()
listKeluaran.Items.Add("Saya adalah Indonesia")
End Sub
Sub Pesan2()
listKeluaran.Items.Add("Indonesia adalah Saya")
End Sub
End Class
Dimisalkan bahwa Anda
menjalankan aplikasi ini dan mengklik tombolJalankan. Apa yang akan ditampilkan
pada kotak list jika Anda memasukkan 10 pada kotak masukan? Bagaimana jika Anda
memasukkan 5? Lihat gambar berikut.
Gambar 4.7: Kiri: Hasil ketika Anda
memasukkan nilai 10; Kanan: Hasil ketika Anda memasukkan nilai 5
4.2 Melewatkan Argumen Kepada Prosedur
KONSEP: Ketika memanggil prosedur, Anda dapat melewatkan kepadanya
nilai-nilai yang dikenal sebagai argumen-argumen.
Nilai yang dilewatkan
kepada prosedur dikenal dengan argumen.
Anda telah biasa dengan bagaimana menggunakan argumen. Pada statemen berikut,
fungsi CInt dipanggil dan sebuah
argumen, teksMasukan.Text,
dilewatkan kepadanya:
intNilai = CInt(teksMasukan.Text)
Ada dua cara dalam
melewatkan argumen kepada prosedur: dengan nilai atau dengan referensi.
Pelewatan argumen dengan nilai
berarti hanya salinan argumen yang dilewatkan kepada prosedur. Karena prosedur
hanya memiliki salinan, ia tidak dapat mengubah argumen asli. Ketika argumen
dilewatkan dengan referensi, prosedur memiliki akses terhadap argumen asli dan
dapat mengubahnya.
Agar sebuah prosedur
dapat menerima argumen, ia harus dilengkapi dengan parameter. Parameter adalah
sebuah variabel spesial yang menerima argumen yang dilewatkan kepada sebuah
prosedur. Berikut adalah contoh prosedur yang menggunakan sebuah parameter:
Sub TampilNilai(ByVal
intNilai As Integer)
'Prosedur ini menampilkan sebuah nilai di
dalam kotak pesan
MessageBox.Show(intNilai.ToString())
End Sub
Perhatikan statemen di
dalam kurung pada baris pertama dari prosedur, yaitu:
ByVal intNilai As Integer
Statemen ini
mendeklarasikan variabel intNilai
sebagai sebuah parameter integer. Katakunci opsional ByVal mengindikasikan bahwa argumen yang dilewatkan kepada variabel
dilewatkan dengan nilai. Variabel parameter ini memampukan prosedur TampilNilai untuk menerima argumen
integer. Berikut adalah sebuah contoh bagaimana Anda memanggil prosedur dan
melewatkannya sebuah argumen:
TampilNilai(5)
Argumen, 5, ditempatkan
di dalam kurung. Nilai ini dilewatkan kepada variabel parameter dari prosedur, intNilai. Ini diilustrasikan pada
Gambar 4.8.
Gambar 4.8 Melewatkan 5 kepada TampilNilai
Anda juga bisa melewatkan
variabel dan nilai ekspresi sebagai argumen. Sebagai contoh, statemen-statemen
berikut memanggil prosedur TampilNilai,
yang melewatkan sejumlah argumen:
TampilNilai(intX)
TampilNilai(intX * 4)
TampilNilai(CInt(teksMasukan.Text))
Statemen pertama
melewatkan nilai di dalam variabel intX
sebagai argumen. Statemen kedua melewatkan nilai dari ekspresi intX * 4 sebagai argumen. Statemen
ketiga melewatkan nilai yang dihasilkan dari CInt(teksMasukan.Text) sebagai argumen.
Katakunci ByVal bersifat opsional. Anda dapat
mengabaikan katakunci ByVal, dan
parameter akan dideklarasikan ByVal
secara default. Sebagai contoh, prosedur TampilNilai
dapat dituliskan seperti ini:
Sub TampilNilai(intNilai
As Integer)
'Prosedur ini menampilkan sebuah nilai di
dalam kotak pesan
MessageBox.Show(intNilai.ToString())
End Sub
Ketika prosedur ini
dipanggil, argumen yang dilewatkan kepadanya akan dilewatkan dengan nilai.
CATATAN: Meskipun Anda dapat mengabaikan katakunci ByVal pada deklarasi variabel parameter, adalah hal yang baik untuk
melakukannya. Dengan melakukannya, Anda akan dengan jelas mendokumentasikan
bahwa argumen dilewatkan kepada parameter dengan nilai.
Tutorial 4.3 akan
menuntun Anda untuk menciptakan sebuah aplikasi yang mendemonstrasikan
pelewatan argumen.
Menciptakan Sebuah
Aplikasi Yang Mendemonstrasikan Pelewatan Argumen Kepada Prosedur
Langkah 1: Buka projek Demo Argumen. Form aplikasi ditampilkan
pada Gambar 4.9. Form tersebut memiliki empat tombol: tombolDemo1, tombolDemo2,
tombolDemo3, dan tombolKeluar, berikut juga dengan
sebuah kontrol ListBox untuk
menampilkan nilai-nilai numerik.
Gambar 4.9 Form Demo Argumen
Langkah 2: Selain event handler
untuk tiap tombol form, aplikasi juga menggunakan prosedur TampilNilai seperti yang telah dijelaskan sebelumnya. Buka jendela
Code dan temukan event handler tombolDemo1_Click.
Kodenya diberikan berikut:
Private Sub
tombolDemo1_Click(…) Handles tombolDemo1.Click
'Event handler ini memanggil prosedur
TampilNilai,
'melewatkan 5 sebagai argumennya
listNilai.Items.Clear()
TampilNilai(5)
End Sub
Event handler ini memanggil TampilNilai
dengan 5 sebagai argumen.
Langkah 3: Cari event handler tombolDemo2_Click. Kodenya adalah
sebagai berikut:
Private Sub
tombolDemo2_Click(…) Handles tombolDemo2.Click
'Memanggil prosedur TampilNilai beberapa
kali,
'yang setiap kali melewatkan argumen yang
berbeda
listNilai.Items.Clear()
TampilNilai(5)
TampilNilai(10)
TampilNilai(2)
TampilNilai(16)
'Nilai dari sebuah ekspresi dilewatkan
kepada
'prosedur TampilNilai
TampilNilai(3 + 5)
End Sub
Event handler ini memanggil prosedur TampilNilai
lima kali. Setiap pemanggilan prosedur diberikan sebuah argumen yang berbeda.
Perhatikan pemanggilan prosedur terakhir:
TampilNilai(3 + 5)
Statemen ini melewatkan nilai dari sebuah ekspresi sebagai argumen. Ketika
statemen ini dieksekusi, nilai 8 dilewatkan kepada TampilNilai.
Langkah 4: Cari event handler tombolDemo3_Click. Kodenya adalah
sebagai berikut:
Private Sub
tombolDemo3_Click(…) Handles tombolDemo3.Click
'Menggunakan sebuah loop untuk memanggil
prosedur TampilNilai
'melewatkan sebuah variabel sebagai argumen
listNilai.Items.Clear()
Dim intHitung As Integer
For intHitung = 1 To 10
TampilNilai(intHitung)
Next
End Sub
Event handler ini memiliki sebuah variabel lokal dengan nama intHitung. Event handler ini menggunakan
sebuah loop For…Next untuk memanggil
prosedur TampilNilai sepuluh kali,
setiap kali melewatkan variabel intHitung
sebagai argumen.
Langkah 5: Cari metode TampilNilai, yang menambahkan nilai
yang diterimanya ke dalam kontrol ListBox.
Sub TampilNilai(ByVal
intNilai As Integer)
'Prosedur ini menambahkan sebuah nilai ke
dalam kotak list
listNilai.Items.Add(intNilai.ToString())
End Sub
Langkah 6: Jalankan aplikasi dan
klik tombol Demo 1. Nilai 5
ditampilkan pada kotak list.
Langkah 7: Klik tombol Demo 2. Lima nilai ditampilkan, yang
menunjukkan nilai 5, 10, 2, 16, dan 8.
Langkah 8: Klik tombol Demo 3. Sepuluh nilai ditampilkan, yang
menunjukkan nilai 1 sampai 10.
Langkah 9: Klik tombol Keluar untuk mengakhiri aplikasi.
Melewatkan Argumen
Jamak
Seringkali, adalah
berguna untuk melewatkan lebih dari satu argumen kepada sebuah prosedur.
Sebagai contoh, berikut adalah sebuah prosedur yang menerima dua argumen:
Sub TampilJum(ByVal intNil1 As Integer, ByVal intNil2
As Integer)
Dim intJum
As Integer 'Variabel lokal untuk memuat
sebuah penjumlahan
'Penjumlahan dari dua argumen
intJum = intNil1
+ intNil2
'Menampilkan hasil
MessageBox.Show("Hasil
penjumlahan adalah " & intJum.ToString())
End Sub
Jika dimisalkan bahwa intNilai1 dan intNilai2 adalah variabel-variabel integer, berikat adalah sebuah
pemanggilan contoh kepada prosedur TampulJum:
TampilJum(intNilai1, intNilai2)
Ketika sebuah prosedur
dengan parameter jamak dipanggil, argumen-argumen ditugaskan kepada
parameter-parameter dengan urutan kiri-ke-kanan, seperti ditunjukkan pada
Gambar 4.10.
Gambar 4.10 Argumen jamak dilewatkan
kepada parameter jamak
Pemanggilan prosedur
berikut menyebabkan 5 ditugaskan kepada parameter intNil1 dan 10 ditugaskan kepada intNil2:
TampilJum(5, 10)
Namun, pemanggilan
prosedur berikut menyebabkan 10 ditugaskan kepada parameter intNil1 dan 5 ditugaskan kepada
parameter intNil2:
TampilJum(10, 5)
Pelewatan Argumen dengan Referensi
Anda telah belajat bahwa
ketika sebuah argumen dilewatkan dengan nilai kepada sebuah parameter, hanya
salinan dari argumen tersebut yang dilewatkan kepada variabel parameter. Jika
nilai parameter berubah di dalam prosedur, hal itu tidak berpengaruh pada
argumen asli.
Ketika sebuah argumen
dilewatkan dengan referensi, prosedur memiliki akses terhadap argumen asli.
Perubahan apapun yang dilakukan terhadap variabel parameter akan diterapkan
pula pada argumen asli. Anda menggunakan katakunci ByRef pada deklarasi dari sebuah variabel parameter agar argumen
dilewatkan dengan referensi kepada parameter. Berikut adalah salah satu contoh
pelewatan dengan referensi:
Sub GetNama(ByRef strNama as String)
'Membaca
nama user
strNama =
InputBox("Masukkan Nama Anda.")
End Sub
Prosedur ini menggunakan ByRef untuk mendeklarasikan parameter strNama. Argumen yang dilewatkan kepada
parameter tersebut akan dilewatkan dengan referensi, dan perubahan apapun yang
dilakukan terhadap strName akan
dilakukan pula terhadap argumen tersebut. Sebagai contoh, diasumsikan bahwa
kode berikut memanggil prosedur dan menampilkan nama user:
'Mendeklarasikan sebuah variabel string
Dim strNamaUser As String
'Membaca nama user
GetNama(strNamaUser)
'Menampilkan nama user
MessageBox.Show("Nama Anda adalah " & strNamaUser)
Kode ini memanggil
prosedur GetNama dan melewatkan
variabel string strNamaUser, dengan
referensi, kepada parameter strNama.
Prosedur GetNama menampilkan sebuah
kotak masukan yang menginstruksikan user untuk memasukkan namanya. Masukan user
disimpan ke dalam variabel strNama.
Karena strNamaUser dilewatkan dengan
referensi, nilai yang disimpan di dalam strNama
disimpan di dalam strNamaUser. Ketika
kotak pesan ditampilkan, ia menampilkan nama yang dimasukkan oleh user.
Tutorial 4.4 lebih lanjut
mendemonstrasikan bagaimana pelewatan sebuah argumen dengan referensi berbeda
dari pelewatan dengan nilai.
Tutorial 4.4:
Bekerja dengan ByVal dan
ByRef
Pada tutorial ini, Anda akan memeriksa sebuah prosedur yang menerima
sebuah argumen yang dilewatkan dengan nilai. Kemudian, Anda menggunakan
katakunci ByRef untuk melihat bagaimana prosedur itu berperilaku berbeda.
Langkah 1: Buka projek Demo ByVal ByRef. Form aplikasi
ditampilkan pada Gambar 4.11. Form ini memiliki sebuah kotak list dengan nama listKeluaran dan dua tombol dengan nama
tombolJalankan dan tombolKeluar.
Langkah 2: Buka jendela Code dan
lihat pada event handler tombolJalankan_Click.
Private Sub
tombolJalankan_Click(…) Handles tombolJalankan.Click
Dim intNilai As Integer = 100
listKeluaran.Items.Add("Di dalam
tombolJalankan_Click, nilai dari " &
"intNilai adalah " & intNilai.ToString())
listKeluaran.Items.Add("Sekarang, saya
memanggil UbahArg.")
UbahArg(intNilai)
listKeluaran.Items.Add("Sekarang,
kembali ke dalam tombolJalankan_Click, " &
"nilai dari intNilai adalah "
& intNilai.ToString())
End Sub
Perhatikan bahwa variabel parameter, intArg,
dideklarasikan ByVal.
Langkah 3: Sekarang, lihat pada
prosedur UbahArg. Kodenya adalah
berikut:
Sub UbahArg(ByVal intArg
As Integer)
'Menampilkan nilai dari intArg
listKeluaran.Items.Add(" ")
listKeluaran.Items.Add("Di dalam
prosedur UbahArg, " & "intArg adalah "
& intArg.ToString())
listKeluaran.Items.Add("Saya akan
mengubah nilai dari intArg.")
'menugaskan 0 kepada intArg
intArg = 0
'Menampilkan nilai dari intArg
listKeluaran.Items.Add("intArg
sekarang adalah " & intArg.ToString())
listKeluaran.Items.Add(" ")
End Sub
Perhatikan bahwa variabel parameter, intArg,
dideklarasikan ByVal.
Langkah 4: Jalankan aplikasi dan
klik tombol Jalankan. Form akan
ditampilkan seperti pada Gambar 4.12. Meskipun prosedur UbahArg menetapkan intArg
menjadi 0, nilai dari intNilai tidak
berubah. Ini karena katakunci ByVal
digunakan pada deklarasi dari intArg
(intArg dilewatkan dengan nilai).
Langkah 5: Klik pada tombol Keluar untuk mengakhiri aplikasi.
Langkah 6: Lakukan eksperimen
dengan menghapus katakunci ByVal
dari prosedur UbahArg dan jalankan
aplikasi kembali. Keluaran akan sama persis. Klik tombol Keluar.
Langkah 7: Buka jendela Code.
Sisipkan ByRef sebelum parameter di
dalam prosedur UbahArg. Baris
pertama dari prosedur akan seperti ini:
Sub UbahArg(ByRef intArg
As Integer)
Langkah 8: Jalankan kembali
aplikasi dan klik tombol Jalankan. Form ditampilkan seperti pada Gambar 4.13.
Kali ini, ketika UbahArg menetapkan
intArg menjadi 0, prosedur itu mengubah nilai dari intNilai menjadi 0. Ini karena katakunci ByRef digunakan pada deklarasi dari intArg.
Langkah 9: Klik tombol Keluar
untuk mengakhiri aplikasi.
CATATAN: Anda telah belajar
bagaimana melewatkan variabel sebagai argumen kepada prosedur. Anda dapat pula
melewatkan konstanta dan ekspresi sebagai argumen kepada prosedur. Meskipun
Anda dapat melewatkan variabel dan argumen nonvariabel dengan referensi, hanya
argumen variabel saja yang dapat diubah oleh prosedur penerima argumen. Jika
Anda melewatkan sebuah argumen nonvariabel dengan referensi kepada sebuah
prosedur, prosedur tidak akan mengubah argumen.
4.3 Fungsi
KONSEP: Sebuah fungsi menghasilkan suatu nilai dan memberikannya kepada
bagian program yang memanggil fungsi tersebut.
Bagian ini menunjukkan
pada Anda bagaimana menuliskan fungsi. Seperti prosedur, sebuah fungsi adalah
sekumpulan statemen yang melakukan tugas tertentu ketika fungsi dipanggil.
Selain itu, fungsi yang menghasilkan sebuah nilai dapat digunakan di dalam
ekspresi.
Pada bab-bab terdahulu,
Anda telah memanggil fungsi-fungsi built-in. Sebagai contoh, Anda telah
menggunakan fungsi CInt untuk
mengkonversi string menjadi integer. Anda juga telah menggunakan fungsi ToString, yang mengkonvesi nilai
menjadi string. Sekarang, Anda akan belajar menuliskan fungsi sendiri yang
menghasilkan nilai dengan cara yang sama seperti fungsi built-in.
Mendeklarasikan
Fungsi
Bentuk umum dari sebuah
deklarasi fungsi adalah sebagai berikut:
[PenspesifikasiAkses] Function NamaFungsi ([DaftarParameter])
As TipeData
[Statemen_Statemen)]
End Function
Deklarasi fungsi sama
dengan deklarasi prosedur. PenspesifikasiAkses bersifat opsional dan menetapkan
aksesibilitas dari fungsi. Sama seperti prosedur, Anda bisa menggunakan
katakunci Private, Public, Protected, Friend, atau Protected Friend sebagai penspesifikasi akses.
Jika Anda tidak
mencantumkan penspesifikasi akses, Public
akan menjadi penspesifikasi default. Selanjutnya adalah katakunci Function, yang diikuti dengan nama
fungsi. Di dalam kurung adalah sebuah daftar parameter opsional. Selanjutnya
adalah As TipeData, dimana TipeData adalah sembarang tipe data. Tipe
data yang dicantumkan pada bagian deklarasi ini adalah tipe data dari nilai
yang dihasilkan oleh fungsi.
Baris terakhir pada
deklarasi fungsi adalah statemen End
Function. Di antara statemen
Function dan statemen End Function, terdapat statemen-statemen
yang dieksekusi ketika fungsi dipanggil. Berikut adalah sebuah contoh dari
fungsi:
1
2
3
4
5
6
7
8
9
|
Function Jum(ByVal dblNilai1 As Double,
ByVal dblNilai2 As Double) As Double
Dim
dblHasil As Double
'Menjumlahkan
dua argumen
dblHasil = dblNum1 + dblNum2
'Memberikan hasil (menghasilkan nilai balik)
Return
dblHasil
End Function
|
Kode ini menunjukkan
sebuah fungsi dengan nama Jum yang
menerima dua argumen, menjumlahkan kedua argumen, dan menghasilkan hasil
penjumlahan (hasil penjumlahan sebagai nilai balik dari fungsi tersebut).
Segala sesuatu yang Anda pelajari tentang pelewatan argumen kepada prosedur
juga berlaku pada fungsi. Fungsi Jum
memiliki dua variabel parameter, dblNilai1
dan dblNilai2, keduanya dengan tipa
data Double. Perhatikan bahwa As Double dimunculkan setelah kurung.
Ini mengindikasikan bahwa nilai balik yang dihasilkan fungsi akan bertipe data Double.
Di dalam fungsi, statemen
yang ditunjukkan pada baris 2 mendeklarasikan sebuah variabel lokal dengan nama
dblHasil. Statemen yang ditunjukkan
pada baris 5 menjumlahkan variabel parameter dblNilai1 dan dblNilai2,
dan menugaskan hasilnya kepada dblHasil.
Statemen Return pada baris 8
menyebabkan fungsi untuk mengakhiri eksekusi dan menghasilkan suatu nilai dan
memberikan nilai itu kepada bagian program yang memanggil fungsi tersebut.
Bentuk umum dari statemen Return,
ketika dipakai untuk menghasilkan nilai balik dari sebuah fungsi, adalah
sebagai berikut:
Return Ekspresi
Ekspresi adalah nilai yang dijadikan nilai balik. Ekspresi ini dapat berupa
sembarang ekspresi yang memiliki nilai, seperti variabel, konstanta, atau
ekspresi matematik. Pada kasus ini, fungsi Jum
menghasilkan nilai yang disimpan di dalam variabel dblHasil. Namun, Anda bisa saja mengeliminasi variabel dblHasil, dan menggantikannya dengan
ekspresi dblNilai1 + dblNilai2,
seperti ditunjukkan pada kode berikut:
Function Jum(ByVal dblNilai1 As Double, ByVal dblNilai2
As Double) As Double
Return dblNilai1
+ dblNilai2
End Function
Tipe data dari ekspresi
pada statemen Return harus sama
dengan tipe data dari nilai balik fungsi. Sebagai contoh, jika fungsi Jum menghasilkan sebuah Double, maka nilai dari ekspresi pada
statemen Return harus bertipe Double, atau sebuah tipe yang secara
otomatis akan dikonversi menjadi Double.
Memanggil Fungsi
Dengan mengasumsikan
bahwa dblTotal, dblNil1, dan dblNil2
adalah variabel-variabel bertipe Double,
berikut adalah sebuah contoh bagaimana Anda memanggil fungsi Jum:
dblTotal = Jum(dblNil1, dblNil2)
Statemen ini melewatkan
variabel dblNil1 dan dblNil2 sebagai argumen. Statemen ini
menugaskan nilai yang dihasilkan oleh fungsi Jum kepada variabel dblTotal.
Jadi, jika dblNil1 adalah 20.0 dan dblNil2 adalah 40.0, maka statemen
tersebut menugaskan 60.0 kepada dblTotal.
Gambar 4.14 mengilustrasikan bagaimana argumen dilewatkan kepada fungsi dan
bagaimana sebuah nilai dihasilkan dari fungsi.
Pada Tutorial 4.5, Anda
akan menciptakan sebuah aplikasi sederhana yang menggunakan sebuah fungsi untuk
menghitung harga jual dari item ritel.
Tutorial 4.5: Aplikasi
Kalkulator Harga Penjualan
Pada tutorial ini, Anda akan menciptakan sebuah aplikasi yang menghitung
harga jual dari sebuah item ritel. Aplikasi ini akan memampukan user untuk
memasukkan harga ritel reguler dari item dan persentase diskon. Aplikasi juga
menghitung harga jual menghitung formula berikut:
Harga Jual = Harga Ritel - (Harga Ritel x Persentase Diskon)
Sebagai contoh, jika harga ritel dari sebuah item adalah Rp. 100 dan
persentase diskon adalah 25% (0.25), maka harga jual menjadi Rp. 75. Kode
aplikasi akan memuat sebuah fungsi dengan nama HitungHargaJual yang menerima harga ritel item dan persentase diskon
sebagai argumen. Fungsi kemudian akan menghasilkan harga jual yang dihitung.
Langkah 1: Mulai dengan projek
Windows Forms Application dengan nama Kalkulator
Harga Jual. Bangunlah form aplikasi seperti ditunjukkan pada Gambar 4.15.
Langkah 2: Buka jendela Code dan sisipkan dua deklarasi variabel level-kelas, yang
ditampilkan dengan huruf tebal (pada baris 3 dan baris 4).
1
2
3
4
|
Public Class FormHargaJual
Private decRitel As Decimal 'Untuk memuat harga ritel
Private decPersen As Decimal 'Untuk memuat persentase diskon
End Class
|
Langkah 3: Sekarang, Anda akan menciptakan fungsi ValidasiBidangMasukan, yang menggunakan metode TryParse untuk mengkonversi dua bidang masukan menjadi nilai.
Ketikkan kode untuk fungsi ini di dalam kelas, seperti ditunjukan dengan huruf
tebal (baris 6 sampai baris 21) berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
Public Class FormHargaJual
Private
decRitel As Decimal 'Untuk memuat
harga ritel
Private
decPersen As Decimal 'Untuk memuat
persentase diskon
Private Function ValidasiBidangMasukan()
As Boolean
'Mencoba mengkonversi setiap bidang
masukan. Menghasilkan False jika
'bidang tak valid, dan menampilkan
pesan error relevan
If Not
Decimal.TryParse(teksHargaRitel.Text, decRitel) Then
labelPesan.Text = "Harga
ritel harus numerik"
Return False
End If
If Not
Decimal.TryParse(teksPersenDiskon.Text, decPersen) Then
labelPesan.Text =
"Persentase diskon harus numerik"
Return False
End If
Return True
End Function
End Class
|
Fungsi validasi ini
mengikut pola yang umum, yang mencoba untuk mengkonversi sebuah bidang masukan;
jika konversi gagal, Anda akan menampilkan sebuah pesan error dan dengan segera
menghasilkan sebuah nilai False.
Pseudocode berikut membantu mengekspresikan logika ini:
Mencoba mengkonversi
bidang masukan menjadi nilai numerik;
Jika konversi gagal,
tampilkan pesan error dan hasilkan nilai False;
Baris 10 memanggil metode
TryParse untuk mencoba mengkonversi
bidang masukan harga ritel menjadi sebuah nilai Decimal. Jika metode TryParse menghasilkan False, baris 11 akan menampilkan sebuah
pesan error pada label sebelum menghasilkan nilai False untuk fungsi ValidasiBidangMasukan
pada baris 12. Ketika Anda menggunakan statemen Return seperti pada baris 12, kendali program keluar dari program
dengan segera. Di sisi lain, jika pemanggilan terhadap metode TryParse pada baris 10 menghasilkan True, kendali program akan pergi ke
baris 15 dimana bidang kedua (persentase diskon) dikonversi menjadi Decimal. Jika konversi ini gagal, baris
16 dan 17 akan menampilkan sebuah pesan dan memberitahu fungsi ValidasiBidangMasukan untuk
menghasilkan False. Terakhir, jika
baris 20 dicapai atau diraih, semua bidang masukan harus telah valid, jadi
fungsi ValidasiBidangMasukan
menghasilkan True.
Langkah 4: Sekarang, Anda akan menciptakan fungsi HitungHargaJual, yang pekerjaannya adalah untuk menghitung harga
jual dari sebuah item setelah mendeduksi persentase diskon. Ketikkan kode untuk
fungsi di dalam kelas berikut, seperti ditunjukkan dengan huruf tebal (pada
baris 23 sampai baris 30) berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
Public Class FormHargaJual
Private
decRitel As Decimal 'Untuk memuat
harga ritel
Private
decPersen As Decimal 'Untuk memuat
persentase diskon
Private
Function ValidasiBidangMasukan() As Boolean
'Mencoba mengkonversi setiap bidang masukan. Menghasilkan False jika
'bidang tak valid, dan menampilkan pesan error relevan
If Not
Decimal.TryParse(teksHargaRitel.Text, decRitel) Then
labelPesan.Text = "Harga ritel harus numerik"
Return False
End If
If Not
Decimal.TryParse(teksPersenDiskon.Text, decPersen) Then
labelPesan.Text = "Persentase diskon harus numerik"
Return False
End If
Return
True
End
Function
Function HitungHargaJual(ByVal decRitel
As Decimal,
ByVal decPersen
As Decimal) As Decimal
'Menghitung dan menghasilkan harga
jual
Dim decHargaJual As Decimal
decHargaJual = decRitel - (decRitel *
decPersen)
Return decHargaJual
End Function
End Class
|
Fungsi ini memiliki dua
parameter, decRitel dan decPersen. Ketika fungsi dipanggil, ia
menerima harga ritel dan persentase diskon. Pada baris 26, Anda mendeklarasikan
sebuah variabel lokal dengan nama decHargaJual
untuk menampung harga jual terhitung. Baris 28 menghitung harga jual dan
menugaskannya kepada decHargaJual.
Baris 29 kemudian menghasilkan (menjadikan nilai balik) nilai dari variabel decHargaJual.
Langkah 5: Pergi ke jendela Designer dan
klik-ganda pada tombol Hitung Harga Jual
untuk menciptakan sebuah event handler Click.
Sempurnakan event handler dengan kode tebal (seperti ditunjukkan pada baris 33
sampai 42) berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
Public Class FormHargaJual
Private
decRitel As Decimal 'Untuk memuat
harga ritel
Private
decPersen As Decimal 'Untuk memuat
persentase diskon
Private
Function ValidasiBidangMasukan() As Boolean
'Mencoba mengkonversi setiap bidang masukan. Menghasilkan False jika
'bidang tak valid, dan menampilkan pesan error relevan
If Not
Decimal.TryParse(teksHargaRitel.Text, decRitel) Then
labelPesan.Text = "Harga ritel harus numerik"
Return False
End If
If Not
Decimal.TryParse(teksPersenDiskon.Text, decPersen) Then
labelPesan.Text = "Persentase diskon harus numerik"
Return False
End If
Return
True
End
Function
Function
HitungHargaJual(ByVal decRitel As Decimal,
ByVal decPersen
As Decimal) As Decimal
'Menghitung dan menghasilkan harga jual
Dim
decHargaJual As Decimal
decHargaJual = decRitel - (decRitel * decPersen)
Return
decHargaJual
End
Function
Private
Sub tombolHitung_Click(…) Handles tombolHitung.Click
Dim decHargaJual As Decimal
'Membersihkan pesan sebelumnya
labelPesan.Text = String.Empty
'Jika masukan valid, tampilkan harga
jual
If ValidasiBidangMasukan() Then
decHargaJual =
HitungHargaJual(decRitel, decPersen)
teksHargaJual.Text = "Rp.
" & decHargaJual.ToString()
End If
End Sub
End Class
|
Baris 33 mendeklarasikan decHargaJual, yang akan menampung harga jual terhitung. Baris 36 membersihkan pesan yang sebelumnya ditampilkan pada kontrol labelPesan. Baris 39 memanggil fungsi ValidasiBidangMasukan untuk memeriksa bidang-bidang masukan perihal nilai-nilai valid. Jika fungsi menghasilkan True, maka baris 40 dan 41 akan dieksekusi. Baris 40 menghitung harga jual, dan baris 41 menampilkan harga pada kontrol teksHargaJual.
Langkah 6: Pergi ke jendela Designer dengan klik-ganda pada tombol Keluar untuk menciptakan event handler Click. Sempurnakan event handler
tersebut dengan statemen tebal (ditampilkan pada baris 46) berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
Public Class FormHargaJual
Private
decRitel As Decimal 'Untuk memuat
harga ritel
Private
decPersen As Decimal 'Untuk memuat
persentase diskon
Private
Function ValidasiBidangMasukan() As Boolean
'Mencoba mengkonversi setiap bidang masukan. Menghasilkan False jika
'bidang tak valid, dan menampilkan pesan error relevan
If Not
Decimal.TryParse(teksHargaRitel.Text, decRitel) Then
labelPesan.Text = "Harga ritel harus numerik"
Return False
End If
If Not
Decimal.TryParse(teksPersenDiskon.Text, decPersen) Then
labelPesan.Text = "Persentase diskon harus numerik"
Return
False
End If
Return
True
End
Function
Function
HitungHargaJual(ByVal decRitel As Decimal,
ByVal decPersen
As Decimal) As Decimal
'Menghitung dan menghasilkan harga jual
Dim
decHargaJual As Decimal
decHargaJual = decRitel - (decRitel * decPersen)
Return
decHargaJual
End
Function
Private
Sub tombolHitung_Click(…) Handles tombolHitung.Click
Dim
decHargaJual As Decimal
'Membersihkan pesan sebelumnya
labelPesan.Text = String.Empty
'Jika
masukan valid, tampilkan harga jual
If
ValidasiBidangMasukan() Then
decHargaJual = HitungHargaJual(decRitel, decPersen)
teksHargaJual.Text = "Rp. " & decHargaJual.ToString()
End If
End Sub
Private
Sub tombolKeluar_Click(…) Handles tombolKeluar.Click
Me.Close()
End Sub
End Class
|
Langkah 7: Jalankan dan uji aplikasi. Masukkan 100 untuk harga ritel dan 0.25 untuk persentase diskon. Ketika Anda mengklik tombol Hitung Harga Jual, aplikasi akan menampilkan Rp. 75.00 sebagai harga jual, seperti ditunjukkan pada Gambar 4.16.
Fungsi Penghasil Nilai Tak-Numerik
Ketika menuliskan fungsi,
Anda tidak dibatasi hanya untuk menghasilkan nilai numerik. Anda dapat
menghasilkan nilai tak-numerik pula, seperti string dan nilai Boolean. Sebagai
contoh, berikut adalah kode untuk sebuah fungsi yang menghasilkan sebuah String:
Function NamaLengkap(ByVal strPertama As String, ByVal
strAkhir As String) As String
'Variabel
lokal untuk menampung nama lengkap
Dim strNama
As String
'Menempatkan nama belakang di belakang nama depan dan
'menugaskan hasilnya kepada strNama
strNama = strPertama
& " " & strAkhir
'Menghasilkan nama lengkap
Return
strName
End Function
Berikut adalah sebuah
contoh dari pemanggilan terhadap fungsi ini:
strKonsumen = NamaLengkap("John",
"Kristoff")
Setelah pemanggilan ini,
variabel String strKonsumen akan
memuat “John Kristoff”.
Berikut adalah sebuah
contoh dari fungsi yang menghasilkan sebuah nilai Boolean:
Function ApaValid(intNil As Integer) As Boolean
Dim
blnStatus As Boolean
If intNil >=
0 And intNil <= 100 Then
blnStatus
= True
Else
blnStatus
= False
End If
Return
blnStatus
End Function
Fungsi ini menghasilkan True jika argumennya berada di dalam
rentang 0 sampai 100. Sebaliknya, ia menghasilkan False. Segmen kode berikut memiliki sebuah statemen If…Then dengan contoh pemanggilan
terhadap fungsi tersebut:
intNilai = 20
If ApaValid(intNilai) Then
lblStatus.Text
= “Nilai di dalam rentang."
Else
lblStatus.Text
= “Nilai di luar rentang."
End If
Ketika kode ini
dieksekusi, ia menampilkan Nilai di
dalam rentang. Berikut adalah sebuah contoh lain:
intNilai = 200
If ApaValid(intNilai) Then
lblStatus.Text
= “Nilai di dalam rentang."
Else
lblStatus.Text
= “Nilai di luar rentang."
End If
Ketika kode ini
dieksekusi, ia menampilkan Nilai di luar
rentang.
4.4 Sekali Lagi Tentang Debugging
KONSEP: Perintah-perintah debugging Visual Studio dapat Anda pakai untuk
menjalankan pemanggilan fungsi dan prosedur. Perintah Step Into dapat Anda
pakai melakukan single-step pada prosedur atau fungsi terpanggil. Perintah Step
Over dapat Anda pakai untuk mengeksekusi sebuah pemanggilan fungsi tanpa
melakukan single-step baris demi baris. Perintah Step Out dapat Anda pakai
untuk mengeksekusi semua baris yang tersisa dari sebuah prosedur atau fungsi.
Pada Bab 3, Anda telah
belajar untuk menetapkan sebuah breakpoint pada kode aplikasi Anda dan
melakukan single-step pada eksekusi kode. Sekarang, Anda akan mempelajari
bagaimana melakukan step into atau step over pada sebuah prosedur atau fungsi.
Ketika sebuah apliksi
dalam mode break, perintah Step Into
menyebabkan baris yang sedang disorot (titik eksekusi) untuk dieksekusi. Jika
baris tersebut memuat pemanggilan terhadap sebuah prosedur atau fungsi, maka
baris yang akan disorot selanjutnya adalah baris pertama pada prosedur atau
fungsi tersebut. Dengan kata lain, perintah Step Into dapat Anda pakai untuk melakukan single-step pada sebuah
prosedur atau fungsi ketika ia dipanggil. Anda mengaktivasi perintah Step Into menggunakan salah satu metode
berikut:
·
Tekan kunci F11.
·
Pilih DEBUG dari menu, dan kemudian pilih Step
Into dari menu DEBUG.
·
Klik tombol Step Into (
) pada Debug Toolbar,
jika toolbar visibel.
Sama seperti perintah Step Into, perintah Step Over menyebabkan baris yang sedang
disorot dieksekusi. Jika baris itu memuat pemanggilan prosedur atau fungsi,
maka prosedur atau fungsi itu akan dieksekusi tanpa melakukan single-step pada
statemen-statemennya. Anda mengaktivasi perintah Step Over menggunakan salah satu metode berikut:
·
Tekan kunci F10.
·
Pilih DEBUG dari menu, dan kemudian pilih Step
Over dari menu DEBUG.
·
Klik tombol Step Over (
) pada Debug Toolbar,
jika toolbar visibel.
Anda menggunakan perintah
Step Out ketika melakukan
single-step pada sebuah prosedur atau fungsi dan Anda menginginkan sisa
statemen dari fungsi atau prosedur dieksekusi tanpa proses single-step. Setelah
prosedur atau fungsi selesai dieksekusi, baris yang mengikuti (yang berada
setelah) pemanggilan prosedur atau fungsi akan disorot, dan Anda bisa memulai
kembali proses single-step. Anda mengaktivasi perintah Step Out menggunakan salah satu metode berikut:
·
Tekan kunci Shift + F11.
·
Pilih DEBUG dari menu, dan kemudian pilih Step Out
dari menu DEBUG.
·
Klik tombol Step Over (
) pada Debug Toolbar,
jika toolbar visibel.
Pada Tutorial 4.6, 4.7,
dan 4.8, Anda akan berlatih menggunakan setiap perintah ini.
Tutorial 4.6: Berlatih
Perintah Step Into
Pada tutorial ini, Anda menggunakan projek Kalkulator Harga Jual untuk berlatih melakukan single-step pada
prosedur dan fungsi.
Langkah 1: Buka projek Kalkulator Harga Jual dari Tutorial 4.5.
Langkah 2: Buka jendela Code dan
tetapkan sebuah breakpoint pada baris di
dalam event handler tombolHitung_Click
seperti ditunjukkan pada Gambar 4.17.
Anda bisa menetapkan sebuah breakpoint dengan mengklik mouse saat pointer
mouse diposisikan di batas kiri. Anda dapat menggeser kursor teks ke baris yang
Anda inginkan sebagai breakpoint, dan kemudian menekan F9.
Langkah 3: Jalankan aplikasi dalam
mode debug, dan masukkan 100 untuk harga ritel dan 0.25 untuk persentase
diskon.
Langkah 4: Klik tombol Hitung Harga Jual. Aplikasi memasuki
mode break dengan baris breakpoint disorot.
Langkah 5: Perhatikan bahwa baris
yang disorot memuat sebuah pemanggilan terhadap fungsi HitungHargaJual. Tekan F11 untuk mengeksekusi
perintah Step Into.
Langkah 6: Karena Anda menekan
F11, baris pertama dari fungsi HitungHargaJual
disorot. Anda sekarang akan melakukan single-step melalui statemen-statemen di
dalam fungsi HitungHargaJual.
Lanjutkan menekan kunci F11 untuk menjejak langkah demi langkah fungsi HitungHargaJual. Ketika baris End Function disorot, tekan F11 sekali
lagi untuk kembali ke baris yang memanggil fungsi tersebut.
Langkah 7: Tekan F5 atau klik
DEBUG pada menu dan kemudian klik Continue
untuk keluar dari mode break dan memulai eksekusi normal.
Tutorial 4.7: Berlatih
Perintah Step Over
Langkah 1: Pastikan projek Hitung Harga Jual
masih terbuka pada Visual Studio. Breakpoint ditetapkan seperti ditunjukkan
pada Gambar 4.18.
Langkah 2: Jalankan aplikasi dalam mode debug, dan masukkan 100 untuk harga ritel
dan 0.25 untuk persentase diskon.
Langkah 3: Klik pada tombol Hitung Harga
Jual. Aplikasi memasuki mode break dengan baris breakpoint disorot.
Langkah 4: Perhatikan bahwa baris yang disorot memuat sebuah pemanggilan terhadap
fungsi HitungHargaJual. Tekan F10 untuk mengeksekusi perintah Step Over.
Langkah 6: Karena Anda menekan F11, baris pertama dari fungsi HitungHargaJual disorot. Anda sekarang akan melakukan single-step
melalui statemen-statemen di dalam fungsi HitungHargaJual.
Lanjutkan menekan kunci F11 untuk menjejak langkah demi langkah fungsi HitungHargaJual. Ketika baris End Function disorot, tekan F11 sekali
lagi untuk kembali ke baris yang memanggil fungsi tersebut.
Langkah 5: Tekan F5 atau klik DEBUG pada menu dan kemudian klik Continue untuk keluar dari mode break
dan memulai eksekusi normal.
Tutorial 4.8: Berlatih
Perintah Step Out
Langkah 1: Pastikan projek Hitung Harga Jual
masih terbuka pada Visual Studio. Breakpoint
ditetapkan seperti
ditunjukkan pada Gambar 4.19.
Langkah 2: Jalankan aplikasi dalam mode debug, dan masukkan 100 untuk harga ritel
dan 0.25 untuk persentase diskon.
Langkah 3: Klik pada tombol Hitung Harga
Jual. Aplikasi memasuki mode break dengan baris breakpoint disorot.
Langkah 4: Perhatikan bahwa baris yang disorot memuat sebuah pemanggilan terhadap
fungsi HitungHargaJual. Tekan F11 untuk mengeksekusi perintah Step Into.
Langkah 5: Anda tidak melanjutkan penjejakan fungsi, Anda sekarang keluar dari
fungsi. Tekan
Shift + F11 untuk
mengeksekusi perintah Step Out. Proses single-step dibatalkan dan
statemen-statemen sisa di dalam fungsi HitungHargaJual
dieksekusi. Anda kembali ke event handler tombolHitung_Click,
pada baris yang memuat pemanggilan fungsi.
Langkah 6: Tekan F5 atau klik DEBUG pada menu dan kemudian klik Continue untuk keluar dari mode break
dan memulai eksekusi normal.
4.5 Fokus Perancangan dan Penyelesaian
Masalah: Membangun Aplikasi Kalkulator Kafe
KONSEP: Pada bagian ini, Anda akan membangun sebuah aplikasi Kalkulator
Kafe. Aplikasi ini menggunakan beberapa prosedur dan fungsi untuk menghitung
total harga dari pesanan konsumen.
Kafe Tarabunga memberikan
layanan antar untuk roti bagel dan kopi. Konsumen dapat memesan bagel putih dan
bagel gandung dengan sejumlah variasi topping. Selain itu, konsumen dapat
memesan tiga jenis kopi yang berbeda. Berikut adalah daftar harganya:
Bagel:
Bagel putih Rp. 12500
Bagel gandum Rp. 15000
Topping:
Keju krim Rp. 5000
Mentega Rp. 2500
Selai blueberry Rp. 7500
Selai raspberry Rp. 7500
Jeli Peach Rp. 7500
Kopi:
Kopi biasa Rp. 12500
Cappuccino Rp. 20000
Café au lait Rp. 17500
(Layanan antar hanya untuk kopi tidak ditawarkan)
Pemilik kafe Tarabunga
meminta Anda untuk menuliskan sebuah aplikasi sehingga staf kafe dapat
menggunakannya untuk merekam pesanan. Aplikasi tersebut menampilkan biaya total
pesanan, termasuk 6% pajak penjualan. Gambar 4.20 menunjukkan form aplikasi
dengan sejumlah nama kontrol.
Tabel 4.1: Kontrol-kontrol pada form Kalkulator Kafe Tarabung
Jenis Kontrol
|
Nama Kontrol
|
Properti
|
Nilai Properti
|
Form
|
FormKafe
|
Text:
|
Kalkulator Kafe Tarabunga
|
Label
|
(Default)
|
Text
|
Kafe Tarabunga
|
Font
|
Times
New Roman, 18pt, style=Bold,
Italic
|
||
TextAlign
|
MiddleCenter
|
||
ToolTip
|
(Default)
|
||
GroupBox
|
(Default)
|
Text:
|
Pilih Bagel
|
RadioButton
|
radPutih
|
Text:
|
Putih (Rp. 12500)
|
Checked:
|
True
|
||
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih bagel putih
|
||
RadioButton
|
radGandum
|
Text:
|
Gandum (Rp. 15000)
|
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih bagel gandum
|
||
GroupBox
|
(Default)
|
Text:
|
Pilih Topping
|
CheckBox
|
chkKejuKrim
|
Text:
|
Keju Krim (Rp. 5000)
|
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih keju krim
|
||
CheckBox
|
chkMentega
|
Text:
|
Mentega (Rp. 2500)
|
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih mentega
|
||
CheckBox
|
chkBlueberry
|
Text:
|
Selai Blueberry (Rp. 7500)
|
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih selai blueberry
|
||
CheckBox
|
chkRaspberry
|
Text:
|
Selai Raspberry (Rp. 7500)
|
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih selai raspberry
|
||
CheckBox
|
chkPeach
|
Text:
|
Jeli Peach (Rp. 7500)
|
ToolTip
on ToolTip1:
|
Klik di sini untuk memilih jeli peach
|
||
GroupBox
|
(Default)
|
Text:
|
Mau Kopi?
|
RadioButton
|
radTidakKopi
|
Text:
|
Tidak
|
ToolTip
on ToolTip1:
|
Klik
di sini untuk memilih tanpa kopi
|
||
RadioButton
|
radKopiBiasa
|
Text:
|
Kopi Biasa (Rp. 12500)
|
Checked:
|
True
|
||
ToolTip
on ToolTip1:
|
Klik
di sini untuk memilih kopi biasa
|
||
RadioButton
|
radCappuccino
|
Text:
|
Cappuccino (Rp. 20000)
|
ToolTip
on ToolTip1:
|
Klik
di sini untuk memilih Cappuccino
|
||
RadioButton
|
radCafeAuLait
|
Text:
|
Cappuccino (Rp. 20000)
|
ToolTip
on ToolTip1:
|
Klik
di sini untuk memilih Café au lait
|
||
GroupBox
|
(Default)
|
Text:
|
Harga
|
Label
|
(Default)
|
Text:
|
Subtotal
|
Label
|
(Default)
|
Text:
|
|
AutoSize:
|
False
|
||
BorderStyle:
|
Fixed3D
|
||
Label
|
(Default)
|
Text:
|
Pajak
|
Label
|
(Default)
|
Text:
|
|
AutoSize:
|
False
|
||
BorderStyle:
|
Fixed3D
|
||
Label
|
(Default)
|
Text:
|
Total
|
Label
|
(Default)
|
Text:
|
|
AutoSize:
|
False
|
||
BorderStyle:
|
Fixed3D
|
||
Button
|
tombolHitung
|
Text:
|
&Hitung Total
|
ToolTip
on ToolTip1:
|
Klik
di sini untuk menghitung biaya total pesanan
|
||
Button
|
tombolReset
|
Text:
|
&Reset Form
|
ToolTip
on ToolTip1:
|
Klik
di sini untuk membersihkan form dan mulai dari awal
|
||
Button
|
tombolKeluar
|
Text:
|
&Keluar
|
ToolTip
on ToolTip1:
|
Klik
di sini untuk keluar dari aplikasi
|
Tabel 4.2 mencantumkan dan menjelaskan metode-metode (event handler, prosedur, dan fungsi) yang digunakan pada aplikasi ini.
Tabel 4.2 Metode-metode untuk form Kalkulator Kafe Tarabunga
Metode
|
Jenis Metode
|
Penjelasan
|
tombolHitung_Click
|
Event handler
|
Menghitung dan menampilkan biaya total dari sebuah
pesanan. Memanggil fungsi berikut: HitungBiayaBagel,
HitungBiayaKopi, HitungBiayaTopping, dan HitungPajak.
|
tombolKeluar_Click
|
Event handler
|
Mengakhiri aplikasi.
|
tombolReset_Click
|
Mengatur-ulang kontrol-kontrol pada form menjadi
nilai-nilai awalnya. Memanggil prosedur-prosedur berikut: ResetBagel, ResetTopping, ResetKopi,
dan ResetHarga.
|
|
HitungBiayaBagel
|
Fungsi
|
Menghitung harga dari bagel terseleksi.
|
HitungBiayaTopping
|
Fungsi
|
Menghitung harga dari topping terseleksi.
|
HitungBiayaKopi
|
Fungsi
|
Menghitung harga dari kopi terseleksi.
|
HitungPajak
|
Fungsi
|
Menerima jumlah penjualan sebagai argumen. Menghasilkan
pajak penjualan. Laju pajak disimpan di dalam sebuah konstanta level-kelas, decLAJU_PAJAK.
|
ResetBagel
|
Prosedur
|
Mengatur-ulang tombol-tombol radio yang dipakai untuk
memilih jenis bagel menjadi nilai-nilai awalnya.
|
ResetTopping
|
Prosedur
|
Mengatur-ulang setiap kotak periksa yang dipakai untuk
memilih jenis topping menjadi nilai-nilai awalnya.
|
ResetKopi
|
Prosedur
|
Mengatur-ulang tombol-tombol radio yang dipakai untuk
memilih jenis kopi menjadi nilai-nilai awalnya.
|
ResetHarga
|
Prosedur
|
Menetapkan properti Text dari lblSubtotal, lblPajak,
dan lblTotal menjadi String.Empty.
|
Prosedur event handler tombolHitung_Click menghitung biaya
total dari sebuah pesanan dan menampilkan harganya. Perhatikan bahwa setiap
perhitungan matematika dilakukan pada prosedur ini. Prosedur ini memanggil
fungsi HitungBiayaBagel, HitungBiayaTopping, HitungBiayaKopi, dan HitungPajak untuk mendapatkan
nilai-nilai yang diinginkannya. Berikut adalah psudocode dari prosedur ini:
subtotal =
HitungBiayaBagel() + HitungBiayaTopping() + HitungBiayaKopi()
pajak =
HitungPajak(subtotal)
total = subtotal + tax
lblSubtotal.Text =
subtotal
lblPajak.Text = tax
lblTotal.Text = total
Tujuan dari prosedur
event handler tombolReset adalah
untuk mengatur-ulang semua tombol radio, kotak periksa, dan label pada form
menjadi nilai-nilai awalnya. Operasi ini dipecah menjadi prosedur-prosedur
berikut: ResetBagel, ResetTopping, ResetKopi, ResetHarga.
Ketika tombolReset_Click dieksekusi,
ia hanya memanggil prosedur-prosedur tersebut. Berikut adalah psudocode dari
prosedur ini:
ResetBagel()
ResetTopping()
ResetKopi()
ResetHarga()
Fungsi HitungBiayaBagel menentukan apakah user
telah memilih bagel putih atau bagel gandum, dan menghasilkan harga dari
pilihan tersebut. Berikut adalah pseudocode untuk fungsi ini:
If bagel putih dipilih
Then
biaya bagel = 12500
Else
biaya bagel = 15000
End If
Return biaya bagel
Fungsi HitungBiayaTopping memeriksa setiap
kotak periksa untuk menentukan jenis topping mana yang dipilih oleh user. Harga
topping total dijadikan nilai balik. Berikut adalah pseudocode untuk fungsi
ini:
biaya topping = 0.0
If keju krim diseleksi
Then
biaya topping += 5000
End If
If mentega diseleksi Then
biaya topping += 5500
End If
If blueberry diseleksi
Then
biaya topping += 7500
End If
If raspberry diseleksi
Then
biaya topping += 7500
End If
If peach diseleksi Then
biaya topping += 7500
End If
Return biaya topping
Fungsi HitungBiayaKopi memeriksa setiap tombol
radio kopi untuk menentukan kopi mana (jika ada) yang diseleksi oleh user.
Harga dijadikan nilai balik. Berikut adalah pseudocode untuk fungsi ini:
If tidak diseleksi Then
biaya kopi = 0
ElseIf kopi biasa
diseleksi Then
biaya kopi = 12500
ElseIf Cappuccino diseleksi
Then
biaya kopi = 20000
ElseIf Café Au Lait diseleksi
Then
biaya kopi = 17500
End If
Return biaya kopi
Fungsi HitungPajak menerima sebuah argumen,
yang dilewatkan kepada variabel parameter jumlah.
(Laju pajak akan disimpan pada sebuah konstanta level-kelas). Jumlah pajak
penjualan dijadikan nilai balik. Berikut adalah pseudocode untuk fungsi ini:
pajak penjualan = jumlah
* laju pajak
Return pajak penjualan
Prosedur ResetBagel mengatur-ulang setiap tombol
radio bagel menjadi nilai awalnya. Berikut adalah pseudocode dari prosedur ini:
radPutih = seleksi
radGandum = batalkan
seleksi
Prosedur ResetTopping membatalkan centang dari
semua kotak periksa topping. Berikut adalah pseudocode dari prosedur ini:
chkKejuKrim = Batalkan centang
chkMentega = Batalkan centang
chkBlueberry = Batalkan
centang
chkRaspberry = Batalkan
centang
chkPeach = Batalkan centang
Prosedur ResetKopi mengatur-ulang semua tombol
radio topping menjadi nilai awalnya. Berikut adalah pseudocode dari prosedur
ini:
radTidakKopi = Batalkan seleksi
radKopiBiasa = Seleksi
radCappuccino = Batalkan
seleksi
radCafeAuLait = Batalkan seleksi
Prosedur ResetHarga menyalin sebuah string
kosong ke lblSubtotal, lblPajak, lblTotal. Berikut adalah pseudocode dari prosedur ini:
lblSubtotal.Text =
String.Empty
lblPajak.Text = String.Empty
lblTotal.Text = String.Empty
Pada Tutorial 4.9, Anda akan membangun aplikasi Kafe Tarabunga.
Tutorial 4.9: Membangun
Aplikasi Kafe Tarabunga
Langkah 1: Ciptakan sebuah projek
Windows Forms Application dengan nama Kafe Tarabunga.
Langkah 2: Membangun form seperti
ditunjukkan pada Gambar 4.21. Lihat Gambar 4.20 dan Tabel 4.1 untuk detil-detil
spesifik tentang setiap kontrol dan propertinya.
Langkah 3: Setelah Anda
menempatkan semua kontrol pada form dan menetapkan setiap propertinya, Anda dapat
mulai menuliskan kode. Awali dengan membuka jendela Code dan menuliskan
deklarasi-deklarasi level-kelas yang ditunjukkan dengan huruf tebal berikut:
Public Class FormKafe
'Deklarasi-deklarasi
level-kelas
Const
decLAJU_PAJAK As Decimal = 0.06D
'Persen Pajak
Const
decBAGEL_PUTIH As Decimal = 12500D
'Biaya dari bagel putih
Const
decBAGEL_GANDUM As Decimal = 15000D
'Biaya dari bagel gandum
Const
decKEJU_KRIM As Decimal = 5000D
'Biaya dari topping keju krim
Const
decMENTEGA As Decimal = 2500D
'Biaya dari topping mentega
Const
decBLUEBERRY As Decimal = 7500D
'Biaya dari topping blueberry
Const
decRASPBERRY As Decimal = 7500D
'Biaya dari topping raspberry
Const
decPEACH As Decimal = 7500D
'Biaya dari topping peach
Const
decKOPI_BIASA As Decimal = 12500D
'Biaya dari kopi biasa
Const
decCAPPUCCINO As Decimal = 20000D
'Biaya dari cappuccino
Const
decCAFE_AU_LAIT As Decimal = 17500D
'Biaya dari Cafe au lait
End Class
Langkah 4: Sekarang, tuliskan
event handler tombolHitung_Click, tombolReset_Click, dan tombolKeluar_Click sebagai berikut:
Private Sub
tombolHitung_Click(…) Handles tombolHitung.Click
'Prosedur
ini menghitung biaya total dari pesanan
Dim
decSubtotal As Decimal 'Menampung
biaya subtotal
Dim decPajak
As Decimal 'Menampung biaya pajak
Dim decTotal
As Decimal 'Menampung biaya total
pesanan
decSubtotal
= HitungBiayaBagel() + HitungBiayaTopping() + HitungBiayaKopi()
decPajak =
HitungPajak(decSubtotal)
decTotal =
decSubtotal + decPajak
lblSubtotal.Text = "Rp. " & decSubtotal.ToString()
lblPajak.Text = "Rp. " & decPajak.ToString()
lblTotal.Text = "Rp. " & decTotal.ToString()
End Sub
Private Sub
tombolReset_Click(…) Handles tombolReset.Click
'Prosedur
ini mengatur-ulang setiap kontrol menjadi nilai defaultnya
ResetBagel()
ResetTopping()
ResetKopi()
ResetHarga()
End Sub
Private Sub
tombolKeluar_Click(…) Handles tombolKeluar.Click
'Menutup
form
Me.Close()
End Sub
Langkah 5: Tuliskan kode untuk
fungsi-fungsi dan prosedur-prosedur berikut:
Function
HitungBiayaBagel() As Decimal
'Fungsi ini menghasilkan biaya dari bagel
terseleksi
Dim
decBagel As Decimal
If
radPutih.Checked = True Then
decBagel = decBAGEL_PUTIH
Else
decBagel = decBAGEL_GANDUM
End
If
Return decBagel
End Function
Function HitungBiayaTopping()
As Decimal
'Fungsi ini menghasilkan biaya dari topping
Dim
decBiayaTopping As Decimal = 0D
If
chkKejuKrim.Checked = True Then
decBiayaTopping += decKEJU_KRIM
End
If
If
chkMentega.Checked = True Then
decBiayaTopping += decMENTEGA
End
If
If
chkBlueberry.Checked = True Then
decBiayaTopping += decBLUEBERRY
End
If
If
chkRaspberry.Checked = True Then
decBiayaTopping += decRASPBERRY
End
If
If
chkPeach.Checked = True Then
decBiayaTopping += decPEACH
End
If
Return decBiayaTopping
End Function
Function
HitungBiayaKopi() As Decimal
'Fungsi ini menghasilkan biaya dari kopi
terseleksi
Dim
decKopi As Decimal
If
radTidakKopi.Checked Then
decKopi = 0D
ElseIf radKopiBiasa.Checked = True Then
decKopi = decKOPI_BIASA
ElseIf radCappuccino.Checked = True Then
decKopi = decCAPPUCCINO
ElseIf radCafeAuLait.Checked = True Then
decKopi = decCAFE_AU_LAIT
End
If
Return decKopi
End Function
Function
HitungPajak(ByVal decJumlah As Decimal) As Decimal
'Fungsi ini menerima jumlah penjualan dan
'menghasilkan
jumlah pajak
Return decJumlah * decLAJU_PAJAK
End Function
Sub ResetBagel()
'Prosedur ini mengatur-ulang seleksi bagel
radPutih.Checked = True
End Sub
Sub
ResetTopping()
'Prosedur ini mengatur-ulang seleksi
topping
chkKejuKrim.Checked = False
chkMentega.Checked = False
chkBlueBerry.Checked = False
chkRaspberry.Checked = False
chkPeach.Checked = False
End Sub
Sub ResetKopi()
'Prosedur ini mengatur-ulang seleksi kopi
radKopiBiasa.Checked = True
End Sub
Sub ResetHarga()
'Prosedur ini mengatur-ulang harga
lblSubtotal.Text = String.Empty
lblPajak.Text = String.Empty
lblTotal.Text = String.Empty
End Sub
Langkah 6: Simpan dan jalankan
program. Jika ada error, gunakan teknik debugging yang telah Anda pelajari
untuk mencari dan mengoreksinya.
Langkah 7: Ketika Anda memastikan
bahwa aplikasi dapat berjalan dengan baik, simpan untuk terakhir kalinya.
4.6 Latihan
1.
Carilah error pada contoh berikut:
Sub TampilNilai(Dim
intNilai As Integer)
'Menampilkan sebuah nilai
MessageBox.Show(intNilai.ToString())
End Sub
2.
Carilah error pada contoh berikut:
Sub Selamat(ByVal strNama
As String)
'Ini adalah prosedur yang menampilkan salam
MessageBox.Show("Hallo " &
strNama)
End Sub
3.
Carilah error pada contoh berikut:
Function Perkalian(ByVal
intNilai1 As Integer, ByVal intNilai2 As Integer) As Integer
Dim intHasil As Integer
intHasil = intNilai1 * intNilai2
End Function
4.
Carilah error pada contoh berikut:
Sub Jum(ByVal intNilai1 As
Single, ByVal intNilai2 As Single) As Single
Dim intHasil As Single
intHasil = intNilai1 + intNilai2
Return intHasil
End Sub
5.
Statemen berikut memanggil sebuah fungsi dengan
nama Setengah yang menghasilkan sebuah Decimal,
yang merupakan setengah dari argumennya. Tuliskanlah fungsi tersebut.
6.
Sebuah aplikasi memuat fungsi berikut:
Function Kuadrat(ByVal intNilai
As Integer) As Integer
Return intNilai^2
End Function
Tuliskanlah sebuah statemen yang melewatkan nilai
4 kepada fungsi ini dan menugaskan nilai baliknya kepada sebuah variabel dengan
nama intHasil.
7. Tuliskanlah sebuah prosedur dengan nama SepuluhKali yang menerima sebuah
argumen Integer. Ketika prosedur
dipanggil, ia akan menampilkan hasil perkalian argumennya dengan 10 pada sebuah
kotak pesan.
8.
Sebuah aplikasi memuat prosedur berikut:
Sub Tampil(ByVal
intArg1 As Integer, ByVal strArg2 As String, ByVal sngArg3 As Single)
MessageBox.Show("Berikut adalah
nilai-nilai: " & intArg1.ToString() & " " &
strArg2 & " " &
sngArg3.ToString())
End Sub
Tuliskanlah sebuah statemen yang memanggil prosedur
dan melewatkannya variabel-variabel berikut:
Dim strNama As String
Dim intUsia As Integer
Dim sngPemasukan As Single
9.
Kalkulator
Harga Ritel: Tuliskanlah sebuah aplikasi yang menerima harga
grosir dan persentase markup. (Sebagai contoh, jika harga grosi dari sebuah
item adalah Rp. 5 dan harga ritelnya adalah Rp. 10, maka terjadi markup 100%).
Program memuat sebuah fungsi dengan nama HitungRitel yang menerima harga grosir
dan persentase markup sebagai argumennya, dan menghasilkan harga ritel dari item.
Form aplikasi ditampilkan seperti pada
Gambar 4.22.
Ketika user
mengklik tombol Harga Ritel, program
akan melakukan berikut:
- Verifikasi bahwa nilai-nilai yang dimasukkan oleh user untuk harga grosir dan persentase markup adalah nilai numerik dan tak-negatif.
- Panggil fungsi HitungRitel.
- Tampilkan harga ritel sebagai nilai balik dari fungsi HargaRitel.
10. Biaya Rumah Sakit:
Ciptakanlah sebuah aplikasi yang menghitung biaya total dari perawatan inap
rumah sakit. Aplikasi menerima masukan berikut:
·
Jumlah hari inap di rumah sakit, sebagai sebuah
integer.
- Biaya obat.
- Biaya bedah.
- Biaya laboratorium.
- Biaya rehabilitasi fisikal.
- Biaya inap rumah sakit Rp. 300 ribu per hari. Form aplikasi harus mengikuti seperti yang ditampilkan pada Gambar 4.23.
Ciptakanlah
funsgsi-fungsi berikut:
- HitungBiayaInap: Menghitung dan menghasilkan biaya inap rumah sakit. Ini dihitung sebagai Rp. 300 ribu dikalikan dengan banyak hari inap.
- HitungBiayaLain: Menghitung dan menghasilkan total biaya obat, bedah, lab, dan rehabilitasi.
- HitungBiayaTotal: Menghitung dan menghasilkan total biaya.
- ValidasiBidangMasukan: Memeriksa validitas dari bidang-bidang masukan dengan mengkonversi setiap bidang menjadi nilai numerik dan memeriksa rentangnya. Jika ada bidang masukan yang tidak valid, maka fungsi ini menampilkan pesan error dan menghasilkan sebuah nilai False.
Validasi Masukan: Anda tidak bisa menerima nilai negatif untuk banyaknya hari inap, biaya
obat, biaya bedah, biaya lab, atau biaya rehabilitasi. Ketika menampilkan
error, gunakan sebuah kontrol Label dan sebutkan nama bidang yang tidak valid
dan tipe data yang perlu dimasukkan (integer atau numerik).
11. Status Pesanan: Perusahaan
Kabel Tarabunga menjual kabel tembaga dengan harga Rp. 100 ribu untuk setiap
unit panjang. Biaya pengiriman normal adalah Rp. 10 ribu untuk tiap kabel.
Biaya pengiriman cepat adalah Rp. 15 ribu. Ciptakanlah sebuah aplikasi yang
menampilkan status dari sebuah pesanan. Status harus mencakup:
- Banyaknya kabel yang siap untuk dikirimkan.
- Banyaknya kabel yang masih antri.
- Biaya pengepakan dan pengiriman.
- Total biaya tagihan.
Form aplikasi
harus mirip dengan yang ditampilkan pada Gambar 4.24.
User memasukkan
banyaknya kabel yang dipesan ke dalam kotak teks, dan mencentang kotak periksa Pengiriman Cepat jika pengiriman cepat
diinginkan. Ketika tombol Hitung Total
diklik, sebuah kotak masukan akan ditampilkan yang meminta user untuk
memasukkan banyaknya kabel yang sekarang
berada di gudang. Jika user memesan lebih banyak kabel dari yang ada di gudang,
maka sebagian pesanan akan mengantri. Sebagai contoh, jika user memesan 200
kabel dan hanya ada 150 kabel di gudang, maka 150 kabel siap untuk dikirim dan
50 kabel mengantri dikirim. Aplikasi memiliki fungsi-fungsi berikut, yang
dipanggil dari event handler Click
dari tombol Hitung Total:
- DapatkanStok: Menampilkan sebuah kotak masukan yang meminta user untuk memasukkan banyaknya kabel yang ada di gudang. Fungsi ini menghasilkan nilai yang dimasukkan oleh user.
- SiapKirim: Menerima argumen-argumen berikut: banyaknya kabel di gudang dan banyaknya kabel yang dipesan. Fungsi ini menghasilkan banyaknya kabel yang siap dikirim.
- AntriKirim: Menerima argumen-argumen berikut: banyaknya kabel di gudang dan banyaknya kabel yang dipesan. Fungsi ini menghasilkan banyaknya kabel yang antri dikirim. Jika tidak ada yang antri, maka fungsi ini menghasilkan 0.
- BiayaKirim: Menerima argumen-argumen berikut: banyaknya kabel yang siap dikirim dan biaya pengiriman tiap kabel. Fungsi ini menghasilkan biaya total pengiriman dan pemaketan.
Aplikasi harus
memiliki prosedur-prosedur berikut, yang dipanggil dari event handler dari
tombol Bersihkan Form:
- ResetKabel: Membersihkan kotak teks dan kotak periksa.
- ResetPengiriman: Membersihkan semua label yang menampilkan informasi pengiriman.
Validasi Masukan: Anda tidak menerima banyak pesanan yang kurang dari satu
kabel.
12. Tarabunga Otomotif: Perusahaan perawatan mesin ini menawarkan sejumlah layanan perawatan
rutin berikut:
- Ganti oli, Rp. 75000
- Pelumasan, Rp. 50000
- Radiator, Rp. 125000
- Transmisi, Rp. 250000
- Inspeksi, Rp. 25000
- Saringan, Rp. 350000
- Ban, Rp. 30000
Tarabunga
Otomotif juga menawarkan layanan tak-rutin seperti mengganti komponen dan biaya
tenaga ahli (Rp. 200 ribu per jam). Ciptakanlah sebuah aplikasi yang
menampilkan biaya perawatan total. Form harus sam dengan seperti ditunjukkan
pada Gambar 4.25.
Aplikasi haru
memiliki fungsi-fungsi berikut:
- BiayaGantiOliPelumas menghasilkan biaya total untuk penggantian oli dan/atau pekerjaan pelumasan, jika ada.
- BiayaRadiatorTransmisi menghasilkan biaya total untuk perawatan radiator dan transmisi.
- BiayaInspeksi menghasilkan biaya total untuk inspeksi, penggantian saringan, dan/atau perawatan rotasi ban, jika ada.
- BiayaLain menghasilkan biaya total untuk penggantian komponen lain dan tenaga ahli.
- BiayaPajak menghasilkan jumlah pajak. Pajak penjualan adalah 6%, dan hanya diterapkan untuk biaya penggantian komponen.
- BiayaTotal menghasilkan total dari semua biaya.
Aplikasi harus
memiliki prosedur-prosedur berikut, yang dipanggil ketika user mengklik tombol
Bersih:
- BersihkanOliPelumas membersihkan semua kotak periksa untuk penggantian oli dan pekerjaan pelumasan.
- BersihkanRadiatorTransmisi membersihkan semua kotak periksa untuk perawatan radiator dan transmisi.
- BersihkanInspeksi membersihkan semua kotak periksa untuk inspeksi, penggantian saringan, dan/atau perawatan rotasi ban.
- BersihkanLain membersihkan semua kotak periksa untuk penggantian komponen lain dan tenaga ahli.
Validasi Masukan: Anda tidak bisa menerima nilai negatif untuk biaya
penggantian komponen dan biaya tenaga ahli.
13. Verifikasi Password:
Anda akan mengembangkan sebuah paket perangkat lunak yang meminta user untuk
memasukkan password. Perangkat lunak Anda meminta user untuk memasukkan password
dengan kriteria berikut:
- Password sedikitnya harus memiliki panjang enam karakter.
- Password harus memuat sedikitnya satu dijit numerik dan sedikitnya satu karakter alfabetik.
Ciptakanlah
sebuah aplikasi yang meminta user untuk memasukkan password. Aplikasi tersebut
harus menggunakan sebuah fungsi dengan nama ApaValid untuk memverifikasi bahwa password memenuhi kriteria yang
diminta. Fungsi ini menampilkan sebuah pesan yang mengindikasikan apakah
password valid atau tidak. Fungsi ApaValid
menerima sebuah string sebagai argumennya dan menghasilkan nilai balik berupa
sebuah nilai Boolean. Argumen string adalah password yang akan diperiksa. Jika
password valid, fungsi akan menghasilkan True.
Sebaliknya, ia menghasilkan False.
14. Biaya Perjalanan: Ciptakanlah
sebuah aplikasi yang menghitung dan menampilkan total biaya perjalanan untuk
sebuah perjalanan bisnis. User harus menyediakan informasi berikut:
- Banyaknya hari perjalanan
- Biaya tiket pesawat
- Biaya makan
- Biaya sewa mobil
- Jumlah kilometer yang dikendarai, jika menggunakan mobil sendiri
- Biaya parkir
- Biaya taksi
- Biaya pendaftaran konferensi atau seminar
- Biaya hotel atau penginapan per malam
Perusahaan akan
mengganti biaya perjalanan sesuai dengan kebijakan berikut:
·
Rp. 300 ribu untuk setiap kali makan
·
Biaya parkir, sampai dengan Rp. 100 ribu per hari
·
Biaya taksi, sampai dengan Rp. 200 ribu per hari
·
Biaya penginapan atau hotel, sampai dengan Rp. 950
ribu per hari
·
Jika menggunakan kendaraan pribadi, akan
dibayarkan Rp. 5 ribu per kilometer
Aplikasi harus
menghitung dan menampilkan berikut:
- Total biaya perjalanan oleh pebisnis
- Total biaya perjalanan yang diijinkan
- Kelebihan yang harus dibayar oleh pebisnis, jika ada
- Uang yang ditabung oleh pebisnis jika total biaya perjalanan kurang dari total yang diijinkan.
Aplikasi harus
memiliki fungsi-fungsi berikut:
- HitungMakan menghitung dan menghasilkan biaya yang akan dibayar oleh perusahaan untuk makan.
- HitungKilometer menghitung dan menghasilkan biaya yang akan dibayar oleh perusahaan untuk jumlah kilometer jika menggunakan mobil pribadi.
- HitungBiayaParkir menghitung dan menghasilkan biaya yang akan dibayar oleh perusahaan untuk parkir.
- HitungBiayaTaksi menghitung dan menghasilkan biaya yang akan dibayar oleh perusahaan untuk taksi.
- HitungBiayaPenginapan menghitung dan menghasilkan biaya yang akan dibayar oleh perusahaan untuk penginapan atau hotel.
- HitungTotalBiayaGanti menghitung dan menghasilkan total biaya yang akan dibayar oleh perusahaan.
- HitungTakDiijinkan menghitung dan menghasilkan total biaya yang tidak diijinkan atau tidak diganti oleh perusahaan, yaitu biaya tiket yang melebihi Rp. 100 ribu per hari, biaya taksi yang melebihi Rp. 200 ribu per hari, dan biaya penginapan yang melebihi Rp. 950 ribu per hari.
- HitungTabungan menghitung dan menghasilkan jumlah uang yang bisa ditabung. Sebagai contoh, biaya yang diijinkan untuk penginapan adalah Rp. 950 ribu per hari. Jika pebisnis tinggal di sebuah hotel dengan tarif Rp. 850 ribu per hari untuk lima hari, maka ia bisa menabung Rp. 500 ribu.
Validasi Masukan: Anda tidak bisa menerima nilai negatif untuk setiap biaya atau banyaknya
kilometer yang ditempuh dengan kendaraan pribadi. Anda juga tidak bisa menerima
banyaknya hari perjalanan yang kurang dari 1.
15. Estimasi Volume Pekerjaan:
Sebuah perusahaan layanan pengecatan telah menentukan bahwa untuk setiap 50
meter persegi tembok dibutuhkan satu galon cat dan delapan jam kerja.
Perusahaan menetapkan tarif Rp. 180 ribu per jam kerja. Ciptakanlah sebuah
aplikasi yang dapat dipakai user untuk memasuk banyaknya ruangan yang akan
dicat dan harga cat per galon. Aplikasi juga menggunakan kotak masukan untuk
meminta user tentang berapa meter persegi tembok pada tiap ruangan. Aplikasi
kemudian menampilkan informasi berikut:
- Banyaknya galon cat yang diperlukan
- Jumlah jam kerja yang diperlukan
- Biaya cat
- Biaya pengecatan
- Total biaya dari pekerjaan pengecatan
Validasi Masukan: Anda tidak bisa menerima sebuah nilai yang kurang dari 1 untuk banyaknya
ruangan. Anda tidak bisa menerima sebuah nilai yang kurang dari Rp. 100 ribu
untuk harga cat per galon. Anda tidak bisa menerima sebuah nilai negatif untuk
meter persegi dari tembok.
16. Jarak Jatuh: Ketika sebuah
objek jatuh karena gravitasi, formula berikut dapat dipakai untuk menentukan
jarak objek jatuh pada periode waktu tertentu:
Variabel-variabel dalam formula adalah sebagai
berikut: d adalah jarak dalam meter, g adalah 9.8, dan t adalah jumlah waktu
dalam detik saat objek jatuh. Ciptakanlah sebuah aplikasi VB yang dapat dipakai
user untuk memasukkan jumlah waktu dari objek jatuh dan kemudian menampilkan
jarak tempuh objek tersebut. Aplikasi harus memiliki sebuah fungsi dengan nama JarakJatuh. Fungsi ini menerima waktu
jatuh dari objek (dalam detik) sebagai argumennya. Fungsi harus menghasilkan
jarak dalam meter pada interval waktu yang diberikan.
17. Angka Prima: Nilai prima
atau angka prima adalah sebuah nilai yang dapat dibagi (habis dibagi) oleh
dirinya sendiri dan 1. Sebagai contoh, angka 5 adalah prima karena ia habis
dibagi hanya oleh 1 dan 5. Namun, angka 6 bukanlah prima karena ia habis dibagi
oleh 1, 2, 3, dan 6. Tulislah sebuah fungsi Boolean dengan nama ApaPrima yang mengambil sebuah integer
sebagai argumennya dan menghasilkan True
jika argumen adalah sebuah prima atau False
jika tidak. Gunakan fungsi tersebut di dalam sebuah aplikasi yang dapat dipakai
oleh user untuk memasukkan sebuah nilai dan kemudian menampilkan sebuah pesan
yang mengindikasikan apakah nilai tersebut prima atau tidak.
18. Daftar Angka Prima:
Latihan ini mengasumsikan bahwa Anda telah menuliskan fungsi ApaPrima pada latihan sebelumnya.
Ciptakanlah aplikasi lain yang menggunakan fungsi ini untuk menampilkan semua
angka prima dari 1 sampai 100 pada sebuah kotak list. Program sebaiknya
memiliki sebuah loop yang memanggil fungsi ApaPrima.
19. Energi Kinetik: Pakar seni perang
mengetahui bahwa tenaga atau kekuatan yang diperlukan untuk memecah batu bata
lebih banyak bertumpu pada kecepatan daripada bobot atau berat tangan. Inilah
mengapa anak-anak (dengan latihan) bisa memecah lebih banyak batubata daripada
orang dewasa. Formula fisika untuk energi kinetik (KE) menjelaskan fenomena
ini:
Pada formula ini, m sama dengan massa objek (dalam
kilogram), dan v adalah kecepatan dalam meter per detik (diukur sebagai
perubahan jarak terhadap waktu). Karena kecepatan dikuadratkan, ia jauh lebih
penting dalam menentukan berapa banyak energi kinetik yang Anda hasilkan.
Pekerjaan Anda adalah menciptakan sebuah aplikasi VB yang dapat dipakai user
untuk memasukkan sebuah massa objek dan kecepatan dan kemudian menampilkan
energi kinetik dari objek tersebut. Aplikasi harus memiliki sebuah fungsi
dengan nama EnergiKinetik yang
menerima sebuah massa objek bergerak (dalam kilogram) dan kecepatan (dalam
meter per detik) sebagai argumennya.
No comments:
Post a Comment