Prosedur adalah blok kode yang diberi nama dan dapat dipanggil berulang kali dari bagian lain program. VB.NET menyediakan dua jenis prosedur yang paling sering digunakan, yaitu Sub dan Function. Topik ini membahas cara mendeklarasikan keduanya, perbedaan perilakunya, cara memanggilnya, serta aturan tanda kurung yang berlaku pada pemanggilan. Setelah membacanya, program yang tadinya berupa satu daftar pernyataan panjang dapat dipecah menjadi prosedur-prosedur pendek dengan tugas yang jelas.
Sub tanpa nilai kembalian#
Sub adalah prosedur yang menjalankan serangkaian pernyataan tanpa mengembalikan nilai ke pemanggilnya. Deklarasinya dibuka dengan pernyataan Sub, ditutup dengan End Sub, dan parameternya dituliskan di antara tanda kurung. Sub cocok untuk aksi yang selesai dengan sendirinya, misalnya mencetak laporan ke layar atau menuliskan berkas, karena hasil kerjanya langsung tampak tanpa perlu dikirim balik.
' tidak-dijalankan
Sub CetakLaporan(nama As String, nilaiSatu As Double, nilaiDua As Double, nilaiTiga As Double)
Console.WriteLine($"Laporan nilai: {nama}")
Console.WriteLine($"Nilai 1: {nilaiSatu}")
Console.WriteLine($"Nilai 2: {nilaiDua}")
Console.WriteLine($"Nilai 3: {nilaiTiga}")
End Sub
' pemanggilan sebagai pernyataan
CetakLaporan("Ali", 80, 90, 100)Prosedur CetakLaporan menerima empat parameter dan menuliskan isinya ke console. Pemanggilannya berupa satu pernyataan yang berdiri sendiri, sehingga kendali langsung kembali ke pemanggil setelah pernyataan terakhir selesai dijalankan. Tidak ada nilai yang dikirim balik, dan memang begitulah tempat Sub berada, yaitu pada aksi yang tidak memerlukan hasil.
Nama prosedur mengikuti konvensi PascalCase seperti tipe lainnya, dan kalimat kerjanya dibaca sebagai aksi, misalnya CetakLaporan berarti laporan dicetak. Daftar parameternya boleh kosong bila prosedurnya memang tidak memerlukan masukan, misalnya Sub CetakGaris() yang hanya menuliskan garis pemisah. Sebaliknya, bila tugasnya menghasilkan nilai yang perlu ditampung pemanggil, Sub bukan wadah yang tepat dan deklarasinya perlu dipindahkan ke Function pada bagian berikutnya.
Function dengan nilai kembalian#
Function adalah prosedur yang mengembalikan satu nilai ke pemanggilnya melalui pernyataan Return. Tipe nilai kembalian dideklarasikan dengan klausa As di akhir baris Function, misalnya As Double menjanjikan hasil berupa bilangan pecahan. Karena menghasilkan nilai, Function dipanggil di dalam ekspresi, misalnya di sebelah kanan penugasan atau di dalam argumen prosedur lain.
' tidak-dijalankan
Function HitungRataRata(nilaiSatu As Double, nilaiDua As Double, nilaiTiga As Double) As Double
Return (nilaiSatu + nilaiDua + nilaiTiga) / 3
End FunctionPerhatikan baris Return (nilaiSatu + nilaiDua + nilaiTiga) / 3. Pernyataan itu menghitung rata-rata tiga nilai sekaligus mengembalikan kendali ke pemanggil. VB.NET juga mengizinkan cara kedua, yaitu mengisi nilai ke nama fungsinya sendiri, misalnya HitungRataRata = total, dan kendali baru kembali ketika End Function tercapai. Cara pertama dengan Return lebih ringkas dan menjadi gaya yang lazim digunakan.
Nilai kembalian juga dapat langsung menjadi argumen prosedur lain, misalnya Console.WriteLine(HitungRataRata(80, 90, 100)), tanpa variabel penengah. Pilihlah nama yang menyatakan hasilnya, sehingga kalimat pemanggilnya terbaca sebagai satu perhitungan yang lengkap. Dengan kebiasaan itu, pembaca kode mengetahui sifat prosedurnya dari namanya sebelum membaca badannya.
Menyusun keduanya dalam satu program#
Program berikut menggabungkan kedua jenis prosedur untuk membuat laporan nilai ujian. Sub CetakLaporan menangani pencetakan, sedangkan Function HitungRataRata menangani perhitungan yang hasilnya digunakan di dalam pencetakan tersebut. Simpan berkasnya, jalankan dengan perintah dotnet run dari folder proyek console, dan bandingkan keluarannya dengan yang tertulis di bawah.
Module Program
Sub CetakLaporan(nama As String, nilaiSatu As Double, nilaiDua As Double, nilaiTiga As Double)
Console.WriteLine($"Laporan nilai: {nama}")
Console.WriteLine($"Nilai 1: {nilaiSatu}")
Console.WriteLine($"Nilai 2: {nilaiDua}")
Console.WriteLine($"Nilai 3: {nilaiTiga}")
Console.WriteLine($"Rata-rata: {HitungRataRata(nilaiSatu, nilaiDua, nilaiTiga)}")
Console.WriteLine()
End Sub
Function HitungRataRata(nilaiSatu As Double, nilaiDua As Double, nilaiTiga As Double) As Double
Return (nilaiSatu + nilaiDua + nilaiTiga) / 3
End Function
Sub Main()
CetakLaporan("Ali", 80, 90, 100)
CetakLaporan("Citra", 75, 85, 95)
End Sub
End ModuleLaporan nilai: Ali
Nilai 1: 80
Nilai 2: 90
Nilai 3: 100
Rata-rata: 90
Laporan nilai: Citra
Nilai 1: 75
Nilai 2: 85
Nilai 3: 95
Rata-rata: 85Bagian Sub Main memanggil CetakLaporan dua kali dengan data peserta yang berbeda. Di dalam pencetakan, rata-rata diperoleh dengan memanggil HitungRataRata langsung di dalam string interpolasi, sehingga nilai kembaliannya langsung digunakan tanpa variabel tambahan. Pola pembagian kerja seperti ini memudahkan pengujian, karena perhitungan dapat diperiksa terlebih dahulu tanpa memperhatikan bentuk keluarannya. Urutan deklarasi di dalam Module juga bebas, karena compiler membaca seluruh modul sebelum program dijalankan, sehingga CetakLaporan boleh memanggil HitungRataRata yang dideklarasikan sesudahnya. Dari Sub Main sebagai titik masuk, panggilan ke prosedur lain berantai sesuai kebutuhan laporannya. Diagram berikut merangkum alur kedua jenis pemanggilan itu, yaitu Sub yang hanya kembali dan Function yang kembali disertai nilai.
Aturan tanda kurung pada pemanggilan#
Tanda kurung pada pemanggilan prosedur mengikuti konteks pemanggilannya, bukan selera penulisnya. Aturannya dirangkum dalam tabel berikut.
| Bentuk pemanggilan | Tanda kurung |
|---|---|
Function dipanggil di dalam ekspresi dengan argumen | wajib mengapit daftar argumen |
Function dipanggil di dalam ekspresi tanpa argumen | boleh dihilangkan |
Sub atau Function dipanggil sebagai pernyataan | boleh digunakan dan disarankan |
Sub dipanggil sebagai pernyataan tanpa argumen | boleh dihilangkan |
Aturan yang paling sering menimbulkan masalah adalah baris pertama tabel. Pemanggilan Dim rata = HitungRataRata(80, 90, 100) sah karena tanda kurungnya ada, sedangkan bentuk tanpa tanda kurung di posisi ekspresi ditolak compiler. Untuk pemanggilan sebagai pernyataan, VB.NET menerima bentuk dengan maupun tanpa tanda kurung, tetapi dokumentasi resmi menyarankan tanda kurung tetap digunakan agar kode lebih mudah dibaca. Kata kunci Call juga masih tersedia untuk memanggil Sub sebagai pernyataan, misalnya Call CetakLaporan("Ali", 80, 90, 100), meskipun gaya modern lazim meninggalkannya.
' tidak-dijalankan
Dim rata As Double = HitungRataRata(80, 90, 100) ' sah: kurung mengapit argumen
CetakLaporan("Budi", 70, 80, 90) ' sah: Sub sebagai pernyataan
' Dim gagal As Double = CetakLaporan("Budi", 70, 80, 90) ' ditolak: Sub tidak menghasilkan nilai
' Dim salah As Double = HitungRataRata 80, 90, 100 ' ditolak: kurung wajib di posisi ekspresiKesalahan umum#
Kesalahan pertama adalah menggunakan Sub untuk perhitungan, lalu mencoba menampung “hasilnya” ke dalam variabel. Compiler menolaknya karena Sub tidak menghasilkan nilai apa pun. Perbaikannya jelas, yaitu mengubah deklarasinya menjadi Function dengan klausa As dan mengembalikan hasilnya lewat Return.
Kesalahan kedua adalah Function yang alur cabangnya tidak semua bermuara pada Return. Misalnya percabangan If yang hanya satu sisi memuat Return, sehingga jalur lain lolos sampai End Function dan menghasilkan nilai default secara diam-diam. Jejak bugnya berupa angka 0 atau Nothing yang muncul tanpa pesan error. Pastikan setiap jalur eksekusi mengembalikan nilai, atau tuliskan satu pernyataan Return terakhir sebagai penutup.
Kesalahan ketiga adalah memanggil Function sebagai pernyataan lalu mengharapkan hasilnya tersimpan. Baris HitungRataRata(80, 90, 100) yang berdiri sendiri sah menurut compiler, tetapi seluruh perhitungannya dibuang begitu saja karena tidak ada penampung. Bila hasilnya memang tidak digunakan, panggilan seperti itu menyesatkan pembaca kode, sehingga sebaiknya dituliskan penugasannya atau diubah menjadi Sub yang tugasnya murni aksi.
Ringkasan#
Submenjalankan pernyataan tanpa nilai kembalian, sedangkanFunctionmengembalikan satu nilai sesuai tipe yang dideklarasikan pada klausaAs, biasanya melalui pernyataanReturn.- Pemanggilan di dalam ekspresi wajib menggunakan tanda kurung di sekitar daftar argumen, sedangkan pemanggilan sebagai pernyataan bebas dengan atau tanpa tanda kurung, dan penggunaannya tetap menjadi gaya yang disarankan.
- Pecahkan program menjadi prosedur pendek dengan tugas tunggal, yaitu
Subuntuk aksi danFunctionuntuk perhitungan yang hasilnya digunakan pemanggil.
Referensi#
- Function Procedures — Microsoft Learn
— Deklarasi
Function, dua cara mengembalikan nilai, dan sintaks pemanggilannya. - Sub Procedures — Microsoft Learn
— Deklarasi
Subdan perilakunya sebagai prosedur tanpa nilai kembalian. - How to: Call a Procedure That Does Not Return a Value — Microsoft Learn
— Langkah memanggil
Subbeserta saran penggunaan tanda kurung.