Sub Pernyataan (Visual Basic)
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
attributelist
Opsional. Lihat Daftar Atribut.
Partial
Opsional. Menunjukkan definisi metode parsial. Lihat Metode parsial.
accessmodifier
Opsional. Bisa jadi salah satu dari yang berikut:
proceduremodifiers
Opsional. Bisa jadi salah satu dari yang berikut:
MustOverride Overrides
NotOverridable Overrides
Shared
Opsional. Lihat Dibagikan.
Shadows
Opsional. Lihat Bayangan.
Async
Opsional. Lihat Asinkron.
name
Harus diisi. Nama prosedur. Lihat Nama Elemen yang Dideklarasikan. Untuk membuat prosedur konstruktor untuk kelas, atur nama prosedur
Sub
ke kata kunciNew
. Untuk informasi selengkapnya, lihat: Masa Pakai Objek: Cara Objek Dibuat dan Dihancurkan.typeparamlist
Opsional. Daftar parameter jenis untuk prosedur generik. Lihat Daftar Jenis.
parameterlist
Opsional. Daftar nama variabel lokal yang mewakili parameter prosedur ini. Lihat Daftar parameter.
Implements
Opsional. 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.implementslist
Diperlukan jika
Implements
diberikan. Daftar prosedurSub
yang diterapkan.implementedprocedure [ , implementedprocedure ... ]
Setiap
implementedprocedure
memiliki sintaks dan bagian berikut:interface.definedname
Bagian Deskripsi interface
Harus diisi. Nama antarmuka yang diterapkan oleh kelas atau struktur yang berisi prosedur ini. definedname
Harus diisi. Nama yang digunakan untuk menentukan prosedur dalam interface
.Handles
Opsional. Menunjukkan bahwa prosedur ini dapat menangani satu atau lebih peristiwa tertentu. Lihat Handel.
eventlist
Diperlukan jika
Handles
diberikan. Daftar peristiwa yang ditangani prosedur ini.eventspecifier [ , eventspecifier ... ]
Setiap
eventspecifier
memiliki sintaks dan bagian berikut:eventvariable.event
Bagian Deskripsi eventvariable
Harus diisi. Variabel objek dideklarasikan dengan jenis data kelas atau struktur yang menaikkan peristiwa. event
Harus diisi. Nama peristiwa yang ditangani prosedur ini. statements
Opsional. Blok pernyataan untuk dijalankan dalam prosedur ini.
End Sub
Mengakhiri 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 Sub
tidak. 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 ini terutama digunakan untuk penanganan aktivitas, di mana nilai tidak dapat dikembalikan. Prosedur Async
Sub
tidak dapat ditunggu, dan pemanggil prosedur Async
Sub
tidak dapat menangkap pengecualian yang dilemparkan oleh prosedur Sub
.
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 Async
Function
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_Click
Sub
harus ditentukan dengan peubah Async
karena memiliki ekspresi Await
.
' 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
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk