ProgrammatieJunior VB.NET programmeur

Wat is de juiste organisatie en initialisatie van arrays in Visual Basic, welke nuances zijn er bij het werken met dynamische arrays, en hoe vermijd je fouten bij het gebruik ervan?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

In Visual Basic zijn arrays een structuur van vaste of veranderlijke lengte die elementen van hetzelfde type opslaat. Dynamische arrays vereisen bijzondere aandacht bij initialisatie en grootteveranderingen.

Geschiedenis van de vraag

In VB6 waren er alleen statische en dynamische arrays, met een vaste of veranderlijke grootte. In VB.NET zijn er volledige eendimensionale, multidimensionale en hellende arrays van elk type met typeveiligheid geïmplementeerd.

Probleem

Veelvoorkomende fouten zijn—

  • toegang tot niet-geïnitialiseerde arrays
  • buiten de array-rand gaan
  • verlies van oorspronkelijke gegevens bij het wijzigen van de grootte van een dynamische array zonder Preserve

Oplossing

Initialiseer altijd de array voordat je deze gebruikt en wijzig voorzichtig de grootte:

' Declaratie Dim arr() As Integer ' Initialisatie ReDim arr(4) ' Indexen 0-4 arr(0) = 1 ' Wijziging van grootte met behoud van waarden ReDim Preserve arr(6)

Belangrijke kenmerken:

  • Gebruik ReDim om de grootte van dynamische arrays te wijzigen
  • Het sleutelwoord Preserve behoudt oude waarden bij het wijzigen van de grootte
  • Voor grote of vaak veranderende collecties is het beter om List(Of T) te gebruiken

Misleidende vragen.

Wat gebeurt er als je een array declareert, maar geen initialisatie uitvoert?

Voor eendimensionale arrays van het type Dim arr() As Integer bestaat de variabele, maar de array zelf wordt niet toegewezen, toegang tot arr.Length zal een uitzondering oproepen.

Kan je ReDim Preserve gebruiken om de grootte van een multidimensionale array in beide richtingen te wijzigen?

Nee, ReDim Preserve staat alleen de wijziging van de laatste dimensie toe, anders volgt er een runtime fout.

Wat gebeurt er met de elementen van de array bij het vergroten van de grootte via ReDim Preserve?

Oude waarden worden behouden, en nieuwe elementen krijgen standaardwaarden (bijvoorbeeld 0 voor Integer, Nothing voor referentietypen).

Typische fouten en anti-patronen

  • Niet-geïnitialiseerde array voordat je deze gebruikt
  • Buiten de array-rand gaan bij een loop
  • Veelvuldig gebruik van ReDim Preserve in een loop (verlies van prestaties)

Voorbeeld uit het leven

** Negatieve casus

De array is gedeclareerd, maar niet geïnitialiseerd (Dim arr() As Integer), en bij toegang tot arr.Length krijgen we een NullReferenceException.

Voordelen:

  • Geheugenbesparing tot initialisatie

Nadelen:

  • Moeilijk om het moment van foutopsporing te volgen

** Positieve casus

De array wordt altijd expliciet geïnitialiseerd via ReDim, de grootteverandering gebeurt alleen buiten de hoofdloop, en voor vaak veranderende lijsten wordt List(Of Integer) gebruikt.

Voordelen:

  • Er treden nooit foutieve toegangsfouten op
  • Optimale prestaties

Nadelen:

  • Er is iets meer code nodig voor het beheersen van de arraygrootte en voor het overstappen naar List(Of T) indien nodig