|
Site |
Cours VB.net |
|
|
|
Les constantes, les énumérations. |
|
|
p
Les constantes.
Les énumérations.
Généralisations, énumérations fournies par VB.
Constantes:
Comme les variables, elles ont un nom et un type, mais leurs valeurs sont 'constantes'.
On les déclare par le mot Const, on peut les initialiser en même temps avec =
Exemple :
Const NOMDUPROGRAMME= "LDF" constante de type String (chaîne de caractères).
Const NOMBREDECASE As Integer = 12 constante de type Integer
Ensuite on peut utiliser la constante:
For k= 0 To NOMBREDECASE
...
Next k
Si on utilise: For k=0 To 12, à la lecture c'est moins clair.
Si on écrit: NOMBREDECASE=13 cela déclenche une erreur!!
Habituellement, les constantes sont créées en début de programme.
Il est conseillé par
convention d'écrire le
nom des constantes en majuscules.
Intérêt des constantes ?
-Améliore la lisibilité et évite d'utiliser des constantes littérales:
Il faut éviter:
For i=0 To 100 'A quoi correspond 100?
..
Next i
Il faut écrire
Const NBMAXPATIENT As Integer= 100
For i=0 To NBMAXPATIENT
..
Next i
-Modifications du code facilitées:
Si une constante doit être modifiée ultérieurement, il suffit en mode conception, de modifier sa valeur ce qui modifie sa valeur dans l’ensemble du code de l’application.
Const NBMAXPATIENT As Integer= 200 'Si j'introduis une modification de valeur
For i=0 To NBMAXPATIENT 'Toutes les boucles utilisant NBMAXPATIENT seront à jour
Next i
-Amélioration la vitesse.
Const NBMAXPATIENT As Integer= 100
Dim nombre= NBMAXPATIENT
est plus rapide que:
Dim nbpatient As Integer= 100
Dim nombre= nbpatient
Car le compilateur code directement nombre=20 dans le premier cas.
On rappelle que seuls les types primitifs peuvent avoir des constantes ( Byte, Boolean, Short, Integer, Long, Single, Double, Decimal, Date, Char, String)
Constantes prédéfinies dans le langage:
Les constantes de Visual Basic sont toujours là:
vbOk 'retourné par une MessageBox quand l'utilisateur a cliqué sur Ok.
vbBack
vbCancel
vbCrLf 'caractère numéro 13 (Cr) puis numéro 10 (Lf)
True False:
On rappelle que True et False sont des valeurs Booléens faisant partie intégrante de VB.
Pour les anciens de VB6 ne plus utiliser -1 et 0 (D'ailleurs c'est maintenant 1 et 0).
Mais, en plus, dans Visual Basic .NET, la plupart des constantes sont remplacées par des énumérations.
(Voir plus bas )
Utiliser largement
ces constantes fournies par VB, cela améliore la lisibilité et la maintenance.
Énumération:
Les énumérations sont utilisées lorsque l'on a un jeu de constantes liées logiquement.
Un bloc Enum permet de créer une liste (une énumération) de constantes:
Enum TypeFichier
DOC
RTF
TEXTE
End Enum
Les constantes ainsi créées sont
TypeFichier.DOC
TypeFichier.RTF
TypeFichier.TEXTE
Le bloc Enum doit être dans l'en-tête du module (en haut).
C'est bien pratique car en écrivant le code, dès que je tape TypeFichier. la liste (DOC RTF TEXTE) apparaît.
Ensuite, on peut utiliser dans le programme les constantes créées.
fichierEnCours= TypeFichier.DOC par exemple.
On peut ensuite tester:
If fichierEnCours= TypeFichier.RTF then par exemple.
Il est conseillé par
convention d'écrire le nom des énumérations en minuscules avec la première
lettre en majuscules.
Ce qui suit concernant les énumérations est un peu plus complexe:
Chaque constante littérale de l'énumération a une valeur par défaut.
Par défaut
TypeFichier.Doc =0
TypeFichier.RTF =1
TypeFichier.TEXTE=2
..
La première valeur est 0.
Si on ne spécifie rien, les valeurs sont des Integers
Parfois le nom utilisé dans l'énumération (la constante littérale) est suffisant en soi et on n'utilise pas la valeur : Dans un programme gérant des fichiers, une variable prendra la valeur TypeFichier.Doc pour indiquer qu'on travaille sur les fichiers .DOC. Peu importe la valeur de la constante.
Mais d'autres fois il faut que chaque constante de l'énumération possède une valeur particulière.
Je peux imposer une valeur à chaque constante de l'énumération :
Enum TypeFichier
DOC=2
RTF=4
TEXTE=8
End Enum
Cela évite d'écrire fichierEnCours= 15 (en retenant que 15=fichier doc, 30= fichier rtf...)
Je peux même donner plusieurs valeurs avec And et Or à condition d'utiliser l'attribut Flags.
<Flags()> Enum TypeFichier
DOC=2
RTF=4
TEXTE=8
TOUS= DOC AND RTF AND TEXTE
End Enum
L'attributs <Flags()> indique que les valeurs sont codées en bits, ce qui permet les combinaisons de valeurs. (pour 2 le second bit est à 1, pour 4 le troisième bit est à 1, pour 8, le quatrième bit est à 1...) (voir chapitre sue l'algèbre de Boole.) C'est pour cela qu'on a donné les valeurs 2, 4, 8 et non 1, 2, 3.
Les énumérations sont des types
qui héritent de System.Enum et qui représentent symboliquement un
ensemble de valeurs. Par défaut ses valeurs sont des 'Integer' mais on peut
spécifier d'autres types: Byte, Short, Integer ou Long.
L'exemple suivant déclare une énumération dont le type sous-jacent est Long :
Enum Color
As Long
Red
Green
Blue
End Enum
Habituellement, on utilise les énumérations dans le code, comme des constantes.
Exemple:
Enum TypeFichier
DOC=2
RTF=4
TEXTE=8
End Enum
' affecter à une variable:
Dim
monFichier As TypeFichier = TypeFichier.RTFOn remarque qu'on crée une variable de nom du type énumération dans laquelle on ne peut mettre q'une énumération (en fait un Integer).
' affichage d'une valeur
Console.Out.WriteLine("Numéro type du fichier=" & monFichier)
Affiche: 4
Console.Out.WriteLine("Type du fichier=" & monFichier.ToString)
Affiche: RTF
' test avec la constante de l'énumération
If
(monFichier = TypeFichier.RTF) ThenConsole.Out.WriteLine("C'est du RTF")
End If
Affiche:"C'est du RTF"
Mais parfois on a besoin de récupérer la liste des éléments d'une énumération.
Comment relire la liste des énumérations?
Il faut utiliser une méthode statique (ne nécessitant pas d'instanciation) GetValues pour obtenir toutes les constantes littérales ou valeurs d'un type énuméré que l'on passe en paramètre.
' liste des mentions littérales (Constantes)
For Each
t As TypeFichier In [Enum].GetValues(monFichier.GetType)Console.Out.WriteLine(t.ToString)
Next
' liste des mentions entières (Valeurs)
For Each
t As Integer In [Enum].GetValues(monFichier.GetType)Console.Out.WriteLine(t)
Next
Affiche:
DOC
RTF
TEXTE
2
4
8
Si on affecte un élément d'une énumération à une variable Integer, on récupère la valeur, si on utilise ToString on récupère la constante littérale.
Dim
n As Integern = TypeFichier.RTF
Console.Out.WriteLine(n.ToString)
Dim st As Stringst = TypeFichier.RTF.ToString
Console.Out.WriteLine(st)
Affiche
2
RTF
Comment récupérer dans une énumération une constante à partir de sa valeur ou une valeur à partir de la constante?
Ici il faut instancier:
Dim
s As Type = GetType(TypeFichier)Console.Out.WriteLine(
CType([Enum].GetName(s, 15), String))Console.Out.WriteLine(
CType([Enum].Parse(s, "DOC"), String))
Affiche:
DOC
2
Généralisation de la notion d'énumération:
Noter que VB.Net contient, comme on l'a vu, un tas de constantes classées à l'aide d' Enumération.
ControlChars:
Cette énumération contient les caractères de contrôle.
ControlChars.CrLf Chr$(13)+Chr$(10) qui sert à sauter à la ligne dans une chaîne de caractères :
Si on affiche "VISUAL" & ControlChars.CrLf & "BASIC"
On obtient à l’écran :
VISUAL
BASIC
ControlChars.Tab Chr$(9) = caractère de tabulation
ControlChars.NullChar Aucun caractère
ControlChars.Nothing Chaîne vide
ControlChars.Back
Taper ControlChars. Et comme d’habitude vous obtiendrez la liste des constantes.
Couleurs:
On peut aussi utiliser l'énumération des couleurs définies par le Framework
System.Drawing.Color.Blue Pour le bleu
ou en simplifiant (si Imports System.Drawing a été écrit)
Color.Chocolate
Color.Black
..
Math:
Si Imports System.Math est présent en haut du module,
PI contient 3,14…
E contient la base log naturel
Touche du clavier dans le Framework:
Il est parfois nécessaire de savoir si une touche précise à été tapée par l'utilisateur au clavier, pour cela il faut connaître les touches, mais pas besoin de se souvenir du codes des touches, il suffit de taper Keys. et la liste des touches s'affiche. Cliquer sur le nom de la touche recherchée et vous obtenez la constante correspondant à la touche:
Keys.Right
'Désigne le code de la touche '->'Keys.D8 'Désigne le code de la touche '8'
Keys.Delete 'Désigne le code de la touche 'Suppr'
Keys.D 'Désigne le code de la touche 'D'
Keys.Shift 'Désigne le code de la touche 'Majuscule'
Keys.SnapShot 'Désigne le code de la touche 'Impression écran'
Autre Énumération, un exemple:
Quand on ferme une MessageBox.(une fenêtre qui affiche un message), cela retourne une valeur qui contient:
MsgBoxResult.Yes
MsgBoxResult.No ou
MsgBoxResult.Cancel
En fonction du bouton qu'a utilisé l'utilisateur pour sortir de la fenêtre MessageBox (appuie sur les boutons Oui, Non, Cancel) .
|
|
|
|
|