GENISTA (1971) : TUTORIEL "BBC BASIC FOR WINDOWS" EN FRANÇAIS : CHAPITRE 17 : FONCTIONS DÉFINIES PAR L'UTILISATEUR : "FN"



Logo Genista, fondé en 1971

Guide Tutoriel de BBC BASIC for Windows, Ch. 17

BBC BASIC (BB4W) Tutorial: User-Defined Functions: FN

Fonctions définies par l'Utilisateur : FN (Tutoriel BBC BASIC, Ch. 17) [Genista]

Par Peter Nairn  •  Traduction : Guy Schaffner (Texte et images) (Genista)

informatique et programmation Vous avez maintenant découvert l'extraordinaire puissance des procédures qui vous permettent de créer vos propres commandes à l'intérieur d'un programme.
Dans ce Chapitre, vous rencontrerez les fonctions, elles aussi définies par l'Utilisateur, avec lesquelles il devient possible de créer une commande personnelle qui aboutit à un résultat numérique ou à une chaîne que vous pourrez ensuite utiliser comme variable.
Chapitre 16   •   Chapitre 17   •   Chapitre 18      

Chapitre 17 — Fonctions définies par l'Utilisateur : FN


Vous serez heureux d'apprendre que toutes les informations concernant les PROC contenues dans le chapitre précédent s'appliquent aussi aux fonctions définies par l'utilisateur - FN. La seule différence, c'est qu'une FN renvoie une valeur à la ligne où elle est appelée, et que, par conséquent, de la même façon que les fonctions intrinsèques comme SQR, elle peut être utilisée à l'intérieur d'expressions.


      REM Carré d'un nombre en utilisant FN
      A=4
      B=FN_Carre(4)
      PRINT A;" au carré égale ";B
      END 
 
      DEF FN_Carre(Nombre)
      =Nombre^2
    

Regardons d'abord la définition. Comme on le voit, nous disons au BASIC que nous déclarons une fonction en nous servant de FN au lieu de PROC. Il n'existe pas de ENDFN. La fin de la fonction est indiquée par la ligne qui commence par « = ». L'expression est calculée et cette valeur est renvoyée à la ligne qui l'a appelée, dans notre cas la ligne 3.

Dans certaines autres formes de BASIC, il est nécessaire d'inclure dans le nom de la fonction le type de la variable en retour, comme lorsqu'on déclare une variable. BBC BASIC vous permet de faire cela, mais il n'effectue pas de contrôle sur le type de variable en retour pour le comparer au type spécifié dans le nom. D'habitude, on ne s'en préoccupe pas.

Comme pour les PROC, les FN peuvent être aussi longues et complexes que vous souhaitez les faire. Elles peuvent appeler d'autres PROC et d'autres FN. La seule règle que je suggère fortement et à laquelle vous devez vous tenir, c'est que, dans les deux types de routines, il n'existe qu'un seul et unique point de sortie. Le fait de mettre plusieurs lignes commençant par le signe « = », en fonction des conditions, semble bien être une bonne idée, mais cela conduit inévitablement à des ennuis. Il est beaucoup plus propre d'utiliser une variable locale pour contenir le résultat et puis, à la fin, de renvoyer ceci :


      REM Test de voyelles
      INPUT "Entrez une lettre : " Car$
      IF FN_EstUneVoyelle(Car$) THEN
        PRINT Car$;" est une voyelle vraie"
      ELSE
        PRINT Car$;" n'est pas une voyelle vraie"
      ENDIF
      END 
 
      DEF FN_EstUneVoyelle(Ch$)
      LOCAL Resultat%
      IF INSTR("AEIOUaeiou", LEFT$(Ch$,1)) THEN
        Resultat%=TRUE
      ELSE
        Resultat%=FALSE
      ENDIF
      =Resultat%
    

plutôt que d'écrire ce qui suit, où, si davantage de code vient à être ajouté, chacun des deux points de retour peut se perdre à l'intérieur du code :


      REM ...
      DEF FN_EstUneVoyelle(Ch$)
      IF INSTR("AEIOUaeiou", LEFT$(Ch$,1)) THEN
        =TRUE
      ELSE
        =FALSE
      ENDIF
    

On ne peut passer en retour que des valeurs uniques, et non des tableaux ou des structures. (Il existe une méthode pour faire cela, mais cela concerne plutôt le domaine du niveau supérieur.) Si vous avez besoin d'une valeur en retour, il vaut mieux passer l'ensemble comme paramètre et le manipuler dans la fonction.




Un truc : À La recherche d'une routine

À part dans les programmes les plus ordinaires, vous vous trouverez devant plusieurs PROC et plusieurs FN. Pour localiser la définition de la routine que vous essayez de retrouver, faites un clic droit n'importe où dans l'éditeur et, comme par magie, toutes les PROC et toutes les FN contenues dans le programme ouvert à ce moment-là se trouvent listées au bas du menu qui apparaît. Pour aller vers l'une d'elles, pointez avec la souris et cliquez.




Un truc : Des routines aux noms identiques

Il devrait apparaître très évident que vous ne pouvez avoir deux PROC ou deux FN ayant le même nom, et malgré ce, « BB4W » ne se plaindra pas si c'est le cas. Si le BASIC trouve deux routines portant le même nom, il se servira de la dernière et ignorera toutes les autres. Avec un petit programme, cela est facile à repérer. Lorsque les programmes dépassent une page, il devient difficile de le détecter, et si vous vous servez de bibliothèques, qui vous permettent de répartir votre code dans plusieurs fichiers, cela vous garantit le mal de tête du siècle. Si le code que vous modifiez semble n'avoir aucun effet, cherchez des noms en doublons.


C'est tout pour ce sujet. Comme on l'a dit, tout ce qui concerne LOCAL, PRIVATE, le scope d'une variable, etc., est exactement la même chose que pour les PROC.




Exercices


17.1
Il est une fonction très utile pour l'utilisateur : celle qui attend qu'on appuie sur « o » (pour oui) ou « n » (pour non) en réponse à un curseur d'attente, et qui renvoie soit TRUE soit FALSE. Écrivez-la. Il faudra, bien sûr, vérifier les capitales et les minuscules.

17.2
Écrivez une fonction FN_Minusc qui accepte une chaîne. Elle passera par chaque caractère de la chaîne pour convertir toutes les capitales en minuscules. Les autres caractères restent inchangés. Affichez la chaîne convertie.



Fin du Chapitre 17





Haut de Page  •  [Top of Page]

Page suivante (Ch. 18)  •  [Next Page (Ch. 18)]

Page précédente (Ch. 16)  •  [Previous Page (Ch. 16)]

Page d'entrée : BASIC, BBC BASIC et BB4W  •  [BASIC, BBC BASIC and BB4W  Entry Page]

Début du Guide pratique du BBC BASIC  •  [The Beginning of the BBC BASIC Tutorial]

Autres sujets  •  [Other subjects]