Apprenez à programmer en VB .NET

Apprenez à programmer en VB .NET

Mis à jour le lundi 24 juin 2013

Vous êtes déjà en possession de beaucoup de connaissances pour programmer. Cependant, la programmation contient des milliers et des milliers de concepts et de notions. Vous vous doutez bien que je ne peux pas toutes vous les apprendre, à vous de chercher un peu par vous-mêmes.

Toutefois, dans ce dernier chapitre, je vais tenter de vous apporter quelques nouveaux concepts qui pourront être plus ou moins utiles lors de vos projets. Ces notions sont un peu inclassables, car n'ayant aucun rapport entre elles. Mais elles n'en sont pas moins intéressantes !

Accrochez-vous donc bien pour ces six nouveaux concepts.

Les constantes

Pour commencer cette partie des inclassables, je vais vous apprendre ce qu'est une constante en programmation.

Je pense que vous savez ce qu'est une constante dans le langage normal : c'est une variable qui ne varie pas (rigolo ! :-° ) ; elle garde toujours la même valeur.
Dans notre programme, ce sera pareil : une constante ne variera jamais au cours de notre programme, on ne peut donc pas lui assigner de valeur une fois sa déclaration effectuée.

C'est assez intéressant : imaginez un tableau dans lequel vous demandez dix valeurs à l'utilisateur. Vous allez le déclarer comme ceci :

Dim MonTableau(9) As Integer

Et, dans le reste du code, vos boucles auront pour fin :

to MonTableau.Length - 1

Si vous souhaitez changer et demander vingt valeurs au lieu de dix, vous allez devoir modifier cela dans la déclaration du tableau, ce qui, pour le moment, est simple si votre déclaration est faite au début de votre code.

Seulement, vous allez rapidement prendre l'habitude de déclarer vos variables en plein milieu du code, là où vous en avez besoin.
La joie pour retrouver son petit morceau de tableau dans tout ça…

Une autre solution serait de déclarer une constante, comme ceci :

Const LONGUEURTABLEAU As Integer = 9

… et de déclarer votre tableau ainsi :

Dim MonTableau(LONGUEURTABLEAU) As Integer

Eh oui, ça fonctionne ! Maintenant, vous rassemblez toutes vos constantes en haut de la page (ou dans une page à part pour les gros programmes), et voilà le moyen d'adapter facilement vos programmes sans trop de difficultés.

Les structures

Une autre chose qui pourra vous être utile dans certains programmes : les structures.

Alors, à quoi sert une structure, ou plutôt un tableau de structure ? (Eh oui, on grille les étapes ! :p ) Et comment l'utiliser ?

Tout d'abord, une structure est un assemblage de plusieurs variables ; une fois n'est pas coutume, je vais vous donner un exemple.

Vous avez l'intention de créer des fiches de livres dans votre programme. Chaque fiche rassemble les informations d'un livre : titre, auteur, genre, etc. Eh bien, dans ce cas, un tableau de structure va vous être utile (je parle de tableau de structure, car si on n'utilise la structure qu'une seule fois, elle est presque inutile).

Maintenant, comment l'utiliser ?

Sa déclaration est simple :

Structure FicheLivre
   Dim ID        As Integer
   Dim Titre     As String
   Dim Auteur    As String
   Dim Genre     As String
End Structure

Nous voici donc avec une structure définie (comme pour une fonction, il y a un End Structure à la fin). Comme vous pouvez le constater, je l'ai nommée « FicheLivre ».
En définissant cette structure, c'est comme si on avait créé un nouveau type de variable (symboliquement). Mais il faut à présent la déclarer et, pour ce faire, utilisons ce nouveau type ! :p

C'est au moment de la déclaration que l'on décide si l'on souhaite un tableau de structure ou une simple structure :

'Déclare une simple structure
Dim MaStructure As FicheLivre
'Déclare un tableau de structure
Dim MonTableauDeStructure(9) As FicheLivre

Je vais donc utiliser le tableau pour vous montrer comment on utilise cette structure.

MonTableauDeStructure(0).ID = 0
MonTableauDeStructure(0).Titre = "Les Misérables"
'…
MonTableauDeStructure(9).Auteur = "Dan Brown"
MonTableauDeStructure(9).Genre = "Policier"

