Iterator (Visual Basic)
Menentukan bahwa fungsi atau aksesor Get
adalah iterator.
Keterangan
Iterator melakukan iterasi kustom pada koleksi. Iterator menggunakan pernyataan Yield untuk mengembalikan setiap elemen dalam koleksi satu per satu. Saat pernyataan Yield
tercapai, lokasi saat ini dalam kode dipertahankan. Eksekusi dimulai ulang dari lokasi tersebut pada saat berikutnya ketika fungsi iterator tersebut dipanggil.
Iterator dapat diimplementasikan sebagai fungsi atau sebagai pengakses Get
definisi properti. Pengubah Iterator
muncul dalam deklarasi fungsi iterator atau aksesor Get
.
Anda memanggil iterator dari kode klien dengan menggunakan pernyataan For Each…Next.
Jenis pengembalian funsi iterator atau pengakses Get
dapat berupa IEnumerable, IEnumerable<T>, IEnumerator, atau IEnumerator<T>.
Iterator tidak dapat memiliki parameter ByRef
apa pun.
Iterator tidak dapat terjadi dalam suatu peristiwa, konstruktor instans, konstruktor statik, atau destruktor statik.
Iterator bisa menjadi fungsi anonim. Untuk informasi selengkapnya, lihat Iterator.
Penggunaan
Pengubah Iterator
dapat digunakan dalam konteks ini:
Contoh 1
Contoh berikut menunjukkan fungsi iterator. Fungsi iterator memiliki pernyataan Yield
yang ada di dalam pengulangan For...Next. Setiap iterasi isi pernyataan For Each dalam Main
membuat panggilan ke fungsi iterator Power
. Setiap panggilan ke fungsi iterator berlanjut ke eksekusi pernyataan Yield
berikutnya, yang terjadi selama iterasi pengulangan For…Next
berikutnya.
Sub Main()
For Each number In Power(2, 8)
Console.Write(number & " ")
Next
' Output: 2 4 8 16 32 64 128 256
Console.ReadKey()
End Sub
Private Iterator Function Power(
ByVal base As Integer, ByVal highExponent As Integer) _
As System.Collections.Generic.IEnumerable(Of Integer)
Dim result = 1
For counter = 1 To highExponent
result = result * base
Yield result
Next
End Function
Contoh 2
Contoh berikut menunjukkan aksesor Get
yang merupakan iterator. Pengubah Iterator
berada dalam deklarasi properti.
Sub Main()
Dim theGalaxies As New Galaxies
For Each theGalaxy In theGalaxies.NextGalaxy
With theGalaxy
Console.WriteLine(.Name & " " & .MegaLightYears)
End With
Next
Console.ReadKey()
End Sub
Public Class Galaxies
Public ReadOnly Iterator Property NextGalaxy _
As System.Collections.Generic.IEnumerable(Of Galaxy)
Get
Yield New Galaxy With {.Name = "Tadpole", .MegaLightYears = 400}
Yield New Galaxy With {.Name = "Pinwheel", .MegaLightYears = 25}
Yield New Galaxy With {.Name = "Milky Way", .MegaLightYears = 0}
Yield New Galaxy With {.Name = "Andromeda", .MegaLightYears = 3}
End Get
End Property
End Class
Public Class Galaxy
Public Property Name As String
Public Property MegaLightYears As Integer
End Class
Untuk contoh tambahan, lihat Iterator.
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