Pernyataan Fungsi (Visual Basic)
Mendeklarasikan nama, parameter, dan kode yang menentukan prosedur Function
.
Sintaks
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Generator
attributelist
Opsional. Lihat Daftar Atribut.
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.
Iterator
Opsional. Lihat Iterator.
name
Harus diisi. Nama prosedur. Lihat Nama Elemen yang Dideklarasikan.
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.
returntype
Diperlukan jika
Option Strict
adalahOn
. Jenis data nilai yang dikembalikan oleh prosedur ini.Implements
Opsional. Menunjukkan bahwa prosedur ini menerapkan satu atau lebih prosedur
Function
, masing-masing ditentukan dalam antarmuka yang diterapkan oleh prosedur ini yang berisi kelas atau struktur. Lihat Pernyataan Implements.implementslist
Diperlukan jika
Implements
diberikan. Daftar prosedurFunction
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 yang akan dijalankan dalam prosedur ini.
End Function
Mengakhiri definisi prosedur ini.
Keterangan
Semua kode yang dapat dieksekusi harus berada di dalam prosedur. Setiap prosedur, pada gilirannya, dinyatakan dalam kelas, struktur, atau modul yang disebut sebagai kelas, struktur, atau modul yang berisi.
Untuk mengembalikan nilai ke kode panggilan, gunakan prosedur Function
; jika tidak, gunakan prosedur Sub
.
Menentukan Fungsi
Anda hanya dapat menentukan prosedur Function
di tingkat modul. Oleh karena itu, konteks deklarasi untuk fungsi 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 Function
default ke akses publik. Anda dapat menyesuaikan tingkat aksesnya dengan pengubah akses.
Prosedur Function
dapat mendeklarasikan jenis data nilai yang dikembalikan prosedur. Anda dapat menentukan jenis data apa pun atau nama enumerasi, struktur, kelas, atau antarmuka. Jika Anda tidak menentukan parameter returntype
, prosedur akan mengembalikan Object
.
Jika prosedur ini menggunakan kata kunci Implements
, kelas atau struktur yang berisi juga harus memiliki pernyataan Implements
yang segera mengikuti pernyataan Class
atau Structure
. Pernyataan Implements
harus menyertakan setiap antarmuka yang ditentukan dalam implementslist
. Namun, nama di mana antarmuka mendefinisikan Function
(dalam definedname
) tidak perlu cocok dengan nama prosedur ini (dalam name
).
Catatan
Anda dapat menggunakan ekspresi lambda untuk menentukan ekspresi fungsi sebaris. Untuk informasi selengkapnya, lihat Ekspresi Fungsi dan Ekspresi Lambda.
Mengembalikan dari Fungsi
Ketika prosedur Function
kembali ke kode panggilan, eksekusi berlanjut dengan pernyataan yang mengikuti pernyataan yang memanggil prosedur.
Untuk mengembalikan nilai dari fungsi, Anda dapat menetapkan nilai ke nama fungsi atau menyertakannya dalam pernyataan Return
.
Pernyataan Return
secara bersamaan menetapkan nilai pengembalian dan keluar dari fungsi, seperti yang ditunjukkan contoh berikut.
Function MyFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Contoh berikut menetapkan nilai pengembalian ke nama fungsi myFunction
, lalu menggunakan pernyataan Exit Function
untuk kembali.
Function MyFunction(ByVal j As Integer) As Double
MyFunction = 3.87 * j
Exit Function
End Function
Pernyataan Exit Function
dan Return
menyebabkan keluar cepat dari prosedur Function
. Sejumlah pernyataan Exit Function
dan Return
dapat muncul di mana saja dalam prosedur, dan Anda dapat mencampur pernyataan Exit Function
dan Return
.
Jika Anda menggunakan Exit Function
tanpa menetapkan nilai ke name
, prosedur mengembalikan nilai default untuk jenis data properti di returntype
. Jika returntype
tidak ditentukan, prosedur mengembalikan Nothing
, yang merupakan nilai default untuk Object
.
Memanggil Fungsi
Anda memanggil prosedur Function
dengan menggunakan nama prosedur, diikuti dengan daftar argumen dalam tanda kurung, dalam ekspresi. 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.
Anda memanggil prosedur Function
dengan cara yang sama seperti Anda memanggil fungsi pustaka apa pun seperti Sqrt
, Cos
, atau ChrW
.
Anda juga dapat memanggil fungsi dengan menggunakan kata kunci Call
. Dalam hal ini, nilai yang dikembalikan diabaikan. Penggunaan kata kunci Call
tidak direkomendasikan dalam banyak kasus. Untuk informasi selengkapnya, lihat Memanggil Pernyataan.
Visual Basic terkadang menyusun ulang ekspresi aritmetika untuk meningkatkan efisiensi internal. Untuk alasan tersebut, Anda tidak boleh menggunakan prosedur Function
dalam ekspresi aritmetika saat fungsi mengubah nilai variabel dalam ekspresi yang sama.
Fungsi Asinkron
Fitur Asinkron memungkinkan Anda untuk menjalankan fungsi asinkron tanpa menggunakan panggilan balik eksplisit atau secara manual memisahkan kode Anda di beberapa fungsi atau ekspresi lambda.
Jika Anda menandai fungsi dengan peubah Asinkron, Anda dapat menggunakan operator Menunggu dalam fungsi tersebut. Saat kontrol mencapai ekspresi Await
dalam fungsi Async
, kontrol kembali ke pemanggil, dan kemajuan dalam fungsi ditangguhkan hingga tugas yang ditunggu selesai. Saat tugas selesai, eksekusi dapat dilanjutkan dalam metode.
Catatan
Prosedur Async
kembali ke pemanggil ketika bertemu dengan objek pertama yang ditunggu yang belum selesai, atau sampai ke akhir prosedur Async
, mana yang lebih dulu.
Fungsi Async
dapat memiliki jenis pengembalian Task<TResult> atau Task. Contoh fungsi Async
yang memiliki jenis Task<TResult> pengembalian disediakan di bawah ini.
Fungsi Async
tidak dapat mendeklarasikan parameter ByRef apa pun.
Pernyataan Sub juga dapat ditandai dengan peubah Async
. 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
.
Untuk informasi selengkapnya tentang fungsi Async
, lihat Pemrograman Asinkron dengan Asinkron dan Tunggu, Alur Kontrol Dalam Program Asinkron, dan Jenis Pengembalian Asinkron.
Fungsi Iterator
iterator melakukan perulangan kustom pada koleksi, seperti daftar atau larik. Iterator menggunakan pernyataan Hasil untuk mengembalikan setiap elemen satu per satu. Saat pernyataan Hasil tercapai, lokasi saat ini dalam kode diingat. Eksekusi dimulai ulang dari lokasi tersebut pada saat fungsi iterator dipanggil.
Anda memanggil iterator dari kode klien dengan menggunakan pernyataan For Each…Next.
Jenis pengembalian iterator dapat berupa IEnumerable, IEnumerable<T>, IEnumerator, atau IEnumerator<T>.
Untuk informasi selengkapnya, lihat Iterator.
Contoh 1
Contoh berikut menggunakan pernyataan Function
untuk mendeklarasikan nama, parameter, dan kode yang membentuk isi prosedur Function
. Peubah ParamArray
memungkinkan fungsi untuk menerima jumlah variabel argumen.
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
Contoh 2
Contoh berikut memanggil fungsi yang dideklarasikan dalam contoh sebelumnya.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
End Module
Contoh 3
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
perlu memiliki jenis pengembalian Task(Of Integer)
. Karena jenis pengembalian adalah Task(Of Integer)
, evaluasi ekspresi Await
dalam DoSomethingAsync
menghasilkan bilangan bulat. Ini ditunjukkan dalam pernyataan ini: Dim result As Integer = Await delayTask
.
Prosedur startButton_Click
ini adalah contoh prosedur Async Sub
. Karena DoSomethingAsync
adalah fungsi Async
, tugas untuk panggilan 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