Exporter (0) Imprimer
Développer tout

Changements dans le langage de Visual Basic .NET 2003

Visual Studio .NET 2003

Duncan Mackenzie
Microsoft Developer Network

Résumé : Duncan Mackenzie présente les changements de langage inclus dans la version 2003 de Visual Basic® .NET.

Sommaire

Introduction
Variables de contrôle de boucle
Portée de la variable
Opérateurs de décalage de bits
Décalage vers la gauche ou vers la droite
Division d'une valeur de fractionnement
Conclusion

Introduction

Avec la derniière version de Visual Basic .NET 2003, deux ajouts ont été faits au langage : la possibilité d'initialiser des variables de contrôle de boucle dans les boucles For/For Each et deux nouveaux opérateurs de décalage de bits. Aucun changement au langage risquant de rompre la compatibilité avec la version d'origine de Visual Basic .NET n'a été effectué.

Variables de contrôle de boucle

Les boucles For et For Each requièrent chacune des variables de contrôle qui représentent l'index de la boucle, dans le cas de la boucle For, ou sont constituées d'un élément d'une expression, dans le cas d'une loupe For Each. Dans les versions précédentes de Visual Basic .NET (et les versions pré-.NET de Visual Basic), ces variables de contrôle devaient être déclarées avant de pouvoir être utilisées dans l'instruction de boucle. Un exemple de déclaration et d'utilisation d'une variable de contrôle dans les boucles For et For Each est illustré dans la liste suivante.

Dim counter As Integer
For counter = 0 To 10
 Console.WriteLine(counter)
Next
Dim drive As String
For Each drive In Environment.GetLogicalDrives()
 Console.WriteLine(drive)
Next

Désormais, grâce aux changements apportés au langage de Visual Basic .NET 2003, vous pouvez déclarer votre variable de contrôle comme partie intégrante de l'instruction de boucle. Un exemple de la syntaxe est illustré ci-dessous pour une simple boucle For avec une variable de contrôle d'entiers incrémentée de 0 à 10.

For counter As Integer = 0 To 10
 Console.WriteLine(counter)
Next

La syntaxe de l'instruction For Each est presque identique, à l'exception du type d'une boucle For, qui doit être un numérique primitif (Byte, Short, Integer, Long, Decimal, Single ou Double), alors que dans une boucle For Each, le type est dépendant de l'expression spécifique via laquelle il est énuméré.

For Each drive As String In Environment.GetLogicalDrives()
 Console.WriteLine(drive)
Next

Portée de la variable

Cette nouvelle variable de contrôle, si elle est définie dans l'instruction For/For Each, s'étend au bloc de boucle, ce qui la rend inaccessible en dehors de ce bloc de code. La portée de cette nouvelle variable signifie que si vous devez accéder à la variable de contrôle de la boucle en dehors de boucle elle-même, vous devrez alors utiliser la méthode préexistante, en définissant votre variable avant de l'utiliser dans l'instruction For ou For Each. Par exemple, le code suivant se compile correctement et émet une valeur 11 sur la console :

Dim counter As Integer
For counter = 0 To 10
 'do nothing
Next
Console.WriteLine(counter)

La variable de contrôle aurait également pu être définie comme partie intégrante de l'instruction For. Dans ce cas, elle aurait été hors de portée, une fois la boucle For terminée. Le code ci-dessous ne se compile même pas, étant donné qu'il entraîne une erreur « Name 'counter' is not declared. » sur la dernière ligne.

For counter As Integer = 0 To 10
 'do nothing
Next
Console.WriteLine(counter)

Cette nouvelle fonctionnalité de langage offre deux avantages. Pratique et représentant un gain de temps pour les développeurs, elle crée également un code plus propre, car les variables de contrôle sont définies sur la portée la plus spécifique possible et sont par conséquent solidement associées à la boucle appropriée.

Opérateurs de décalage de bits

Il est possible d'écrire des programmes à vie sans jamais avoir recours à un opérateur de décalage de bits, mais si vous êtes chargé de la programmation mathématique, telle que la cryptographie ou les graphiques, vous les utiliserez alors probablement très souvent. Outre son utilisation en mathématiques complexes, le décalage de bits est souvent utilisé avec du code ancien, y compris avec l'API Win32, étant donné que les développeurs prennent un type de données volumineuses unique, tel qu'une valeur entière à 32 bits, et utilisent cet espace pour stocker plusieurs valeurs, telles que deux valeurs à 16 bits.

Décalage vers la gauche ou vers la droite

Il existe deux opérateurs :

  • << pour le décalage d'un nombre de bits spécifique vers la gauche (vers les bits de poids fort)
  • >> pour un décalage vers la droite.

Si une opération de décalage entraîne la sortie de certains bits hors d'un type de données sous-jacent, ces bits sont supprimés. Les places de bits vides créées par l'opération de décalage sont toujours renseignées par des 0 lors d'un décalage vers la gauche et lors d'un décalage positif vers la droite. Si un nombre négatif de places de bits est requis dans une opération de décalage vers la droite (myNumber >> -4), les places de bits libérés sont renseignées par un 1.

Le diagramme suivant illustre ce qui se produit lorsqu'un entier à 16 bits est décalé de quatre places vers la droite. Les bits de poids faible sont supprimés et les positions des quatre bits de poids fort sont renseignées par un 0.

Le décalage requiert le renseignement des places de bits vides

Figure 1. Le décalage requiert le renseignement des places de bits vides

La Figure 1 correspond au code Visual Basic .NET suivant :

Dim originalValue, newValue As Int16
originalValue = 21282
newValue = originalValue >> 4
Console.WriteLine(newValue)

Vous trouverez davantage d'informations sur le fonctionnement spécifique de ces opérateurs dans le Guide de référence du langage Visual Basic .NET, qui fait partie du .NET Framework SDK fourni avec Visual Basic .NET 2003. Si vous recherchez un guide de référence plus général sur le concept du décalage de bits, consultez ce didacticiel en ligne. Ce dernier est conçu pour la programmation de jeux, mais les concepts sont identiques, quel que soit le but d'utilisation de cette technique.

Division d'une valeur de fractionnement

Comme je l'ai mentionné plus haut, le décalage de bits a été notamment utilisé pour communiquer avec du code dans lequel une valeur unique, telle qu'un entier à 32 bits, a été utilisée pour stocker deux ou plusieurs valeurs indépendantes. Il s'agissait d'une technique relativement commune à un moment donné et qui est même considérablement utilisé avec l'API Win32. Dans le code ci-dessous, j'utilise le décalage de bits pour diviser une valeur (couleur) RVB. Les valeurs RVB sont stockées comme trois valeurs à 8 bits, conduisant à une couleur à 24 bits et correspondant respectivement au rouge, au vert et au bleu.

Les valeurs RVB correspondent à trois octets (valeurs à 8 bits) associés entre elles en une valeur unique à 24 bits

Figure 2. Les valeurs RVB correspondent à trois octets (valeurs à 8 bits) associés entre elles en une valeur unique à 24 bits

Pour retirer ces trois valeurs (rouge, vert et bleu) le plus efficacement possible, utilisez les deux opérations binaires différentes. La première est un masquage de bits, associant une valeur binaire à une autre pour isoler les bits spécifiques qui nous intéressent. Dans Visual Basic .NET, cette opération est possible en utilisant le mot-clé AND. Une fois les bits appropriés masqués, nous pouvons utiliser le décalage de bits pour les déplacer dans les huit bits de poids faible de notre valeur.

Dim myFavoriteColor As Integer = 16773077
Dim R, G, B As Byte
R = myFavoriteColor >> 16
G = (myFavoriteColor And &HFF00) >> 8
B = (myFavoriteColor And &HFF)

Pour la valeur bleue, nous pouvons tout simplement procéder au masquage avec la valeur hexadécimale FF, afin que seuls les 8 premiers bits soient inclus dans le résultat du masque, générant 213 ou D5 en hexadécimal. Pour la valeur verte, nous procédons au masquage avec FF00, pour inclure uniquement les huit bits de poids moyen, puis effectuer un décalage de bits vers huit autres positions pour obtenir un résultat (239/EF). Pour la valeur rouge, aucun masquage n'est requis ; le simple décalage de seize places force la suppression des seize bits de poids faible et nous obtenons notre octet rouge (255 ou FF).

Remarque   Avant que Visual Basic n'inclue des opérateurs de décalage de bits, vous pouviez effectuer les mêmes calculs avec des multiplications et des divisions (diviser par 2^16 équivaut à un décalage de bits de seize places vers la droite et multiplier par 2^16 équivaut à un décalage de bits de seize places vers la gauche). Cependant, le décalage de bits est une méthode beaucoup plus rapide pour obtenir les mêmes résultats. J'ai effectué un test rapide en comparant le code ci-dessus à la même routine écrite avec une division et j'ai noté que le décalage de bits était environ cinq fois plus rapide dans ce cas.

J'ai choisi les valeurs RVB comme exemple car il s'agit d'une conversion relativement courante. Cependant, il est à noter que si votre valeur d'origine est en fait une valeur de couleur Win32, une valeur de couleur OLE ou une chaîne de couleur HTML (d'une page Web), vous pouvez utiliser les méthodes de la classe System.Drawing.ColorTranslator Quitter le site MSDN France Site en anglais pour éviter de faire la conversion manuellement.

Dim myFavoriteColor As System.Drawing.Color
myFavoriteColor = System.Drawing.ColorTranslator.FromHtml("#FFEFD5")

L'ajout d'un décalage de bits au langage vient compléter la série d'opérateurs binaires de Visual Basic et simplifie un grand nombre de calculs mathématiques que vous pourriez avoir à effectuer.

Conclusion

Visual Basic .NET 2003 n'inclut pas de grands changements pour le langage sous-jacent. Il ne s'agit que d'ajouts pratiques à une série de fonctionnalités déjà solide. Pour obtenir davantage d'informations sur le langage Visual Basic, consultez l'intégralité de la spécification dans la documentation .NET Framework SDK. La spécification n'inclut pas encore ces deux nouvelles fonctionnalités de Visual Basic .NET 2003, mais cela ne saurait tarder.



Dernière mise à jour le lundi 19 mai 2003



Pour en savoir plus
Afficher:
© 2014 Microsoft