ProgrammatieVB.NET ontwikkelaar

Hoe is de Do...Loop-lus geïmplementeerd in Visual Basic, welke varianten van de syntaxis bestaan er en wanneer moet je deze lus gebruiken in plaats van For of While?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

De Do...Loop-lus maakt het mogelijk om een blok code met meer flexibele beëindigingsvoorwaarden te herhalen dan For (dat is gericht op een teller) of While (waar de voorwaarde altijd aan het begin wordt gecontroleerd). In Visual Basic zijn er vier hoofdzakelijke varianten van notatie:

' Controle aan het begin Do While condition ' Lichaam van de lus Loop ' Controle aan het einde Do ' Lichaam van de lus Loop While condition ' Evenzo met Until: Do Until condition ' Lichaam van de lus Loop Do ' Lichaam van de lus Loop Until condition

Gebruik Do...Loop als:

  • Het exacte aantal iteraties onbekend is
  • De beëindigingsvoorwaarde afhangt van interne handelingen van de lus (bijvoorbeeld het lezen uit een bestand of van de console)

Vrag met een valstrik.

Vraag: Wat gebeurt er als de voorwaarde condition in de lus Do While condition aanvankelijk onwaar is? Wordt er zelfs maar één keer het lichaam van de lus uitgevoerd?

Antwoord: Nee, het lichaam van de lus wordt helemaal niet uitgevoerd, omdat de controle VOOR de eerste uitvoering plaatsvindt.

Voorbeeld:

Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' Er zal geen regel worden weergegeven.

Voorbeelden van echte fouten door gebrek aan kennis over de nuances van het onderwerp.


Geschiedenis

Tijdens de data parsing fase gebruikte de ontwikkelaar een lus Do Until reader.EndOfStream waarin een regel uit het bestand werd gelezen. Maar omdat EndOfStream pas waar wordt na een poging om buiten het bestand te lezen, werd de laatste regel niet verwerkt. De juiste manier: gebruik Do While Not reader.EndOfStream of verwerk regel voor regel en beëindig de lus op basis van de EOF-voorwaarde.


Geschiedenis

Bij de migratie van code van For naar Do...Loop werd een lus geïmplementeerd zonder expliciete incremente van de teller binnen het lichaam. Als gevolg daarvan ging het programma in een oneindige lus, omdat de beëindigingsvoorwaarde nooit werd bereikt. Het is altijd nodig om de wijziging van sleutelvariabelen binnen het lichaam van de Do...Loop te controleren.


Geschiedenis

In een van de rapportagesubsystemen gebruikte de programmeur geneste Do...Loop-lussen zonder rekening te houden met de geneste voorwaarden van Exit Do: de interne Exit Do verliet alleen de binnenste lus, niet beide. Een kortdurende blokkering bug werd alleen in productie ontdekt bij grote datavolumes.