[VB.NET]While statement

Pagina: 1
Acties:

  • mr_taipan
  • Registratie: Februari 2002
  • Laatst online: 03-12-2024
Ik heb een vraag over de volgende code:

Visual Basic:
1
2
3
4
5
         If lijn.Count > 0 Then
                    While (lijn.Count > 0) And (lijn(lijn.Count - 1).Y = 240)
                        lijn.RemoveAt(lijn.Count - 1)
                    End While
         End If


Deze code crashed als alle elementen in array lijn een Y van 240 hebben

Ik dacht dat ik ooit eens ergens geleerd had dat als term a in een while constructie al tot false evalueert
de tweede term niet beschouwd word als alle termen waar moeten zijn zoals in het stukje voorbeeld code.

Dat VB.Net het niet op die manier doet is duidelijk. maar wat ik mij afvraag is of ik iets geleerd heb wat helemaal niet zo is of dat er slimmere talen zijn / de vb compiler brak is.

Verwijderd

Hoe het zit met VB.NET weet ik niet (niet mijn taal), maar het is inderdaad zo dat sommige talen bij de eerste conditie er al uit knallen indien deze onwaar is en andere talen het hele riedeltje doen. Hier is ook nog een mooie naam voor die me nu zo even is ontschoten. Maar die weet vast iemand anders op dit forum zo even te posten.

Edit: en DrClearbottom gaat door voor de koelkast met zijn antwoord "short-circuit evaluation". Dat was hem inderdaad

[ Voor 17% gewijzigd door Verwijderd op 21-06-2007 15:28 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
Was dat niet AndAlso ipv AND?

edit: de term was geloof ik short-circuit evaluation

[ Voor 49% gewijzigd door Daspeed op 21-06-2007 15:17 . Reden: Toevoeging ]


  • mr_taipan
  • Registratie: Februari 2002
  • Laatst online: 03-12-2024
_/-\o_

Thx ik wist dat het er was en AndAlso werkt ook uitstekend!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Het gaat hier om een conditional operator, of een short-circuiting operator. In C# heb je bijvoorbeeld de & (normale and) en de && (conditional and). Deze laatste stop de evaluatie als de eerste expressie al false retourneert.

Voor zover ik weet is er in VB .Net niet een dergelijke and operator beschikbaar.

edit:
spuit 11... 8)7.

[ Voor 11% gewijzigd door OZ-Gump op 21-06-2007 15:25 ]

My personal website


  • MacWolf
  • Registratie: Januari 2004
  • Laatst online: 06-09-2024
Verwijderd schreef op donderdag 21 juni 2007 @ 15:14:
Hoe het zit met VB.NET weet ik niet, maar het is inderdaad zo dat sommige talen bij de eerste conditie er al uit knallen indien deze onwaar is en andere talen het hele riedeltje doen. Hier is ook nog een mooie naam voor die me nu zo even is ontschoten. Maar die weet vast iemand anders op dit forum zo even te posten.

Edit: en DrClearbottom gaat door voor de koelkast met zijn antwoord "short-circuit evaluation". Dat was hem inderdaad
In VB.NET kun je de constructie AndAlso gebruiken. Op die manier wordt alleen het 2e gedeelte gecontroleerd als het 1e gedeelte correct is.

Voorbeeld:
Visual Basic .NET:
1
2
3
4
5
If lijn.Count > 0 Then
   While (lijn.Count > 0) AndAlso (lijn(lijn.Count - 1).Y = 240)
      lijn.RemoveAt(lijn.Count - 1)
   End While
End If


Laat maar, al beantwoord :)

[ Voor 5% gewijzigd door MacWolf op 21-06-2007 15:28 ]

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition.


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Overigens kun je het eerste if block weglaten, omdat die vergelijking ook in de while loop wordt gedaan. Naast de AndAlso (&& in c#) heb je ook nog OrElse (|| in c#).

If it isn't broken, fix it until it is..

Pagina: 1