Voilà comment remplir votre structure ; cette méthode de programmation permet de se retrouver facilement dans le code.

Voici un exemple pour afficher cette structure :

For i As Integer = 0 To 10
   Console.WriteLine("ID : " & MonTableauDeStructure(i).ID)
   Console.WriteLine("Titre : " & MonTableauDeStructure(i).Titre)
   Console.WriteLine("Auteur : " & MonTableauDeStructure(i).Auteur)
   Console.WriteLine("Genre : " & MonTableauDeStructure(i).Genre)
Next

Voilà encore un petit truc toujours utile. :)

Boucles supplémentaires

Vous vous souvenez encore des boucles conditionnelles ? :-°

Eh bien, je vais vous en faire découvrir deux nouvelles : For Each et IIf.

Oh, tu es embêtant ! C'était tout à l'heure qu'il fallait nous expliquer ça, pas maintenant !

Désolé, mais tout à l'heure vous ne pouviez pas vous en servir : vous n'aviez pas encore les connaissances requises.

Bon, je passe tout de suite à la première boucle !

For Each, traduisible par « pour chaque »

Vous vous souvenez des tableaux ?

Dim MonTableau(9) As integer

Eh bien, la boucle For Each permet de parcourir ce tableau (un peu à la manière du For traditionnel) et de récupérer les valeurs.

Utilisons donc immédiatement cette boucle :

For Each ValeurDeMonTableau As Integer In MonTableau
   If ValeurDeMonTableau < 10 Then
      Console.WriteLine(ValeurDeMonTableau)
   End If
Next

Ce qui se traduit en français par ceci : « Pour chaque ValeurDeMonTableau qui sont des entiers dans MonTableau ».

Ce code parcourt mon tableau et vérifie si chaque valeur est inférieure à 10 ; si c'est le cas, il l'affiche.

Très utile, donc, pour lire toutes les valeurs d'un tableau, d'un objet liste par exemple (que nous verrons plus tard).

IIF

IIF est très spécial et peu utilisé : en un certain sens, il simplifie le If. Voici un exemple de son utilisation dans le code précédent :

Dim MaChaine As String = "Salut"
Dim Compteur As Integer = 0
For Each Caractere As String In MaChaine
   If Caractere = "a" Then
       Compteur = Compteur + 1
   End If
Next
Console.WriteLine(IIF(Compteur > 0, "La lettre 'a' a été trouvée dans " & MaChaine, "La lettre 'a' n'a pas été trouvée dans " & MaChaine))

