Cours VB.NETDate de mise à jour : 05/12/2010
V-K. Type valeur ou référence
V-K-1. La variable 'par Valeur'
V-K-2. La variable 'par Référence'
V-K-3. Influence sur l''Affectation'
V-K-4. Copie d'objet By Ref: exemple des Tableaux
V-K-5. Le cas particulier des 'String'.
V-K-6. Déclaration avec New ?
V-K-7. Valeur après déclaration
V-K-8. Comparaison
V-K-9. IsReference
V-L. Variable 'Object' et autre type
V-L-1. Le Type 'Object'
V-L-1-a. Comment utiliser les propriétés d'un objet ?
V-L-1-b. Comparaison d'objets
V-L-1-c. Nothing
V-L-2. Les variables d'autres types
V-L-3. Utilisez donc des variables le plus typées possible
V-L-4. Attention quand on met un objet dans une variable objet
V-M. Variable Booléenne
V-M-1. Introduction
V-M-2. Les booléens
V-M-3. Les conditions
V-M-4. Les opérateurs logiques
V-N. Soyons strict et explicite (et Compare et Infer ?)
V-N-1. Notion de conversion Explicite et Implicite
V-N-2. Comment modifier une option ?
V-N-3. Option Strict
V-N-3-a. Conversions implicites
V-N-3-b. Conversions String-numérique
V-N-3-c. Liaisons tardives
V-N-3-d. VB rapide ?
V-N-4. Option Explicit
V-N-5. Option strict et Explicit dans un module
V-N-6. Option Compare
V-N-7. Option Infer
V-K. Type valeur ou référence
Résumons la notion très importante de variable 'par valeur' ou 'par référence'.
Un type de données est un type valeur s'il contient des données dans l'espace qui lui est alloué en mémoire. Un type référence contient un pointeur vers un autre emplacement en mémoire contenant les données.(dixit MicroSoft)
V-K-1. La variable 'par Valeur'
Contient réellement une valeur.
Prenons pour exemple une variable de type 'Long'.
'L' occupe 8 octets nécessaires pour coder un long, ici L a une valeur de 1456, donc dans ces 8 octets il est codé 1456.
Sont des variables par 'Valeur' :
- Les Integer, les Long les Short ;
- Les Single, Double, Decimal ;
- Les Booleans, Char, Date ;
- Les Structures ;
- Les énumérations.
V-K-2. La variable 'par Référence'
Elles ne contiennent pas la valeur de l'objet mais son adresse en mémoire, sa référence.
O contient l'adresse de l'objet codée sur 4 octets.
Sont des variables par référence :
- Les Objets ;
- Les Strings ;
- Les tableaux ;
- Les Classes.
V-K-3. Influence sur l''Affectation'
Posons le problème:
Travaillons sur A et B, 2 variables ayant la même 'nature'.
A existant déjà, faisons:
Puis modifions la valeur de A, cela modifie t-il B?
Les variables par Valeur ou par Référence ne réagissent pas de la même manière:
Si le type de variable est par valeur (valable pour les entiers, les Long.. les structures..), chaque variable ayant sa valeur, B n'est pas modifié.
Si le type de variable est par référence (valable pour les tableaux, les objets, les string..), chaque variable est définie par sa référence (son lieu physique); faire A=B entraîne que A et B ont même référence: ils 'pointent' sur le même endroit. Si on modifie A, B est modifié car il pointe au même endroit.
Voyons des exemples:
Même si on affecte une variable par valeur à une autre, les deux variables restent différentes: elles conservent leur propre espace de stockage:
Dim L As Long
Dim P As Long
L= 0
L= P
P= 4
|
=> L=0 P=4 Modifier P n'a pas modifié L.
Par contre si on affecte une variable par référence à une autre, elle pointe toutes les 2 sur le même endroit mémoire: si j'en modifie une, cela modifie l'autre.
Class Class1
Public Value As Integer = 0
End Class
Dim C1 As New Class1 ()
Dim C2 As Class1 = C1
C2. Value = 123
|
=> C1.Value=123 C2.Value=123 Modifier C2 a modifié C1 car elles pointent sur le même endroit mémoire.
V-K-4. Copie d'objet By Ref: exemple des Tableaux
Exemple sur les tableaux qui sont 'Par référence':
Dim A (3) As String
A (1) = " a "
Dim B (3) As String
B (1) = " b "
B = A
A (1) = " c "
Label1. Text () = B (1)
|
Voyons le détail:
B = A
Un tableau est 'par référence' et le fait de faire A=B donne la même adresse mémoire aux 2 tableaux, aussi , modifier l'un modifie l'autre. C'est ce qui se passe dans notre exemple.
Copie élément par élément.
Si on a déclaré 2 tableaux distinct, B(2)= A(2) affecte un élément d'un tableau à un élément d'un autre tableau, cela ne modifie que la valeur d'un élément et n'affecte pas le tableau. Aussi si on veut faire une copie 'indépendante' d'un tableau, il faut le déclarer puis avec une boucle copier chaque élément du tableau dans le nouveau.
B= A.Clone
B= A.Clone copie le tableau A dans B en conservant 2 tableaux distinct. Ensuite, modifier un élément du tableau ne modifie pas l'autre.
V-K-5. Le cas particulier des 'String'.
Elles sont 'Par référence'.
 |
