Wednesday, December 14, 2016

Bab 4. Visual Basic .NET Untuk Pemula



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.

Gambar 4.11 Form dari projek Demo ByVal ByRef

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.

Gambar 4.12 Hasil dari pelewatan argumen dengan nilai


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.

Gambar 4.13 Hasil dari pelewatan argumen dengan referensi

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.

Gambar 4.14 Argumen-argumen dilewatkan dan sebuah nilai dijadikan nilai balik



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.

Gambar 4.16 Harga jual terhitung



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.

Gambar 4.17 Lokasi dari breakpoint

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.

Gambar 4.18 Lokasi dari breakpoint

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.

Gambar 4.19 Lokasi dari breakpoint

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)

Gambar 4.20 Form Kalkulator Kafe Tarabung


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.


Gambar 4.21 Form dari aplikasi Kafe Tarabunga

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.

Gambar 4.22 Form Kalkulator Harga Ritel

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).

Gambar 4.23 Form Biaya Rumah Sakit

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.


Gambar 4.24 Form Status Pesanan

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.


Gambar 4.25 Form Tarabunga Otomotif

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