Search this site
Embedded Files
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
Mon BBC SDL pas à pas
  • Accueil
  • BBC BASIC
  • BBC OS
  • BBC MODULES
  • RUBRIQUES
  • LIENS
  • More
    • Accueil
    • BBC BASIC
    • BBC OS
    • BBC MODULES
    • RUBRIQUES
    • LIENS

⇨ MENU ⇨ BBC BASIC

PROC

DESCRIPTION.


L'instruction PROC permet de définir une nouvelle procédure personnalisée, elle doit être précédée d'une instruction DEF.

L'instruction ENDPROC termine la définition d'une procédure personnalisée, elle est obligatoire.




SYNTAXE.


DEF PROCnom

...

ENDPROC



DEF PROCnom( )

...

ENDPROC



DEF PROCnom( attributa , attributb , ... , attributn )

...

ENDPROC



DEF PROCnom( RETURN attributa , RETURN attributb , ... , attributn )

...

ENDPROC




REMARQUES.


nom peut être n'importe quelle combinaison de lettres, à l'exception des mots réservés par le BBC BASIC, majuscules ou minuscule, de chiffres et de caractères de soulignement. nom peut d'ailleurs commencer par un chiffre ou un caractère de soulignement. nom ne doit pas contenir d'espace. 


attribut sont des paramètres, numériques ou alphanumériques, passées par valeur à la procédure personnalisée. C'est-à-dire que la variable ayant fourni sa valeur à la fonction personnalisée, ne sera pas affectée par des modifications qui seraient apportées à attribut dans la fonction personnalisée.


RETURN attribut sont des paramètres, numériques ou alphanumériques, passés par référence à la procédure personnalisée. C'est-à-dire que la variable ayant fourni sa valeur à la fonction personnalisée, sera affectée par les modifications qui seraient apportées à attribut dans la fonction personnalisée.


L'instruction PROC doit être est immédiatement : 

- précédée du mot-clé DEF ; 

- suivi du nom de la fonction ; 

- puis d'une paire de parenthèses contenant des paramètres de n'importe quel type, ou pas.


Contrairement aux fonctions personnalisées, définies avec l'instruction FN, qui se terminent par un signe égale (=) suivi de la valeur à retourner, la définition d'une procédure ne se clôt pas par l'instruction ENDPROC.


L'instruction ENDPROC provoque le retour de l'exécution du programme à la l'instruction suivant l'appel de la procédure personnalisée appelante, après avoir restaurée l'état des variables déclarées comme LOCAL ou PRIVATE dans la définition, ainsi que les arguments factices.


Si la procédure personnalisée n'attend pas de paramétre pour son bon fonctionneent, la paire de paranthèses est facultative. Mais si une paire de parenthèses est présente à la suite du nom de la procédure personnalisée, elle devra être aussi présente lors de l'appel de cette procédure personnalisée.


Les valeurs des paramètres réels sont affectées aux paramètres formels dans le même ordre que celles passées lors de l'appel de la procédure personnalisée. Il doit y avoir autant de valeurs passées que de paramètres attendus dans la définition de la procédure personnalisées. Le type de valeur du paramètre doit être compatible avec celui de la valeur passée. Les paramètres formels sont automatiquement définis comme LOCAL dans la fonction personnalisée.

PROC_Voyage( "Quebec" , "Montreal" , 250  , 2.85 )

END


DEF PROC_Voyage( Qdepart$ , Qarrivee$ , Qdistance , Qduree )

PRINT "Notre trajet de " ; Qdepart$ ; " a " ; Qarrivee$

kduree$ = FN_Duree( Qduree )

PRINT "a fait " ; Qdistance ; " Km et a duree " ; kduree$

PRINT "a la moyenne de " ; Qdistance / Qduree ; " Km/h."

ENDPROC


DEF FN_Duree( Q )

kheures = INT ( Q )

kreste = Q - kheures

kminutes = kreste * 60

= STR$( kheures ) + " h et " + STR$( INT( kminutes ) ) + " minutes"



Note : les valeurs passées lors de l'appel de la procédure sont nommées paramètres réels tandis que les noms de variables présent dans la définition sont nommés paramètres formels. 



Plusieurs procédure peuvent avoir le même identifiant, nom, mais une seule sera exécutée lors d'un appel de la procédure personnalisée par PROCnom, avec cet ordre de priorité : 

- d'abord, dans un même script, c'est la procédure définie en dernier, vers la fin du script, qui sera exécutée ;

- ensuite, les procédures présentent dans le script sont prioritaires sur celles chargées avec l'instruction INSTALL ;

- enfin, la dernière procédure chargée par une instruction INSTALL sera exécutée.


Une procédure personnalisée n'a pas besoin d'être déclarée avant son utilisation, donc que leurs définitions soient faites en début ou en fin du programme ne présente aucun avantage en termes de vitesse. Cependant, pour une plus grande lisibilité et une meilleure maintenance, il est fortement conseillé de les placer en fin du programme, et surtout après l'instruction END qui termine et arrête le programme.



Une procédure personnalisée est une suite d'instructions qui ne seront exécutées que si la procédure personnalisée est appelée dans le corps principal du programme, depuis une fonction personnalisée ou une autre procédure personnalisée.


Contrairement aux fonction personnalisées définies à l'aide de l'instruction FN qui doit toujours retourner une valeur, du même type que celui de la variable associée à son appel, une procédure personnalisée ne retourne rien et ne doit donc pas âtre associée à une variable lors de son appel.


La définition d'une procédure personnalisée peut se trouver sur une ou plusieurs lignes, selon la complexité des actions a exécuter pour obtenir la valeur à retourner.

DEF PROC_Perimetre( Qlargeur , Qlongeur ) : PRINT "Perimetre = " ; 2 * ( Qlargeur + Qlongeur ) : ENDPROC

équivaut à

DEF PROC_Perimetre( Qlargeur , Qlongeur ) 

PRINT "Perimetre = " ; 2 * ( Qlargeur + Qlongeur ) 

ENDPROC



Les procédures personnalisées sont réentrantes et par défaut la valeur de ses paramètres, s'il y en a, sont passés par valeur. Les variables provenant du corps principal du programme étant de portée globale, elles sont par nature consultables et modifiables dans toutes les procédures et fonctions personnalisées, elles n'ont donc pas à figurer dans la liste des paramètres. Par contre, passer une variable de portée globale par valeur, permet de préserver sa valeur acquise dans le programme au moment de l'appel de la fonction personnalisée.

kduree = 2

kvitesse = 100

kdistance = 0

PROC_Distance( kvitesse )

PRINT kduree, kvitesse , kdistance

END


DEF PROC_Distance( Qvitesse )

PRINT kduree , Qvitesse , kduree * Qvitesse

kduree = 3

Qvitesse = 44

kdistance = kduree * Qvitesse

PRINT kduree , Qvitesse , kdistance

ENDPROC 


retourne :

2      100     200

3      44       132

3      100     132


La variable kduree, qui n'est pas passée comme paramètre à la fonction personnalisée PROC_Distance voit sa valeur modifiée dans la fonction PROC_Distance. Cette nouvelle valeur de la variable kduree est bien conservée après l'exécution de la procédure.


La variable kvitesse, qui est passée par valeur, et qui se nomme, à pour alias, Qvitesse dans la définition de la procédure personnalisée PROC_Distance voit sa valeur modifiée dans la fonction PROC_Distance. Cette nouvelle valeur de la variable kvitesse est perdue après l'exécution de la fonction.


Note : les valeurs des paramètres peuvent être, si besoin, passée par des valeur brutes. Par exemple : ka = 2 : kb = 4 : PROC_Test( ka , kb ) équivaut à PROC_Test( 2 , 4 )



L'utilisation de l'instruction RETURN devant un paramètre dans la définition de la procédure personnalisée, permet de passer une variable par référence, et donc de modifier sa valeur dans les corps de cette procédure personnalisée. L'utilisation de l'instruction RETURN dans une définition de procédure personnalisée permettra de modifier une variable déclarée comme LOCAL ou PRIVATE provenant de la procédure ou fonction personnalisée qui a appelée cette procédure personnalisée et de préserver cette modification dans la procédure ou fonction personnalisée appelante.

klargeur = 3

klongueur = 17

PROC_Aire

PRINT "Un rectangle de " ; klargeur ; " par " ; klongueur ; " a  : "

PRINT " - un perimetre de " ;  2 * ( klargeur + klongueur )

PRINT " - une superficie de " ; klargeur * klongueur 

END


DEF PROC_Aire

LOCAL klargeur , klongueur

klongueur = 0

FOR kvaleur = 1 TO 3

klargeur = kvaleur + 4

kperimetre = FN_Calcul( klargeur , klongueur )

PRINT "Un rectangle de " ; klargeur ; " par " ; klongueur ; " a  : "

PRINT " - un perimetre de " ; kperimetre 

PRINT " - une superficie de " ; klargeur * klongueur 

NEXT kvaleur

ENDPROC 


DEF FN_Calcul( Qlargeur , RETURN Qlongueur )

Qlongueur = 2 + Qlongueur + Qlargeur

kperimetre = 2 * ( Qlargeur + Qlongueur )

Qlargeur = Qlargeur - 3

= kperimetre


retourne

Un rectangle de 5 par 7 a  : 

- un perimetre de 24

- une superficie de 35

Un rectangle de 6 par 15 a  : 

- un perimetre de 42

- une superficie de 90

Un rectangle de 7 par 24 a  : 

- un perimetre de 62

- une superficie de 160

Un rectangle de 3 par 17 a  : 

- un perimetre de 40

- une superficie de 51


Dans cet exemple, la variable klongueur, déclarée comme LOCAL dans la procédure personnalisée PROC_Aire, a sa valeur qui est bien celle calculée et retournée par son alias Qlongueur dans la fonction personnalisée FN_Calcul. Tandis que la variable klargeur, déclarée comme LOCAL dans la procédure personnalisée PROC_Aire, ne voit pas sa valeur modifiée par les manipulations effectuées sur son alias Qlargeur. On observera aussi que les variables globales de même nom, klongueur et klargeur, déclarées par leur affectation dans le corps principale n'ont pas été modifié à la sortie de la procédure PROC_Aire



Si une ou des variables, utilisées dans le corps d'une procédure personnalisée, sont susceptibles d'avoir le même nom qu'une des variables de portée globale, par exemple si la procédure personnalisée a été importée par une instruction INSTALL, mais qu'elles doivent bien être différenciées, afin que la variable principale de portée globale n'ait pas sa valeur modifiée dans la procédure personnalisée, pour le bon fonctionnement de l'application, on utilisera l'instruction : 

- LOCAL, si la valeur de la variable ne doit pas être conservée à la sortie de la fonction personnalisée ; 

- PRIVATE, si la valeur de la variable doit être conservée à la sortie de la fonction personnalisée.

 


Rappel : les tableaux de données et les structures données déclarés comme LOCAL ou PRIVATE dans une procédure personnalisée doivent être (re)dimensionnés dans le corps de cette procédure personnalisée, et bien sûr avant leur utilisation utilisation.


Rappel : dans une procédure personnalisée, les variables qui ne sont ni des paramètres formels ni déclarées comme LOCAL ou PRIVATE doivent être des variables de portées globales, c'est-à-dire qu'elles doivent être consultables et/ou modifiables, dans tour le script du programme, y compris de les procédures et fonctions personnalisées.


Note : si une erreur est retournée lors de l'exécution d'une fonction personnalisée contenant un gestionnaire d'erreur activé avec l'instruction composée ON ERROR LOCAL, l'instruction composée RESTORE LOCAL permettra de restaurer les valeurs des paramètres formels, passées à la fonction lors de son appel, ainsi que celle des variables LOCAL et/ou PRIVATE à leur valeur initiale. RESTORE LOCAL exécutera ensuite les instructions composées RESTORE DATA et RESTORE ERROR. Voir la rubrique sur les gestionnaires erreurs pour plus de détails.



Voir l'instruction FN pour définir une fonction personnalisée.

Voir l'instruction LOCAL pour de déclarer des variables de portée locale dans une fonction personnalisée.

Voir l'instruction PRIVATE pour de déclarer des variables privées dans une fonction personnalisée.

Votre aide est précieuse pour améliorer ce site, alors n'hésitez pas à faire part de

vos remarques, vos commentaires et de vos suggestions.

Dans la RETROGICIEL vous trouvez des suggestions simples et classiques pour

TESTER - DÉCOUVRIR - PRATIQUER - APPROFONDIR - EXPLORER

avec un exemple de résolution à télécharger pour vous inspirer.

Google Sites
Report abuse
Page details
Page updated
Google Sites
Report abuse