Attention: par contre :
|
Dim A As String
A = " a "
Dim B As String
B = " b "
B = A
A = " c "
Label1. Text () = B
|
Bien que les Strings soit par référence, B=A affecte simplement la valeur de A à B, si on modifie ultérieurement A, B n'est pas modifié. (idem pour clone et copy!!) Pour une string qui est 'par référence', il parait donc impossible de la dupliquer, elle se comporte comme une variable par valeur!!
Pourquoi les String sont 'par référence' et se comportent comme si elles étaient 'par valeur'??
L'opérateur d'affectation "=" de deux strings "A=B" a simplement été
défini de manière restrictive pour les strings. Les créateurs de vb .net
lui ont permis uniquement une copie de la valeur de la string et non de la référence.
Il vaut mieux ne pas permettre l' affectation de la même référence pointant sur le même
objet c'est dangereux pour les débutants et cela serait totalement incompatible avec les versions précédentes..
Ensuite, parce que la copie de la valeur d'une string dans une autre est
une opération extrêmement courante chez les programmeurs. Ce qui n'est
pas le cas de l'affectation de la même référence pointant sur le même
objet.
On dit que les String sont 'Immutable' (Comme System.Nullable?).
En conclusion, rien de choquant dans le fait qu'un type string se comporte
comme un type par valeur: car c'est juste la définition de l'opérateur
d'affectation "=" qui a été redéfinie, et c'est tout. Tout ce qui concerne
l'implémentation du type string est strictement comme tous les types
par référence. (Merci Sabri pour cette explication)
V-K-6. Déclaration avec New ?
En théorie, il faut utiliser New quand on déclare une variable 'par référence':
Il faut écrire:
Dim L As Long
Dim F As New Button
|
En fait
Dim L As New Long
Dim O As Object
Dim S As String
|
Pour les Classes ou les objets graphiques, il faut par contre bien taper New pour créer l'objet:
Si on tape Dim F As Button on crée une référence vide, mais pas d'objet Button.
V-K-7. Valeur après déclaration
Apres création (avant initialisation) une variable numérique 'par Valeur' contient 0,
Par contre une String (par référence) qui a été créée par Dim et non initialisée contient 'Nothing'.
On peut tester par If IsNothing( O ) then.. ou If O Is Nothing..
Pour les tableaux, bien que le tableau soit 'par Référence', c'est le type de variable utilisé dans le tableau qui décide de la valeur des éléments après déclaration.
V-K-8. Comparaison
1-Une variable par Valeur peut être comparée à une autre par "=",
Dim L As Long= 12
Dim P As Long= 24
If L= P Then . .
|
2-Par contre une variable par référence peut être comparée à une autre par "Is".
Dim O As Object
Dim Q As Object
If O Is Q then . .
|
NB: pour les String '=' et 'Is' peuvent être utilisés.
3-Equals peut être utilisé pour comparer les 2 types de données:
ou
Pour les types 'référence', l'égalité est définie comme une égalité d'objets, c'est-à-dire si les références renvoient ou non au même espace mémoire. Pour les types valeur, l'égalité est définie comme une égalité au niveau du bit , autrement dit si la valeur est la même.
V-K-9. IsReference
Il existe une instruction permettant de voir si une variable est de type 'Par référence'.
Cet exemple utilise la fonction IsReference pour vérifier si plusieurs variables font référence à des types référence.
Dim R as Boolean
Dim MyArray (3) As Boolean
Dim MyString As String
Dim MyObject As Object
Dim MyNumber As Integer
R = IsReference (MyArray)
R = IsReference (MyString)
R = IsReference (MyObject)
R = IsReference (MyNumber)
|
V-L. Variable 'Object' et autre type
Il existe un autre type de variable: le type 'Object'.
V-L-1. Le Type 'Object'
Parfois on ne sait pas ce que va contenir une variable: un Integer? une String? un Single?
Pour résoudre ce problème on utilise une variable de type 'Object'.
Cela remplace le type 'Variant' de VB6.
Ensuite:
est accepté, et myObjet sera considéré comme un type Integer.
est accepté, et myObjet sera considéré comme un type Single.
est accepté aussi, et myObjet sera considéré comme un type String.
Les 3 affectations myObjet= peuvent se suivre sans planter, l'objet contenant successivement un type Integer, Single et String.
On rappelle qu'une variable objet est une variable 'Par référence'.
On peut, suite au dernier exemple, récupérer l'objet et le transformer en String.
Dim maString As String
maString= CType (myObjet, String )
|
Comment savoir quel type de variable contient la variable 'Objet'?
Si on fait myObjet.GetType.ToString cela retourne 'System.String' indiquant que myObjet contient bien une String.
myObjet.GetType.Name retourne 'String'
Pour tester si myObjet est une String, il y a une autre manière avec TypeOf Is:
If TypeOf myObjet Is String Then . .
End if
|
 |