En clair, si vous avez bien analysé : si le premier argument est vrai (c'est un booléen), on retourne le second argument ; à l'inverse, s'il est faux, on retourne le dernier.

Pour mieux comprendre :

IIF(MonBooleen, "MonBooleen est true", "MonBooleen est false")
MonBooleen

peut bien évidemment être une condition.

Les casts

J'ai brièvement parlé des casts dans un chapitre précédent : lorsque j'ai converti un string en un integer et que je vous ai dit que j'avais casté la variable.

Donc, vous l'avez compris, un cast convertit une variable d'un certain type en un autre.

Alors, il existe plusieurs moyens d'effectuer des casts : une fonction universelle, et d'autres plus spécifiques.

Ctype()

La fonction universelle se nomme Ctype. Voici sa syntaxe :

Ctype(MaVariableString, Integer)

Ce code convertira MaVariableString en integer.

Voici un exemple concret :

Dim MonString As String = "666"
If Ctype(MonString, Integer) = 666 Then
'…
End If

Encore une fois, faites attention. Un code du style…

Dim MonString As String = "a666"
If Ctype(MonString, Integer) = 666 Then
'…
End If

… produira une grosse erreur !

Les fonctions spécifiques

On a vu l'exemple de Ctype(), utile lorsqu'il s'agit de types peu courants. Mais pour les types courants, il existe des fonctions plus rapides et adaptées :

  • CBool() : retourne un Boolean.

  • CByte() : retourne un Byte.

  • CChar() : retourne un Char.

  • *CDate() : retourne une date.

  • *CDbl() : retourne un Double.

  • CDec() : retourne un nombre décimal.

  • *CInt() : retourne un Integer.

  • CLng() : retourne un Long.

  • CSng() : retourne un Single.

  • *CStr() : retourne un String.

  • CUInt() : retourne un Unsigned Integer.

  • CULng() : retourne un Unsigned Long.

  • CUShort() : retourne un Unsigned Short.

Toutes ces fonctions ne prennent qu'un argument : la variable à convertir… c'est facile à retenir !
Les fonctions que j'ai fait précéder d'une astérisque « * » sont les plus utilisées. Attention, les « * » ne font pas partie de la fonction, c'est uniquement pour mieux les repérer.

Que sont ces Unsigned ?

Ah, tenez… c'est une bonne occasion de vous en parler.
Vous connaissez le type numérique integer ? (Oui, évidemment ! :D )

Eh bien, le Unsigned permet d'augmenter la capacité de vos variables : au lieu d'aller d'environ - 2 000 000 000 à 2 000 000 000 dans le cas d'un int, cette capacité s'étend plutôt de 0 à 4 000 000 000 (approximativement) ; Unsigned signifiant « non signé », il n'y a plus de signe.

En quoi cela peut-il nous être utile ? Je n'ai pas encore trouvé d'utilisation particulière parce que, si j'ai besoin d'un nombre plus grand que quatre milliards, j'utilise Long, qui peut contenir des nombres beaucoup plus grands.

De retour à nos petites fonctions : leur utilisation.

Dim MonString As String = "666"
If CInt(MonString) = 666 Then
'…
End If

Le type Object

Un élément supplémentaire dans cette partie « petits plus » : je vais vous présenter un nouveau type, appelé object.

Ce type object (qui remplace le type variant en VB6) est utilisé lorsque l'on ne sait pas ce que va contenir notre variable. Il peut donc contenir des mots, des nombres, etc.

Exemple concret : vous vous souvenez de notre calculatrice ; les instructions dans lesquelles on demandait la valeur tout en vérifiant qu'il s'agissait d'un nombre étaient les suivantes :

'Récupération du premier nombre
        Do
            Console.WriteLine("Entrez la première valeur")
            ValeurEntree = Console.ReadLine()
            'Tourne tant que ce n'est pas un nombre
        Loop Until IsNumeric(ValeurEntree)
        'Écriture de la valeur dans un double
        Valeur1 = ValeurEntree

Nous allons refaire cette partie en utilisant le type object.
Déclarons notre variable de type objet :

Dim MonObjet As Object

Nous allons devoir tourner dans notre boucle tant qu'il ne s'agit pas d'un nombre.

Il est tout à fait possible d'utiliser la fonction IsNumeric() dans le cas d'un object, mais il existe aussi TypeOf MonObjet Is Integer qui renvoie un booléen.
Une fois qu'il est placé dans une boucle, on retrouve notre programme sous une autre forme :

Dim MonObjet As Object
Do
    Console.WriteLine("Entrez la première valeur")
    MonObjet = Console.ReadLine()
    'Tourne tant que ce n'est pas un nombre
Loop Until IsNumeric(MonObjet)
MonObjet = CInt(MonObjet)

Cela revient au même que le code précédent, hormis que l'on n'utilise qu'une seule variable.

Les MsgBox et InputBox

Deux petites choses qui peuvent également vous aider : les MsgBox et les InputBox (voir figures suivantes).

Une MsgBox
Une MsgBox
Une InputBox
Une InputBox
À quoi ça sert ?

Première question… Eh bien, diverses utilisations peuvent en être faites, puisqu'elles seront utilisables du côté visuel également.

Les MsgBox peuvent signaler une erreur, demander une confirmation, etc. Les InputBox, quant à elles, peuvent être utilisées dans des scores par exemple, pour demander le nom du joueur.

Beaucoup d'arguments existent pour les paramétrer, je vais vous les expliquer.

La MsgBox

Les paramètres

Voici la liste des arguments. Pas de panique, il n'y en a que trois ! Je vais vous les décrire :

  1. Prompt : message qui apparaîtra dans la MsgBox.

  2. Buttons : type de bouton à utiliser (style de la boîte).

  3. Title : titre de la boîte.

Pour ce qui est du deuxième argument — les boutons à utiliser —, lorsque vous êtes sur le point d'entrer cet argument, une liste s'offre à vous : c'est cette liste qu'il vous faut utiliser pour trouver votre bonheur.

Voici dans le tableau suivant divers exemples de style.

Membre

Valeur

Description

OKOnly

0

Affiche le bouton « OK » uniquement.

OKCancel

1

Affiche les boutons « OK » et « Annuler ».

AbortRetryIgnore

2

Affiche les boutons « Abandonner », « Réessayer » et « Ignorer ».

YesNoCancel

3

Affiche les boutons « Oui », « Non » et « Annuler ».

YesNo

4

Affiche les boutons « Oui » et « Non ».

RetryCancel

5

Affiche les boutons « Réessayer » et « Annuler ».

Critical

16

Affiche l'icône « Message critique ».

Question

32

Affiche l'icône « Requête d'avertissement ».

Exclamation

48

Affiche l'icône « Message d'avertissement ».

Information

64

Affiche l'icône « Message d'information ».

DefaultButton1

0

Le premier bouton est le bouton par défaut.

DefaultButton2

256

Le deuxième bouton est le bouton par défaut.

DefaultButton3

512

Le troisième bouton est le bouton par défaut.

ApplicationModal

0

L'application est modale. L'utilisateur doit répondre au message avant de poursuivre le travail dans l'application en cours.

SystemModal

4096

Le système est modal. Toutes les applications sont interrompues jusqu'à ce que l'utilisateur réponde au message.

MsgBoxSetForeground

65536

Spécifie la fenêtre de message comme fenêtre de premier plan.

Les numéros indiqués correspondent aux ID, que vous pouvez cumuler. En gros, si vous souhaitez que votre boîte bloque le système et que l'on doive y répondre avant de continuer, avec une icône « Message critique » et des boutons « OK − Annuler », il faut que vous tapiez… 4096 + 1 + 16 = 4113 !

Voici donc le code correspondant, les Chr(13) représentant des retours à la ligne :

MsgBox("Je suis une MsgBox qui bloque votre système tant que vous n'avez pas répondu" & Chr(13) & " J'ai l'icône d'une croix rouge (critical) et mes boutons sont : Ok / Annuler" & Chr(13) & "Je vous souhaite un agréable vol sur notre compagnie ...", 4113, "Ma boiboitte")

Cela donne le résultat visible à la figure suivante.

Le rendu du code précédent
Le rendu du code précédent

Pour le moment, c'est bon ? :lol:

Le retour

Passons à la valeur de retour !

Les boutons sur lesquels on clique ne renvoient pas tous la même valeur :

  1. OK → 1

  2. Cancel → 2

  3. Abort → 3

  4. Retry → 4

  5. Ignore → 5

  6. Yes → 6

  7. No → 7

Un petit If devrait vous permettre d'effectuer une action précise en fonction de ce que l'utilisateur a entré !

InputBox

Les paramètres

Les arguments de l'InputBox sont un peu moins ennuyeux et ne sont pas difficiles à retenir :

  1. Le Prompt, comme pour la MsgBox.

  2. Le titre de la fenêtre.

  3. La valeur par défaut entrée dans le champ à remplir.

  4. La position de la boîte en X (sur l'horizontale, en partant de la gauche).

  5. La position de la boîte en Y (sur la verticale, en partant du haut).

L'origine du repère se situe donc en haut à gauche. Si vous entrez « 0 » pour les positions X et Y, alors la boîte se retrouvera en haut à gauche ; pour la laisser centrée, ne mettez rien.

Le retour

Cette fois, la valeur de retour n'est pas forcément un nombre : cela peut être une chaîne de caractères ou toute autre chose que l'utilisateur a envie d'écrire.

Voilà pour les box, c'est fini !

  • Les constantes sont des variables destinées à ne pas changer de valeur.

  • For each permet d'itérer sur chaque valeur d'une liste, d'un tableau.

  • MsgBox et InputBox sont des fenêtres de dialogue pour capter l'attention de l'utilisateur.

Exemple de certificat de réussite
Exemple de certificat de réussite