Inferensi Jenis Lokal (Visual Basic)

Pengompilasi Visual Basic menggunakan inferensi jenis untuk menentukan jenis data variabel lokal yang dideklarasikan tanpa klausul As. Pengompilasi menyimpulkan jenis variabel dari jenis ekspresi inisialisasi. Ini memungkinkan Anda untuk mendeklarasikan variabel tanpa secara eksplisit menyatakan jenis, seperti yang ditunjukkan dalam contoh berikut. Sebagai hasil dari deklarasi, baik num1 dan num2 diketik dengan kuat sebagai bilangan bulat.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub

Catatan

Jika Anda tidak ingin num2 dalam contoh sebelumnya diketik sebagai Integer, Anda dapat menentukan jenis lain dengan menggunakan deklarasi seperti Dim num3 As Object = 3 atau Dim num4 As Double = 3.

Catatan

Inferensi jenis hanya dapat digunakan untuk variabel lokal non-statis; tidak dapat digunakan untuk menentukan jenis bidang kelas, properti, atau fungsi.

Inferensi jenis lokal berlaku pada tingkat prosedur. Ini tidak dapat digunakan untuk mendeklarasikan variabel pada tingkat modul (dalam kelas, struktur, modul, atau antarmuka tetapi tidak dalam prosedur atau blok). Jika num2 dalam contoh sebelumnya adalah bidang kelas alih-alih variabel lokal dalam prosedur, deklarasi akan menyebabkan kesalahan dengan Option Strict aktif, dan akan diklasifikasikan num2 sebagai Object dengan Option Strict nonaktif. Demikian pula, inferensi jenis lokal tidak berlaku untuk variabel tingkat prosedur yang dinyatakan sebagai Static.

Inferensi Ketik vs. Pengikatan Lambat

Kode yang menggunakan inferensi jenis menyerupai kode yang bergantung pada pengikatan lambat. Namun, inferensi ketik mengetik dengan kuat variabel daripada membiarkannya sebagai Object. Pengompilasi menggunakan penginisialisasi variabel untuk menentukan jenis variabel pada waktu kompilasi untuk menghasilkan kode terikat awal. Dalam contoh sebelumnya, num2, seperti num1, di ketik sebagai Integer.

Perilaku variabel terikat awal berbeda dari variabel yang terlambat terikat, yang jenisnya hanya diketahui pada durasi. Mengetahui jenisnya lebih awal memungkinkan pengompilasi mengidentifikasi masalah sebelum eksekusi, mengalokasikan memori dengan tepat, dan melakukan pengoptimalan lainnya. Pengikatan awal juga memungkinkan integrated development environment (IDE) Visual Basic untuk memberikan IntelliSense Help tentang anggota objek. Pengikatan awal juga lebih disukai untuk performa. Ini karena semua data yang disimpan dalam variabel yang terlambat terikat harus dibungkus sebagai jenis Object, dan mengakses anggota jenis pada durasi membuat program lebih lambat.

Contoh

Inferensi jenis terjadi ketika variabel lokal dinyatakan tanpa klausul As dan diinisialisasi. Pengompilasi menggunakan jenis nilai awal yang ditetapkan sebagai jenis variabel. Misalnya, masing-masing baris kode berikut mendeklarasikan variabel jenis String.

' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"

Kode berikut menunjukkan dua cara yang setara untuk membuat larik bilangan bulat.

' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}

Lebih mudah untuk menggunakan inferensi jenis untuk menentukan jenis variabel kontrol perulangan. Dalam kode berikut, pengompilasi menyimpulkan bahwa number adalah Integer karena someNumbers2 dari contoh sebelumnya adalah larik bilangan bulat.

Dim total = 0
For Each number In someNumbers2
    total += number
Next

Inferensi jenis lokal dapat digunakan dalam pernyataan Using untuk menetapkan jenis nama sumber daya, seperti yang ditunjukkan contoh berikut.

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource.
End Using

Jenis variabel juga dapat disimpulkan dari nilai fungsi yang dikembalikan, seperti yang ditunjukkan contoh berikut. Baik pList1 dan pList2 adalah larik proses karena Process.GetProcesses mengembalikan larik proses.

' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()

Option Infer

Option Infer memungkinkan Anda menentukan apakah inferensi jenis lokal diperbolehkan dalam file tertentu. Untuk mengaktifkan atau memblokir opsi, ketik salah satu pernyataan berikut di awal file.

Option Infer On

Option Infer Off

Jika Anda tidak menentukan nilai untuk Option Infer dalam kode Anda, default pengompilasi adalah Option Infer On.

Jika nilai yang ditetapkan untuk Option Infer dalam file berkonflik dengan nilai yang diatur dalam IDE atau pada baris perintah, nilai yang ada di dalam file memiliki prioritas.

Untuk informasi selengkapnya, lihat Opsi Pernyataan Infer dan Halaman Kompilasi, Project Designer (Visual Basic).

Lihat juga