Pourquoi ne pas utiliser For Each
? De cette façon, vous n'avez pas besoin de vous soucier de ce que sont les LBound
et UBound
.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Dans le code ci-dessous
For i = LBound(arr) To UBound(arr)
Quel est l'intérêt de demander en utilisant LBound
? C'est sûrement toujours 0.
Pourquoi ne pas utiliser For Each
? De cette façon, vous n'avez pas besoin de vous soucier de ce que sont les LBound
et UBound
.
Dim x, y, z
x = Array(1, 2, 3)
For Each y In x
z = DoSomethingWith(y)
Next
Il y a une bonne raison de NE PAS UTILISER For i = LBound(arr) To UBound(arr)
dim arr(10)
alloue onze membres du tableau, de 0 à 10 (en supposant la base d'options par défaut de VB6).
De nombreux programmeurs VB6 supposent que le tableau est basé sur un et n'utilisent jamais le arr(0)
alloué. Nous pouvons supprimer une source potentielle de bogues en utilisant For i = 1 To UBound(arr)
ou For i = 0 To UBound(arr)
, car il est alors clair si arr(0)
est utilisé.
For each
fait une copie de chaque élément du tableau, plutôt qu'un pointeur.
Cela pose deux problèmes.
Lorsque nous essayons d'attribuer une valeur à un élément de tableau, cela ne reflète pas l'original. Ce code attribue une valeur de 47 à la variable i
, mais n'affecte pas les éléments de arr
.
arr = Tableau(3,4,8) pour chaque i dans arr je = 47 ensuite je Response.Write arr(0) '- renvoie 3, pas 47
Nous ne connaissons pas l'index d'un élément de tableau dans un for each
, et nous ne sommes pas garantis de la séquence des éléments (bien qu'elle semble être dans l'ordre.)
LBound
peut ne pas toujours être 0.
Bien qu'il ne soit pas possible de créer un tableau qui ait autre chose qu'une limite inférieure de 0 dans VBScript, il est toujours possible de récupérer un tableau de variantes à partir d'un composant COM qui peut avoir spécifié un 1 différent code>.
Cela dit, je n'en ai jamais rencontré qui ait fait quelque chose comme ça.