Programmation .Net - Indépendance financière

Les Functions et les Subs en Visual Basic

Ce sujet est aussi vraiment important. Peut-être avez-vous déjà entendu parler des fonctions(Functions) mais attention! Visual Basic est un peu spécial, il a en fait deux types de fonctions, les Functions et les Subs. Nous verrons leurs différences dans le tutoriel.

Qu’est-ce qu’une fonction (function)?

Commençons par définir ce qu’est une fonction. Une fonction est un bout de code agissant comme un bloc. Ce bloc peut par la suite être accédé depuis une autre partie du code dans le but de réduire la charge et ainsi de diviser logiquement votre programme par fonctionnalités. Bref, ça divise votre code pour qu’il soit plus facile à comprendre et pour éviter les répétitions.

Note : Il n’y a pas vraiment de façon définitive de savoir combien de fonctions on devrait créer pour tel ou tel code, dans un sens que trop de fonctions est aussi pire qu’un fichier de plus de 1000 lignes dans une seule fonction. Selon mon expérience, je dirais que de repérer les endroits où l’on peut voir des répétitions de code ou encore qui pourraient servir à d’autres modules est un bon point de départ.

Démarrez un nouveau projet et suivez-moi! Tout d’abord, comment créer une fonction?

Module Program
    Sub Main()

    End Sub

    Private Function ExecuteSomeTask() As Integer
        Return 6
    End Function
End Module

Comme vous pouvez voir, nous gardons le Main() mais j’ai ajouté quelque chose de nouveau dans le Module Program (Un Module peut contenir des Functions et des Subs). Nous pouvons diviser ce gabari de fonction en plusieurs morceaux.

Private : défini la portée de la fonction (dans le cas d’une fonction privée, il est uniquement possible d’y avoir accès dans le module où elle existe, dans le cas d’une fonction public, on peut y avoir accès de l’extérieur du module).
Function : est le mot clé pour dire à Visual Basic que nous voulons débuter l’écriture d’une fonction.
ExecuteSomeTask : est simplement le nom de la fonction, vous pouvez mettre le nom qui vous convient à quelques exceptions près (syntaxe), toutefois je vous conseil de rester simple et choisir un nom explicite. Finalement, essayez d’être uniforme dans votre choix de langue, par exemple si toutes les fonctions sont définies en anglais, il serait préférable de tenter de suivre la convention du programme.
() : les parenthèses contiendront les paramètres de la fonction. Ce sont des valeurs que vous lui passerez pour qu’elle puisse exécuter sa tâche et produire une sortie (valeur de retour).
As Integer : indique le type de retour. Gardez en tête qu’une fonction doit retourner une valeur. Dans le cas échéant, ce sera une valeur de type Integer, donc un entier qui sera retourner au code appelant cette fonction.
End Function : dit à Visual Basic que ceci est la fin du bloc de la fonction.

Comment fait-on pour utiliser cette notion dans le monde réel?

Disons que nous voulons créer un code qui comptera le nombre de lettres dans un mot contenu dans une variable. Nous utiliserons une fonction pour le compteur. Celle-ci aura pour but de compter le nombre de lettres dans un mot passé en paramètre et nous retourner ce nombre. Voici la solution que je propose.

Module Program
    Sub Main()
        'Declaration
        Dim InputWord As String
        Dim NumberOfLetters As Integer
        Dim ResultSentence As String

        'Initialization
        InputWord = "MyWord"
        NumberOfLetters = 0
        ResultSentence = ""

        'Processing
        NumberOfLetters = CountNumberOfLettersInWord(InputWord)
        ResultSentence = String.Format("{0} contains {1} letters", InputWord, NumberOfLetters)

        Console.WriteLine(ResultSentence)
        Console.ReadKey()
    End Sub

    Private Function CountNumberOfLettersInWord(ByVal WordToAnalyse As String) As Integer
        'Declaration
        Dim NumberOfLetters As Integer

        'Initialization
        NumberOfLetters = 0

        'Processing
        For Each Letter As Char In WordToAnalyze
            NumberOfLetters += 1
        Next

        'Return the value
        Return NumberOfLetters
    End Function
End Module

Step Into!

