IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

Effet de bord en Pascal


Sujet :

Langage Pascal

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut Effet de bord en Pascal
    salut ,
    je voudrais savoir si c'est possible d'avoir un effet de bord en pascal.
    je m'explique en c par exemple
    y = x++ modifie la valeur de y mais également de x d'où l'effet de bord
    cette affectation n'est pas possible en pascal donc je vois pas comment modifier involontairement une variable globale dans un sous programme !
    merci.

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Pourquoi vouloir modifier des variables involontairement, et générer des effets de bord ? En général les effets de bord sont indésirables !

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Jai,
    Citation Envoyé par paskal++ Voir le message
    salut ,
    je voudrais savoir si c'est possible d'avoir un effet de bord en pascal.
    je m'explique en c par exemple
    y = x++ modifie la valeur de y mais également de x d'où l'effet de bord
    cette affectation n'est pas possible en pascal donc je vois pas comment modifier involontairement une variable globale dans un sous programme !
    merci.
    Parce que tu penses que dans y = x++ l'effet de x++ est involontaire ?

    D'ailleurs, je n'appellerais pas ça un effet de bord, y = x++ est seulement une manière d'écrire
    syntaxe assez explicitement créée par K&R pour diminuer le nombre de caractères du code source (à l'époque, ils n'avaient pas les moyens modernes pour travailler, et, entre autres, imprimer un listing sur une télétype [vitesse de frappe généralement quelques caractères par seconde], ce n'était pas trivial).

    Si ton programme fait quelque chose d'involontaire, ça s'appelle un bug.

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par droggo Voir le message
    Jai,
    ...
    Si ton programme fait quelque chose d'involontaire, ça s'appelle un bug.
    droggo++;
    je crois que je vais conserver tous tes propos pour les ecrire un jour dans un livre.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Qia,
    Citation Envoyé par darrylsite Voir le message
    droggo++;
    je crois que je vais conserver tous tes propos pour les ecrire un jour dans un livre.


    Mais le terme "modifier involontairement" est explicitement cité dans le message d'origine, et ce genre de demande me fait hurler de rire, tant c'est ridicule.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par droggo Voir le message
    Qia,
    ...tant c'est ridicule.
    Quo, ça me fais plaisir que tu hurles de rire...même si c'est pas du tout ce que je cherchais !
    ma question, que je trouve d'ailleurs pas ridicule, était de comprendre mieux l'effet de bord [ Autres précisions, de Olivier Vasseur : « On a un effet de bord quand l'évaluation d'une expression modifie une variable. source : http://www.linux-france.org/prj/jarg...t_de_bord.html ]
    donc si je comprends bien effet de bord --> modification involontaire dans un sous programme de la valeur d'une variable globale d'où la question : peut on avoir un effet de bord en pascal ?

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par paskal++ Voir le message
    Quo, ça me fais plaisir que tu hurles de rire...même si c'est pas du tout ce que je cherchais !
    ma question, que je trouve d'ailleurs pas ridicule, était de comprendre mieux l'effet de bord [ Autres précisions, de Olivier Vasseur : « On a un effet de bord quand l'évaluation d'une expression modifie une variable. source : http://www.linux-france.org/prj/jarg...t_de_bord.html ]
    donc si je comprends bien effet de bord --> modification involontaire dans un sous programme de la valeur d'une variable globale d'où la question : peut on avoir un effet de bord en pascal ?
    en pascal, on parle plus d'effet de bord lorsqu' une procedure modifie la valeur d'une variable globale.
    c'est un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    program side_effect;
    var bord : integer;
     
    procedure effet(var x: byte);
     begin
      bord:=bord*10;
      x:=bord;
     end;
    ...
    apres l'execution de "effet", il se produira un effet de bord sur la variable "bord".

  8. #8
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par darrylsite Voir le message
    apres l'execution de "effet", il se produira un effet de bord sur la variable "bord".
    voila je comprends mieux..
    donc on a involontairement modifié la valeur de bord ( bord:=bord*10; ) dans la procédure.
    merci beaucoup.

  9. #9
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par paskal++ Voir le message
    voila je comprends mieux..
    donc on a involontairement modifié la valeur de bord ( bord:=bord*10; ) dans la procédure.
    merci beaucoup.
    ouais ! je viens d'avoir un autre merci dans la journée.

  10. #10
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    pour moi, un effet de bord n'a rien à voir avec tout ça. C'est quand il se passe quelque chose d'imprévu, alors que le code que l'on écrit semble bon (typiquement, le débordement d'une variable de son espace de stockage, ou les erreurs de type buffer overflow). Le code écrit est correct et compile mais l'exécution peut ne pas donner le résultat escompté, en fonction des paramètres à un moment donné.

    Dans le lien donné, il explique juste les erreurs possibles qu'ils appelent effets de bord, mais c'est à mon sens plus des erreurs e syntaxe/sémantique que des réels effets de bords... Mais chacun sa défintion (la définition d'"effet de bord" a elle même des effets de bords )

  11. #11
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut Re
    Bonjour,
    Pour commencer j'aimerais faire le point sur quelques trucs :
    1- Rien n'est involontaire.
    Citation Envoyé par paskal++
    Cette affectation n'est pas possible en pascal donc je vois pas comment modifier involontairement une variable globale dans un sous programme !
    C'est quoi modifier involontairement une variable une sorte de torture que tu te fais à toi même pour que ton programme ne marche pas correctement tu modifie une variable et tu fais comme si ça t'a rien fait
    Citation Envoyé par darrylsite
    en pascal, on parle plus d'effet de bord lorsqu' une procedure modifie la valeur d'une variable globale.
    Pas qu'en pascal c'est même la définition d'un effet de bord .
    Citation Envoyé par paskal++
    donc on a involontairement modifié la valeur de bord ( bord:=bord*10; ) dans la procédure.
    Ce n'est pas involontaire combien de fois faut il le dire en pascal, en C..., en programmation impérative en générale on travaille avec les effets de bord c'est normal ce n'est pas interdit c'est quoi un effet de bord?c'est juste une fonction qui va modifier une variable globale ou statique ou un argument c'est tout .
    Par contre en programmation fonctionnelle on minimise les effets de bord en travaillant avec les structures prévus pour cela.
    Citation Envoyé par wormful_sickfoot
    pour moi, un effet de bord n'a rien à voir avec tout ça. C'est quand il se passe quelque chose d'imprévu, alors que le code que l'on écrit semble bon (typiquement, le débordement d'une variable de son espace de stockage, ou les erreurs de type buffer overflow). Le code écrit est correct et compile mais l'exécution peut ne pas donner le résultat escompté, en fonction des paramètres à un moment donné.
    Non je crois pas, ça c'est un bug
    Cordialement,

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Bie,
    Citation Envoyé par paskal++ Voir le message
    ma question, que je trouve d'ailleurs pas ridicule, était de comprendre mieux l'effet de bord
    Relis ce que tu as écrit.

    Ce qui est ridicule, c'est d'avoir utilisé sur le terme "involontairement", et en plus tu persistes dans les messages suivants, ce qui fait que j'enfonce le clou : très ridicule.

  13. #13
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par diden138 Voir le message
    Bonjour,
    Pour commencer j'aimerais faire le point sur quelques trucs :
    1- Rien n'est involontaire.

    C'est quoi modifier involontairement une variable une sorte de torture que tu te fais à toi même pour que ton programme ne marche pas correctement tu modifie une variable et tu fais comme si ça t'a rien fait

    Pas qu'en pascal c'est même la définition d'un effet de bord .
    d' abord, je n'ai pas employé le mot involontaire. c'est l'auteur de ce post qui l'as ecrit. por la definition de l'effet de bord je suis bien d'accord avec et ça ne s'applique pas seulement au pascal.
    Citation Envoyé par wormful_sickfoot

    pour moi, un effet de bord n'a rien à voir avec tout ça. C'est quand il se passe quelque chose d'imprévu, alors que le code que l'on écrit semble bon (typiquement, le débordement d'une variable de son espace de stockage, ou les erreurs de type buffer overflow). Le code écrit est correct et compile mais l'exécution peut ne pas donner le résultat escompté, en fonction des paramètres à un moment donné.
    Je crois aussi que c'est ce qu'on appelle communement un bug et non un effet de bord. si ta definition est juste, l'effet de bord dependra de la machine et de l'environnement dans lequel on execute le programme. je ne crois pas que c'est ça qu'on appelle effet de bord.

  14. #14
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Ben appelez ce que vous voulez comme vous voulez, mais moi je reste avec ma définition et elle me va très bien

  15. #15
    Membre confirmé
    Avatar de diden138
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    714
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 714
    Points : 589
    Points
    589
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    Ben appelez ce que vous voulez comme vous voulez, mais moi je reste avec ma définition et elle me va très bien

    Cordialement,

  16. #16
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Dans le style du code C donné, on pourrait imaginer que dans le cours du développement d'un logiciel, on ait à un moment donné créé une procédure avec un paramètre var :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure Incrémente(var a:Integer);
     begin
      a := a + 1
     end;
    Puis qu'un autre développeur après vous, ou vous même, sans analyser en détail le code, s'aperçoive qu'il serait plus judicieux d'implémenter une fonction, en ajoutant juste une clause Result := à la fin pour ne pas revoir tout le code, et en oubliant d'enlever le var :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Incrémente(var a:Integer) : Integer;
     begin
      a := a + 1;
      Result := a;
     end;
    Je vous laisse imaginer le mur dans lequel on fonce, ici. Bien évidemment ce code est trivial et ne serait de toute façon pas codé comme ça, mais c'est une maquette pour illustrer mon idée.

    Si on se dit "ça ne m'arriverait jamais", qu'on s'imagine dans un projet de plusieurs centaines de procédures/méthodes manipulant pour certaines une dizaine de paramètres... chouette un bug, une variable qui se modifie inexplicablement, justement je n'avais rien à faire ce week-end !

  17. #17
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 117
    Points : 85
    Points
    85
    Par défaut
    une variable qui se modifie inexplicablement
    c'est vrai que c'est ce que j'aurais du employer à la place de "modifier involontairement"

    j'enfonce le clou : très ridicule.
    bon ben...


    Citation Envoyé par wormful_sickfoot Voir le message
    la définition d'"effet de bord" a elle même des effets de bords )
    pour clore le sujet je dirais d'après ce que j'ai compris : il faut éviter de manipuler les variables globales dans les sous programmes pour éviter les effets de bords.

  18. #18
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Gao,
    Citation Envoyé par paskal++ Voir le message
    pour clore le sujet je dirais d'après ce que j'ai compris : il faut éviter de manipuler les variables globales dans les sous programmes pour éviter les effets de bords.
    Je dirais même plus : il faut éviter les variables globales. Que dis-je, il faut les fuir comme la peste.

    Il y a quelques cas, variables selon le langage, où on ne peut pas les éviter, mais ils sont généralement assez rares, et, dans tous les cas, il faut limiter le plus possible la "globalité". Par exemple, en Pascal, que cette variable globale ne soit visible que dans l'unité où elle est déclarée, et, dans cette unité, dans la mesure du possible, qu'elle ne soit visible que par les fonctions/procédures qui en ont besoin [en clair, la déclarer après toutes les fonctions/procédures qui n'en ont pas besoin].

  19. #19
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Doa,
    Citation Envoyé par CapJack Voir le message
    Dans le style du code C donné, on pourrait imaginer que dans le cours du développement d'un logiciel, on ait à un moment donné créé une procédure avec un paramètre var :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure Incrémente(var a:Integer);
     begin
      a := a + 1
     end;
    Puis qu'un autre développeur après vous, ou vous même, sans analyser en détail le code, s'aperçoive qu'il serait plus judicieux d'implémenter une fonction, en ajoutant juste une clause Result := à la fin pour ne pas revoir tout le code, et en oubliant d'enlever le var :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Incrémente(var a:Integer) : Integer;
     begin
      a := a + 1;
      Result := a;
     end;
    Je vous laisse imaginer le mur dans lequel on fonce, ici. Bien évidemment ce code est trivial et ne serait de toute façon pas codé comme ça, mais c'est une maquette pour illustrer mon idée.

    Si on se dit "ça ne m'arriverait jamais", qu'on s'imagine dans un projet de plusieurs centaines de procédures/méthodes manipulant pour certaines une dizaine de paramètres... chouette un bug, une variable qui se modifie inexplicablement, justement je n'avais rien à faire ce week-end !
    Oui, ce serait un effet de bord, mais aussi, et surtout, un bug. Bug parmi les assez difficiles à trouver quand le programme devient un peu gros, mais en cherchant, on trouve toujours où ça se passe (même si c'est parfois long ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Effet de bord...
    Par pierre50 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 12/10/2005, 18h11
  2. Effet de bord
    Par Clad3 dans le forum OpenGL
    Réponses: 11
    Dernier message: 04/10/2005, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo