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:

    Lihat Tingkat akses di Visual Basic.

  • proceduremodifiers

    Opsional. Bisa jadi salah satu dari yang berikut:

  • 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 kunci New. 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 prosedur Sub 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 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>.

AsyncSub prosedur ini terutama digunakan untuk penanganan aktivitas, di mana nilai tidak dapat dikembalikan. Prosedur AsyncSub tidak dapat ditunggu, dan pemanggil prosedur AsyncSub 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 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 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