Attention, TypeOf Is retourne True aussi pour les Classes d'objet parent.
|
Dim monlabel As New Label
If TypeOf monlabel Is Control Then
|
monlabel est bien un Label mais c'est aussi un Control.(On verra que tous les objet visuel comme Label dérive de la classe Control).
V-L-1-a. Comment utiliser les propriétés d'un objet ?
Comment utiliser les membres des variables String qui sont dans un objet?
Exemple: mettre une string dans une variable Objet, connaître la longueur de la String.
- -Si Option strict=Off (On force VB à ne pas être trop Strict!!! On verra cela plus loin)
Dim myObjet As New Object
myObjet= " VB "
MessageBox. Show (myObjet. length )
|
- -Si Option strict=On (On force VB à ne rien tolérer)
MessageBox.Show(myObjet.length) déclenche une erreur car length n'est pas une propriété des Object.
Il faut convertir l'objet en String et là, on peut utiliser 'Length': il faut écrire simplement:(Merci le forum de developpez.com)
Dim myObjet As New Object
myObjet= " VB "
MessageBox. Show (DirectCast (myObjet, String ). Length . ToString )
|
DirectCase transforme un type de variable en un autre, DirectCase peu'tolérant' car la variable qui reçoit doit être du bon type.
Une autre méthode consiste à transformer par CType le contenu de l'objet vers une variable String, puis à afficher la longueur de cette variable String.
Dim myObjet As New Object
myObjet= " VB "
Dim myString As String
myString = CType (myObjet, String )
MessageBox. Show (myString. Length . ToString )
|
Au départ, VB ne sait pas quel type de variable sera dans l'objet, on ne connaît donc pas les propriétés de la variable; la recherche de la propriété se fait à l'exécution, c'est plus long, de plus les contrôles et vérifications se font à l'exécution.
, cela se nomme une liaison tardive (à éviter).
On évitera donc d'utiliser si possible des variables 'Object'.
Utilisez plutôt des variables typées (des variables String, Integer..) au départ; quand on les utilise, les contrôles et appels sont vérifiés dés le départ, on appelle cela une liaison anticipée ou précoce.
V-L-1-b. Comparaison d'objets
Is permet de savoir si 2 variables object se rapportent à la même instance.
Dim o1 As New Objet = monObjet
Dim o2 As Objet
o2= o1
If o1 Is o2 Then . .
|
V-L-1-c. Nothing
Après:
myObjet contient Nothing, c'est à dire 'Rien': pas de référence à une instance.
Après avoir utiliser myObjet=12
On peut faire myObjet=Nothing.
Lorsque vous assignez Nothing à une variable objet, cette dernière ne fait plus référence à une instance d'objet, elle ne pointe sur rien.
Si la variable avait fait référence à une instance au préalable, l'assignation de Nothing à la variable ne met pas fin à l'instance. L'instance se termine, et les ressources mémoire et système qui lui sont associées sont libérées uniquement lorsque le garbage collector (qui fait le ménage) détecte l'absence de toute référence active restante.
On peut tester si un Objet contient Nothing avec .IsNothing
V-L-2. Les variables d'autres types
On verra que l'interface utilisateur est composée de contrôles, ces contrôles étant des objets, et bien, on peut déclarer une variable de type 'control': bouton, ou textbox ou formulaire.
Dim myButton As New Button
|
Ensuite on peut utiliser les membres de la classe Button.
Autre exemple: créons un TextBox:
Dim myTextBox As New TextBox
|
V-L-3. Utilisez donc des variables le plus typées possible
Eviter les 'Object'. Utilisez donc des variables le plus typées possible.
Si une variable doit contenir des boutons, créer une variable de type 'Button'.
Si une variable doit être utilisée pour contenir divers choses: Button, ListBox... plutôt que la déclarer en Objet, il est préférable de la déclarer en System.Windows.Forms.Control
Dim fistControl As New System. Windows . Forms . Control
fistControl= New Button
|
Plus la variable sera typée plus le code sera rapide, solide, plus on évitera les erreurs de programmation.
V-L-4. Attention quand on met un objet dans une variable objet
Si je met un Button dans une variable Object.
Dim MyObjet As Object
MyObjet = Button1
|
MyObjet donne accès aux propriétés des Object (Equals, GetType, ToString...); pour utiliser les propriétés de Button (comme Text par exemple, il faut d'abord transformer l'objet en Button en écrivant : CType(MyObjet, Button).
Par exemple, pour mettre le texte du button contenu dans MyObjet dans la variable MyTexte, il faut écrire:
Dim MyTexte As String = CType (MyObjet, Button). Text
|
V-M. Variable Booléenne
 Mr Georges Boole 1805-1864
Il existe un autre type de variable: le type 'Boolien 'ou 'Booléen'(Boolean).
V-M-1. Introduction
L'algèbre de Boole est la partie des mathématiques, de la logique de l'électronique et de l'informatique qui s'intéresse aux opérations et aux fonctions sur les variables logiques. En logique propositionnelle, une expression est soit vraie soit fausse. (le vrai (1) et le faux (0)).
Georges Boole (1815-1864), physicien Anglais définit en 1847 un algèbre qui est applicable au raisonnement logique, qui traite des fonctions à variables binaires (deux valeurs). Mais il ne s'applique pas aux systèmes à plus de deux états d'équilibre.
Une variable booléenne, ou logique, ou binaire ne prend que deux valeurs (elle est généralement stockée sous la forme d'un bit).
Vers la fin des années 30, Claude Shannon démontra qu'à l'aide d'interrupteurs fermés pour « vrai » et ouverts pour « faux » il était possible d'effectuer des opérations logiques en associant le nombre 1 pour « vrai » et 0 pour « faux ».
Ce codage de l'information est nommé base binaire. C'est avec ce codage que fonctionnent les ordinateurs. Il consiste à utiliser deux états (représentés par les chiffres 0 et 1) pour coder les informations.
Il permet d'étudier les circuits logiques.
V-M-2. Les booléens
On a parfois besoin de savoir si une assertion est vraie ou Fausse.(True ou False)
Pour stocker une information de ce type, on utilise une variable de type booléen. Une variable de ce type ne peut contenir que True ou False.
Le terme booléen vient de "l'algèbre de Boole", cette algèbre ne travaille que sur les valeurs 1 ou 0 (True ou False)
Soit myBoolean une variable booléenne:
On peut écrire myBoolean = True
On peut aussi tester cette variable:
If myBoolean = False Then . .
|
L'expression après If est évaluée, si elle est vraie 'Then' se produit.
Autre exemple montrant comment le raisonnement informatique est 'logique':
If maValeur= 2 Then . .
End If
|
L'expression 'maValeur=2' est évaluée, si maValeur est effectivement égal à 2, l'expression prend la valeur True; dans ce cas le programme se poursuit après Then.
si maValeur est différent de 2, maValeur=2 est évaluée et prend la valeur False; dans ce cas le programme se poursuit après End If.
Un booléen peut donc prendre deux états (vrai/faux, oui/non, 1/0, etc.). Il s'agit donc d'une "valeur binaire". Techniquement, un booléen peut être représenté par un seul bit (binary digit = chiffre binaire).
Dans les langages n'ayant pas de variables booliennes, on se servait souvent d'un entier, avec pour convention que la valeur 0 représente "faux", tandis que toute valeur non nulle représente "vrai". En VB6 vrai était égale à -1. En VB.Net vrai = 1. Mais on s'en fiche car:
 |
un Booléen est un Booléen, en VB.Net on utilise donc True ou False comme seules valeurs pour un Booléen.
|
Il n'empêche que si on utilise une expression, un nombre et qu'on l'évalue comme si c'était un booléen (C'est pas bien!!), la valeur 0 représente "False", tandis que toute valeur non nulle représente "True".
V-M-3. Les conditions
On a vu que quand il faut faire un choix (comme dans 'If condition Then') il faut une condition qui est une expression booléenne. (avec While, Do Loop aussi).
Exemple:
If Condition Then
. . .
End if
Do Until condition
. . .
Loop
While Condition
. . .
End While
|
Pour écrire une condition, on utilise les opérateurs:
= égal
> supérieur à
< inférieur à
>= supérieur ou égal
<= inférieur ou égal
<> Différent de
|
L'évaluation d'une condition donne True (Vrai) ou False (Faux) car on l'a dit c'est une expression booléenne.
Exemple :
Dim valeur1 As Integer= 2
Dim valeur2 As Integer= 3
If valeur1= valeur2 Then
. . .
End if
|
valeur1 étant différent de valeur2, la condition 'valeur1=valeur2' prend la valeur False et le programme passe à la ligne après End If).
Ici le signe = n'indique pas une affectation mais 'égale' dans une expression à évaluer.
On peut combiner les opérateurs et mettre des parenthèses:
If (valeurC < > valeurD )AND (valeurD = 2)
|
V-M-4. Les opérateurs logiques
Si on a plusieurs expressions logiques, on peut les combiner avec des opérateurs logiques.
Si A et B sont des expressions booléennes:
A And B retourne True si A et B sont vrais
A Or B retourne True si une des 2 est vrai
A Xor B retourne True si une et une seule est vrai
Not A retourne True si A est faux et vice versa
|
On entend par expression booléenne le résultat de l'évaluation d'une condition:
c=d retourne True si c égal d et False si c différent de d.
Exemple
Si A différent de B.. peut s'écrire If Not(A=B) Then..
Si A compris entre 2 et 5 peut s'écrire If A>=2 And A<=5 Then..
Comment faire une bascule:
Il faut écrire A= Not A
A chaque fois que l'on effectue cette instruction A bascule à True s'il était à False et vice versa.
Les opérateurs AndAlso et OrElse sont plus rapides car ils n'évaluent pas la seconde expression si ce n'est pas nécessaire.
Parfois les expressions sont complexes et on peut les simplifier en utilisant des transformations:
Originale |
Transformation |
Not A And Not B |
Not (A Or B) |
Not A And B |
Not (A Or Not B) |
A And Not B |
Not (Not A Or B) |
A And B |
Not (Not A Or Not B) |
Not A Or Not B |
Not (A And B) |
Not A Or B |
Not (A And Not B) |
A Or Not B |
Not (Not A And B) |
A Or B |
Not (Not A And Not B) |
Exemple pratique:
Si A compris entre 2 et 5 peut s'écrire If A>=2 And A<=5 Then..
ou If Not (A<2 Or A>5) Then...
Une remarque:
Avec une expression Booléenne, on peut écrire:
Dim a As Boolean= True
If a = True Then . .
|
ou
Exemple:
If (x= 15)= True Then . .
ou If x= 15 Then . . .
|
Donc, avec une expression booléenne, et uniquement avec une expression booléenne, il est possible de se passer du = True après un If car de toutes façons , l'expression est évaluée.
Voir aussi le chapitre sur l'algèbre de Boole.
V-N. Soyons strict et explicite (et Compare et Infer ?)
VB peut être tolérant ou pas
Option Strict=On et Option Explicit=On le rendent totalement intolérant, et c'est tant mieux!! Voyons cela.
V-N-1. Notion de conversion Explicite et Implicite
La conversion Explicite: est permet de forcer la conversion d'un type de données vers un autre type à l'aide de mots clés.
Exemple
Dim d As Double = 2. 65
Dim i As Integer
i= CType (d,Integer)
|
Il existe aussi la conversion implicite effectuée automatiquement sans syntaxe particulière et de manière transparente.
VB peut le permettre ( Si Option Explicit Off dans la configuration )
Exemple
Dim d As Double = 2. 65
Dim i As Integer
i= d
|
V-N-2. Comment modifier une option ?
Menu Projet puis 'Propriétés de ..'.
Onglet 'Compiler'
En VB 2008:
Là on peut modifier les options de compilation.
V-N-3. Option Strict
V-N-3-a. Conversions implicites
Avec Option Strict=On VB refuse les conversions implicites qui pourraient entraîner des pertes de données.
VB est naturellement très arrangeant (trop sympa !!) quand il est configuré avec Option Strict Off :
Par défaut il transforme, quand c'est possible, et si nécessaire un type de variable en un autre type.
Si je passe un nombre qui est en double précision (Double) dans une variable en simple précision (Single), VB accepte, au risque de perdre de la précision (s'il y a un très grand nombre de chiffre significatif).
Ainsi :
Dim D As Double
Dim S As Single
D= 0. 123456789
S= D
MessageBox. Show (s)
|
Cela peut être ennuyeux si c'est des calculs d'astronomie !! et le programmeur ne s'en rend pas forcément compte !!
Pour éviter cela il faut activer l'OPTION STRICT à ON (Elle est par défaut à Off)
Menu Projet > Propriétés de Nom de projet.
Page de propriétés de Langage VB.
Propriétés communes, génération.
En face de Option Strict, mettre On
Maintenant seules les conversions effectuées explicitement seront autorisées.
S=D est souligné dans le code pour signaler une conversion interdite.
(Par contre D=S est accepté car on passe d'une variable à une variable plus précise)
Il faudra maintenant, pour notre exemple, écrire :
Cela entraîne une conversion de la valeur Double en Single; s'il y a perte de précision, elle se produit quand même, MAIS le programmeur SAIT qu'il y a conversion, il prendra ou pas EN CONNAISSANCE DE CAUSE le risque.
Avec Option Strict le langage VB.Net devient bien moins tolérant:
Ecrire un programme avec Option Strict à Off, ça passe; mettre Option Strict à On un tas d'instruction coince!! même certains exemples Microsoft!! Car sans s'en rendre compte on passe d'un type de variable à l'autre sans arrêt!!
V-N-3-b. Conversions String-numérique
Avec Option Strict=On VB refuse les conversions String-numériques implicites.
Avec Option Strict=Off
Dim n As Integer= 12
MessageBox (n)
|
Affiche 12 : le contenu de l'entier 'n' a été transformé automatiquement en String pour être affiché.
Avec Option Strict=On
Dim n As Integer= 12
MessageBox (n)
|
Plante
Il faut transformer explicitement n en String et écrire:
C'est pour cela qu'il y a des '.ToString' partout!!
V-N-3-c. Liaisons tardives
Avec Option Strict=On VB refuse les liaisons tardives:
Dim V As Object
V= " VB "
MessageBox. Show (V. Length )
|
MessageBox.Show(V.Length) est refusé
Il faut écrire
MessageBox. Show (CType (V, String ). Length . ToString )
|
Du fait que les membres utilisés avec une variable Object ne sont pas définis à l'écriture du programme (on ne sait même pas quel type de variable sera dans l'objet, on n'en connaît donc pas les membres), la recherche du membre se fait à l'exécution, c'est plus long, de plus les contrôles et vérifications se font à l'exécution.
Cela se nomme une liaison tardive, à éviter donc.
Utilisez plutôt des variables typées (des variables String , Integer..) au départ, quand on les utilise, les contrôles et appels sont vérifiés dés le départ, on appelle cela une liaison anticipée ou précoce.
'Option Strict Off' permet n'importe quoi. C'est du mauvais Basic .
'Option Strict On' oblige à une grande rigueur.
V-N-3-d. VB rapide ?
Avec Option Strict=On VB est plus rapide.
La vérification est effectuée lors de la compilation, à l'exécution il y a moins de contrôle de type.
V-N-4. Option Explicit
Pour la déclaration des variables nous avions dit que toute variable utilisée devait être déclarée.
Par défaut c'est vrai.
Ouvrir Menu Projet > Propriétés de Nom de projet.
Page de propriétés de Langage VB.
Onglet 'Compiler' en VB 2008.
En face de Option Explicit, il y a On
On pourrait (c'est fortement déconseillé) mettre cette option à Off.
Cela ne rend plus obligatoire la déclaration des variables.
MaVariable=10 sans déclaration préalable est acceptée.
Cela présente certains inconvénients : Si on fait une faute de frappe en tapant le nom d'une variable, VB accepte le nouveau nom et crée une nouvelle variable objet distinct.
Dim MaVariable
MaVariabble= 10
|
Je crois avoir mis 10 dans Mavariable. En fait j'ai mis 10 dans une nouvelle variable nommée MaVariabble
Mavariable à toujours une valeur=0
Donc, c'est clair et sans appel : Laisser Option Explicit à On, ce qui oblige à déclarer toutes les variables avant de les utiliser Dans ce cas si vous tapez le nom d'une variable non déclarée, elles est soulignée en bleue.
V-N-5. Option strict et Explicit dans un module
On peut aussi indiquer dans un module les options; ces instructions doivent être tapées avant toutes les autres.
V-N-6. Option Compare
Option Compare Binany permet de comparer des chaînes de caractères en fonction de leur code Unicode (le numéro du caractère).
Option Compare Text permet de comparer des chaînes de caractères en fonction du CultureInfo qui prend en compte, pour chaque langue, la signification, la sémantique du caractère.
Exemple : Comparons 2 caractères, on affiche True s'ils sont égaux.
Console. WriteLine (" a " = " A " )
|
Donne True si Option Compare Text car sémantiquement parlant c'est le même caractère, du moins il a la même signification.
Donne False si Option Compare Binary car le code Unicode de "a" et de "A" n'est pas le même .
Avec Option Compare Binary:
Les caractères sont classés dans un ordre croissant (l'ordre de leur code unicode)
Voyons l'ordre des certains caractères particuliers:
" " +,-./ 0123456789 :;ABCDEF abcdef èéê
On constate que l'ordre est espace puis quelques caractères spéciaux, les chiffres, les majuscules puis les minuscules, les accentués.(voir le tableau d'Unicode)
Ainsi "B" est inférieur à "a".
En utilisant Option Compare Binary, la plage [A-E] correspond à A, B, C, D et E.
Avec Option Compare Text:
Les caractères sont classés dans un ordre qui reflète plus la réalité d'un texte:
Toutes les types de a: A, a, À, à, puis tous les types de b: B, b...
Avec Option Compare Text, [A-E] correspond à A, a, À, à, B, b, C, c, D, d, E et e. La plage ne correspond pas à Ê ou ê parce que les caractères accentués viennent après les caractères non accentués dans l'ordre de tri.
Ainsi "B" est supérieur à "a".
V-N-7. Option Infer
Option Infer apparait en VB 2008. Débutant passe ton chemin.
'Option Infer On' permet de se passer de donner le type d'une variable quand on la déclare. Lors de l'utilisation de la variable, elle prendra le type nécessaire. Ainsi, si on met une String dans la variable cela devient une variable String.
Par défaut on a Option Infer Off.
Exemple:
Option Infer On
Module Test
Sub Main ()
Dim x = 10
Dim y = " abc "
End Sub
End Module
|
Son utilité se retrouve dans l'usage de base de données et surtout de Linq qui permet d'interroger les bases de données.
Éviter Option Infer On pour du code habituel.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright © .
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|