Wow, ce code est assez imposant, nous allons devoir le prendre morceau par morceau. Premièrement mettez un breakpoint à Dim InputWord As String, appuyez sur Start et suivez l’ordinateur en cliquant sur F10 Step over pour le faire avancer comme nous avons vu dans le tutoriel 7. Qu’arrive-t-il lorsque votre ligne surlignée est sur CountNumberOfLettersInWord et que vous appuyez sur F10? Le débogueur est aller directement à la ligne suivante, disons que nous voulons plutôt entrer dans la fonction elle-même. Vous devrez donc utiliser F11 la prochaine fois que vous tomberez sur cette ligne, ça fera en sorte que vous plongerez dans la fonction.

Questions et révision

Il nous reste quand même un bon montant de code à regarder. Qu’est-ce qui se passe à la ligne : NumberOfLetters = CountNumberOfLettersInWord(InputWord)?
Ça ressemble un peu à ce qu’on a vu lorsque nous avons fait Console.WriteLine(“Text to write”), nous avons passé le paramètre de valeur “Text to write” (type String) à la fonction WriteLine pour que celle=ci écrire une ligne dans la console, c’est le même principe ici à l’exception que la fonction est CountNumberOfLetterInWord et que ce que l’on passe n’est pas la même valeur, toutefois ça reste une valeur de type String.

Je ne suis pas certain à quoi sert WordToAnalyze? WordToAnalyze est simplement une variable dans laquelle sera mise la valeur qu’on passera à la fonction. Dans notre cas, WordToAnalyze sera affecté à “MyWord” puisque c’est ce que la variable que l’on passe (InputWord) contient. Attention: WordToAnalyze est seulement visible dans la fonction, c’est une variable locale à cette fonction!

Qu’est-ce que le For Each…? C’est une boucle qui sert à répéter plusieurs fois le même code, nous allons regarder cela en détails dans la prochain tutoriel! Dans ce cas-ci, ça compte le nombre de lettres dans WordToAnalyze.

Je ne suis pas certain de comprendre ce que fait cette ligne? NumberOfLetters = CountNumberOfLettersInWord(InputWord). Cette ligne prend le résultat de la fonction CountNumberOfLettersInWord et assigne sa valeur de retour à NumberOfLetters. NombreOfLetters contiendra alors le nombre de lettres dans le mot après l’exécution de la fonction. Notez que la variable est de type Integer parce que la valeur retournée est aussi de type Integer selon la description de la fonction.

Qu’est-ce que le mot-clé ByVal? ByVal est un mot-clé indiquant à Visual Basic ce qu’il doit faire avec la variable en arrière plan. Il y a en réalité deux actions possibles (au plus que je sache), ByVal indique que si l’on fait des modifications à la valeur de la variable passée en paramètre à la fonction, ces changements n’affecteront pas la valeur externe à la fonction elle-même. ByRef est l’inverse, si vous faites des changements à l’intérieur de la fonction à cette variable, les changements seront perçus à l’extérieur aussi. ByVal est généralement plus sûr à utiliser et plus fréquent.

Les fonctions en bref

Function parts

Une fonction doit avoir un type de retour! (Rectangle bleu)
Une fonction peut prendre 0, 1 ou plusieuurs paramètres comme WordToAnalyze, si vous en avez plusieurs vous devez les séparer par des vigules. (Rectangle rouge)
Une fonction est souvent utilisée pour réduire la charge d’un code et ainsi le diviser en plus petites parties logiques.
Une fonction peu avoir un “scope” ou une portée si vous préférez, c’est-à-dire qu’elle peut ou non être accessible à l’extérieur du module ou de la class en question. (Rectangle vert)
Une fonction a un nom que vous pouvez définir vous-même, mais encore, je vous suggère fortement de prendre des noms d’actions révélateur de ce que fait la fonction, par exemple : AddItem, RemoveCharacter, WriteToConsole, etc. (Rectangle violet)

Veuillez vous référer à l’image pour les couleurs.

Vous avez besoin de davantage d’information? Vous pouvez aller directement sur le site Web de MSDN.

Mais c’est quoi Sub alors?!

En gros, Sub est une fonction qui ne retourne pas de valeur, c’est tout! Dans la plupart des langages on utilisera le type de retour Void pour définir une fonction ne retournant rien. J’ai aussi un autre lien juste pour vous sur le site de MSDN à propos des Subs si vous voulez plus d’information.

Il y aura un exercice (3) sur le sujet car il est possiblement assez difficile à saisir, si vous n’êtes pas encore certain d’avoir tout compris, ne vous en faites pas avant d’avoir essayé l’exercice!

Next article Comment utiliser les boucles en Visual Basic
Previous article Comment ajouter les numéros de ligne dans Visual Studio

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *