Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mendeklarasikan nama, parameter, dan kode yang menentukan prosedur Sub.
Sintaks
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
Generator
attributelistOpsional. Lihat Daftar Atribut.
PartialOpsional. Menunjukkan definisi metode parsial. Lihat Metode parsial.
accessmodifierOpsional. Bisa jadi salah satu dari yang berikut:
proceduremodifiersOpsional. Bisa jadi salah satu dari yang berikut:
MustOverride OverridesNotOverridable Overrides
SharedOpsional. Lihat Dibagikan.
ShadowsOpsional. Lihat Bayangan.
AsyncOpsional. Lihat Asinkron.
nameHarus diisi. Nama prosedur. Lihat Nama Elemen yang Dideklarasikan. Untuk membuat prosedur konstruktor untuk kelas, atur nama prosedur
Subke kata kunciNew. Untuk informasi selengkapnya, lihat: Masa Pakai Objek: Cara Objek Dibuat dan Dihancurkan.typeparamlistOpsional. Daftar parameter jenis untuk prosedur generik. Lihat Daftar Jenis.
parameterlistOpsional. Daftar nama variabel lokal yang mewakili parameter prosedur ini. Lihat Daftar parameter.
ImplementsOpsional. Menunjukkan bahwa prosedur ini menerapkan satu atau lebih prosedur
Sub, masing-masing ditentukan dalam antarmuka yang diterapkan oleh prosedur ini yang berisi kelas atau struktur. Lihat Pernyataan Implements.implementslistDiperlukan jika
Implementsdiberikan. Daftar prosedurSubyang diterapkan.implementedprocedure [ , implementedprocedure ... ]Setiap
implementedprocedurememiliki sintaks dan bagian berikut:interface.definednameBagian Deskripsi interfaceHarus diisi. Nama antarmuka yang diterapkan oleh kelas atau struktur yang berisi prosedur ini. definednameHarus diisi. Nama yang digunakan untuk menentukan prosedur dalam interface.HandlesOpsional. Menunjukkan bahwa prosedur ini dapat menangani satu atau lebih peristiwa tertentu. Lihat Handel.
eventlistDiperlukan jika
Handlesdiberikan. Daftar peristiwa yang ditangani prosedur ini.eventspecifier [ , eventspecifier ... ]Setiap
eventspecifiermemiliki sintaks dan bagian berikut:eventvariable.eventBagian Deskripsi eventvariableHarus diisi. Variabel objek dideklarasikan dengan jenis data kelas atau struktur yang menaikkan peristiwa. eventHarus diisi. Nama peristiwa yang ditangani prosedur ini. statementsOpsional. Blok pernyataan untuk dijalankan dalam prosedur ini.
End SubMengakhiri definisi prosedur ini.
Keterangan
Semua kode yang dapat dieksekusi harus berada di dalam prosedur. Gunakan prosedur Sub saat Anda tidak ingin mengembalikan nilai ke kode panggilan. Gunakan prosedur Function saat Anda ingin mengembalikan suatu nilai.
Menentukan Sub Prosedur
Anda hanya dapat menentukan prosedur Sub di tingkat modul. Oleh karena itu, konteks deklarasi untuk sub prosedur haruslah kelas, struktur, modul, atau antarmuka dan tidak boleh berupa file sumber, namespace, prosedur, atau blok. Untuk informasi selengkapnya, lihat Konteks Deklarasi dan Tingkat Akses Default.
Prosedur Sub default ke akses publik. Anda dapat menyesuaikan tingkat akses mereka dengan pengubah akses.
Jika prosedur ini menggunakan kata kunci Implements, kelas atau struktur yang memuat juga harus memiliki pernyataan Implements yang segera mengikuti pernyataan Class atau Structure. Pernyataan Implements harus menyertakan setiap antarmuka yang ditentukan dalam implementslist. Namun, nama yang digunakan antarmuka untuk mendefinisikan Sub (dalam definedname) tidak harus cocok dengan nama prosedur ini (dalam name).
Kembali dari Sub Prosedur
Ketika prosedur Sub kembali ke kode panggilan, eksekusi berlanjut dengan pernyataan setelah pernyataan yang memanggilnya.
Contoh berikut menunjukkan pengembalian dari prosedur Sub.
Sub mySub(ByVal q As String)
Return
End Sub
Pernyataan Exit Sub dan Return menyebabkan keluar cepat dari prosedur Sub. Sejumlah pernyataan Exit Sub dan Return dapat muncul di mana saja dalam prosedur, dan Anda dapat mencampur pernyataan Exit Sub dan Return.
Memanggil Sub Prosedur
Anda memanggil prosedur Sub dengan menggunakan nama prosedur dalam pernyataan lalu mengikuti nama tersebut dengan daftar argumennya dalam tanda kurung. Anda dapat menghilangkan tanda kurung hanya jika Anda tidak menyediakan argumen apa pun. Namun, kode Anda lebih mudah dibaca jika Anda selalu menyertakan tanda kurung.
Prosedur Sub dan prosedur Function dapat memiliki parameter dan melakukan serangkaian pernyataan. Namun, prosedur Function mengembalikan nilai, dan prosedur Subtidak. Oleh karena itu, Anda tidak dapat menggunakan prosedur Sub dalam ekspresi.
Anda dapat menggunakan kata kunci Call saat memanggil prosedur Sub, tetapi kata kunci tersebut tidak disarankan untuk sebagian besar penggunaan. Untuk informasi selengkapnya, lihat Memanggil Pernyataan.
Visual Basic terkadang menyusun ulang ekspresi aritmetika untuk meningkatkan efisiensi internal. Untuk alasan itu, jika daftar argumen Anda menyertakan ekspresi yang memanggil prosedur lain, Anda tidak boleh berasumsi bahwa ekspresi tersebut akan dipanggil dalam urutan tertentu.
Sub Prosedur Asinkron
Dengan fitur Asinkron, Anda dapat memanggil fungsi asinkron tanpa menggunakan panggilan balik eksplisit atau secara manual memisahkan kode Anda di beberapa fungsi atau ekspresi lambda.
Jika Anda menandai metode dengan pengubah Asinkron, Anda dapat menggunakan operator Menunggu dalam prosedur tersebut. Saat kontrol mencapai ekspresi Await dalam prosedur Async, kontrol kembali ke pemanggil, dan kemajuan dalam metode ditangguhkan hingga tugas yang ditunggu selesai. Saat tugas selesai, eksekusi dapat dilanjutkan dengan prosedur itu.
Catatan
Prosedur Async kembali ke pemanggil ketika bertemu dengan objek pertama yang ditunggu yang belum selesai, atau sampai tercapai ke akhir prosedur Async, mana yang lebih dulu.
Anda juga dapat menandai Pernyataan Fungsi dengan pengubah Async. Fungsi Async dapat memiliki jenis pengembalian Task<TResult> atau Task. Contoh nanti dalam topik ini menunjukkan fungsi Async yang memiliki jenis pengembalian Task<TResult>.
Async
Sub prosedur terutama digunakan untuk penanganan aktivitas, di mana nilai tidak dapat dikembalikan. Prosedur AsyncSub tidak dapat ditunggu, dan pemanggil AsyncSub prosedur tidak dapat menangkap pengecualian yang dilemparkan Sub prosedur.
Prosedur Async tidak dapat mendeklarasikan parameter ByRef apa pun.
Untuk informasi selengkapnya tentang prosedur Async, lihat Pemrograman Asinkron dengan Asinkron dan Tunggu, Alur Kontrol dalam Program Asinkron, dan Jenis Pengembalian Asinkron.
Contoh 1
Contoh berikut menggunakan pernyataan Sub untuk menentukan nama, parameter, dan kode yang membentuk isi prosedur Sub.
Sub ComputeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
Debug.WriteLine(area)
End Sub
Contoh 2
Dalam contoh berikut, DelayAsync adalah AsyncFunction yang memiliki jenis pengembalian .Task<TResult>
DelayAsync memiliki pernyataan Return yang mengembalikan bilangan bulat. Oleh karena itu, deklarasi fungsi DelayAsync harus memiliki jenis pengembalian Task(Of Integer). Karena jenis yang dikembalikan adalah Task(Of Integer), evaluasi ekspresi Await dalam DoSomethingAsync menghasilkan bilangan bulat, seperti yang ditunjukkan oleh pernyataan berikut: Dim result As Integer = Await delayTask.
Prosedur startButton_Click ini adalah contoh prosedur Async Sub. Karena DoSomethingAsync adalah fungsi Async, tugas untuk panggilan ke DoSomethingAsync harus ditunggu, seperti yang ditunjukkan oleh pernyataan berikut: Await DoSomethingAsync(). Prosedur startButton_ClickSub harus didefinisikan dengan pengubah Async karena memiliki Await ekspresi.
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
Await DoSomethingAsync()
End Sub
Private Async Function DoSomethingAsync() As Task
Dim delayTask As Task(Of Integer) = DelayAsync()
Dim result As Integer = Await delayTask
' The previous two statements may be combined into
' the following statement.
' Dim result As Integer = Await DelayAsync()
Debug.WriteLine("Result: " & result)
End Function
Private Async Function DelayAsync() As Task(Of Integer)
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5