Fonctions et variables
Résolu
Panoramix.
Messages postés
3051
Statut
Membre
-
Panoramix. Messages postés 3051 Statut Membre -
Panoramix. Messages postés 3051 Statut Membre -
Bonjour à tous !
J'ai une petite question concernant la portée des variables en Pascal. Prenons l'exemple suivant (je schématise, ne faite pas attention à la syntaxe) :
Mes questions :
-> Est-ce que ça peut fonctionner ? La fonction AjouteNom sera-t-elle capable de modifier la variable Nom ?
-> La fonction est-t-elle bien positionnée ?
-> Nom est une variable globale ou non ?
Merci d'avance pour réponses :)
J'ai une petite question concernant la portée des variables en Pascal. Prenons l'exemple suivant (je schématise, ne faite pas attention à la syntaxe) :
PROGRAM test; VAR Nom : STRING FONCTION AjouteNom(); BEGIN WRITE('Votre nom svp :'); READ(Nom); END; BEGIN test AjouteNom(); END.
Mes questions :
-> Est-ce que ça peut fonctionner ? La fonction AjouteNom sera-t-elle capable de modifier la variable Nom ?
-> La fonction est-t-elle bien positionnée ?
-> Nom est une variable globale ou non ?
Merci d'avance pour réponses :)
A voir également:
- Fonctions et variables
- Fonction si et - Guide
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Fonctions excel en anglais - Guide
- Fonctions excel - Guide
- Aucun groupe de fonctions ni onglet n'est actuellement chargé dans le ruban - Forum AutoCAD
6 réponses
Oui absolument, le programme est juste et la variable "nom" est globale, c'est à dire qu'elle est allouée sur le "tas" dans la mémoire globale, à contrario de la variable locale, déclarée dans la fonction même, allouée sur la pile donc temporairement...
Le chêne aussi était un gland, avant d'être un chêne
Le chêne aussi était un gland, avant d'être un chêne
Oui, en fait on se sert des variables globales lorsque c'est utile, tout simplement! Disons que leur avantage tiens au fait d'être très accessibles, y compris dans d'autres unités si la déclaration le permet, et leur inconvénient principal c'est d'être nommé de manière fixe, donc il faut les déclarer une à une, elles consomme de la mémoire en permanence tout en servant temporairement dans ce cas précis...Et souvent elles font enfler le code par rapport aux locales car les déclarations locales sont plus courtes à l'emploi.
Et du fait que le nom soit figé, la fonction l'est aussi! Dans certain cas ça pousserait à écrire une autre fonction équivalente du fait qu'elle doive placer son résultat ailleurs!
Donc on ferait plutôt :
Et là encore on reste en globale pour stocker le nom, mais c'est qu'on est dans le corps de programme, là où on ne reste pas longtemps!
Dans un programme normalement construit, tout est fonction, et donnerais plutôt:
Donc là on ne travaille plus qu'en variables locales...
En fait il faut utiliser les variables globales lorsque leur contenu est utile dans différents points du programme, servant donc à mettre des données en commun de manière pratique, et là encore il vaut mieux les regrouper en enregistrements pour éviter de noyer le programme sous tout un tas de noms globaux valides, car il y a un risque de confusion avec le noms des variables locales ensuite!
Le chêne aussi était un gland, avant d'être un chêne
Et du fait que le nom soit figé, la fonction l'est aussi! Dans certain cas ça pousserait à écrire une autre fonction équivalente du fait qu'elle doive placer son résultat ailleurs!
Donc on ferait plutôt :
PROGRAM test; VAR Nom : STRING FUNCTION AjouteNom: String; BEGIN WRITE('Votre nom svp :'); READ(Result); END; BEGIN test Nom:= AjouteNom; END.
Et là encore on reste en globale pour stocker le nom, mais c'est qu'on est dans le corps de programme, là où on ne reste pas longtemps!
Dans un programme normalement construit, tout est fonction, et donnerais plutôt:
PROGRAM test; FUNCTION AjouteNom: String; BEGIN WRITE('Votre nom svp :'); READ(Result); END; Procedure AjouteNoms; var Nom : String; begin Nom:= AjouteNom; // exploitation locale du nom puis abandon de la variable end; BEGIN test AjouteNoms; END.
Donc là on ne travaille plus qu'en variables locales...
En fait il faut utiliser les variables globales lorsque leur contenu est utile dans différents points du programme, servant donc à mettre des données en commun de manière pratique, et là encore il vaut mieux les regrouper en enregistrements pour éviter de noyer le programme sous tout un tas de noms globaux valides, car il y a un risque de confusion avec le noms des variables locales ensuite!
Le chêne aussi était un gland, avant d'être un chêne
Merci pour ta réponse !
Mais est-ce que cette façon de codé est propre ? J'ai entendu dire que les fonctions devaient être le plus possible indépendant du programme de base. Est ce que cette façon de déclarer la fonction est plus juste :
Mais est-ce que cette façon de codé est propre ? J'ai entendu dire que les fonctions devaient être le plus possible indépendant du programme de base. Est ce que cette façon de déclarer la fonction est plus juste :
FONCTION AjouteNom(IN NouveauNom:STRING); BEGIN Nom := NouveauNom; END;
Merci pour ta réponse.
J'aurais encore une petite question :)
Quelle est la différence entre une fonction et une procédure en LDA ?
J'aurais encore une petite question :)
Quelle est la différence entre une fonction et une procédure en LDA ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Hé bien la différence est toute simple, la fonction renvoie obligatoirement un résultat, donc une procédure est une fonction qui ne renvoie pas de résultat, voilà!
En entendant par renvoi de résultat une manière de le renvoyer, sous cette forme:
Resultat:= (appel de la fonction)
D'autres formes sont possible pour retourner un ou plusieurs résultats, tel que les paramètres "var" en pascal...
En entendant par renvoi de résultat une manière de le renvoyer, sous cette forme:
Resultat:= (appel de la fonction)
D'autres formes sont possible pour retourner un ou plusieurs résultats, tel que les paramètres "var" en pascal...