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

Cobol Discussion :

COBOL : SECTION vs GO TO


Sujet :

Cobol

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut COBOL : SECTION vs GO TO
    Bonjour ,
    j'ai une question relative à du vieux code cobol qui utilise des GO TO, donc je fait appel aux souvenir des membres.

    Exemple de programme ci-dessous.
    La question est : est-ce que la SECTION TOTO va être exécutée dans la continuité de FIN-PARAGRAPHE ou bien , est-ce que le PERFORM d'une SECTION s'arrête comme avec un THRU ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    * début de programme
       PERFORM TATA.
    * fin de programme
    
    TATA SECTION.
    TETE. 
       PERFORM PARAGRAPHE
       ...
    
    ...
    PARAGRAPHE.
       ...
       GO TO FIN-PARAGRAPHE
       .
    
    FIN-PARAGRAPHE.
       EXIT.
    
    TOTO SECTION.
    TITI.
       DISPLAY 'B'
       .

    Merci d'avance
    Cyril

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La réponse dépend de comment on est arrivé à exécuter le paragraphe nommé "paragraphe" :

    Si le § "paragraphe" a été appelé par "perform paragraphe" ou "perform paragraphe through fin-paragraphe" alors, non, on n'exécutera pas la section qui suit, on reviendra juste après le "perform paragraphe"

    Si on est entré dans "paragraphe" par goto ou traitement en séquence, alors oui on exécutera la section qui suit

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Je complète ma réponse avec les éléments suivants :

    Les sections étaient autrefois un ensemble d'instructions chargeables en une seule fois en mémoire, on créait les sections de sorte à ce que le code exécuté dans une boucle soit disponible sans besoin de paginer (un peu comme les segments en assembleur). Cette contrainte date d'une époque révolue depuis longtemps, où les ordinateurs disposaient de très peu d'espace mémoire, grosso modo l'époque des cartes perforées.

    Cette contrainte n'existe plus, c'est pourquoi il est déconseillé d'utiliser les sections en procédure division :
    Si une section est appelée par perform, alors tous les paragraphes inclus dans cette section sont exécutés en séquence.
    Je ne compte plus le nombre de fois où des développeurs ne connaissant pas ce fonctionnement ont généré des bugs sévères lors de maintenances.

    IJe décoinseille également fortement l'utilisation des perform through, seulement utiles aux développeurs adeptes des "go to".
    Un programme bien conçu n'en a nullement besoin.

  4. #4
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    La réponse dépend de comment on est arrivé à exécuter le paragraphe nommé "paragraphe" :

    Si le § "paragraphe" a été appelé par "perform paragraphe" ou "perform paragraphe through fin-paragraphe" alors, non, on n'exécutera pas la section qui suit, on reviendra juste après le "perform paragraphe"

    Si on est entré dans "paragraphe" par goto ou traitement en séquence, alors oui on exécutera la section qui suit
    Merci de votre réponse Escartefigue,
    le & "PARAGRAPHE" est apellé par un simple PERFORM (dans le & TETE)
    Seulement, on arrive à FIN-PARAGRAPHE par un GO TO, ce qui me fait me demander si on poursuit dans la SECTION TOTO ou pas...

    L'objectif est justement de réorganiser ce code .

  5. #5
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 044
    Points
    32 044
    Par défaut
    perso, je mettrais des displays partout, et je lancerait pour voir. C'est trop dépendant des compilateurs et des options de compil pour être laissé au hasard.

    Ce que j'ai vu une fois, ce sont des perform simples qui partaient en fall thru(le code continuait de descendre paragraphe après paragraphe). C'est là que j'ai pris l'habitude de toujours faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        PERFORM MON-PARAGRAPHE
           THRU MON-PARAGRAPHE-FIN
        .
    MON-PARAGRAPHE.
    
    
        .
    MON-PARAGRAPHE-FIN.
        EXIT.
    ça ne change strictement rien, en théorie, par rapport à un bête PERFORM MON-PARAGRAPHE, sauf que sur ce compilo-là, c'était une sécurité. D'ou la nécessité de vérifier en vrai avant de refactoriser(une initiative louable que l'on ne voit pas assez souvent).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  6. #6
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    perso, je mettrais des displays partout, et je lancerait pour voir. C'est trop dépendant des compilateurs et des options de compil pour être laissé au hasard.

    Ce que j'ai vu une fois, ce sont des perform simples qui partaient en fall thru(le code continuait de descendre paragraphe après paragraphe). C'est là que j'ai pris l'habitude de toujours faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        PERFORM MON-PARAGRAPHE
           THRU MON-PARAGRAPHE-FIN
        .
    MON-PARAGRAPHE.
    
    
        .
    MON-PARAGRAPHE-FIN.
        EXIT.
    ça ne change strictement rien, en théorie, par rapport à un bête PERFORM MON-PARAGRAPHE, sauf que sur ce compilo-là, c'était une sécurité. D'ou la nécessité de vérifier en vrai avant de refactoriser(une initiative louable que l'on ne voit pas assez souvent).
    Oui, c'est vrai, un bon vieux test et j'en serai sûr.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    p
    Ce que j'ai vu une fois, ce sont des perform simples qui partaient en fall thru (le code continuait de descendre paragraphe après paragraphe). C'est là que j'ai pris l'habitude de toujours faire des
    .
    Non, ça n'existe pas, un perform reste un perform et ce quelque soit la version cobol, la version du compilateur ou les options de compilation.

    La seule raison pour laquelle un perform simple (sans trough ou thru) exécute plusieurs paragraphes et qu'il appelle une section qui elle même contient plusieurs paragraphes

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par CyrilAtHome Voir le message
    Bonjour ,
    j'ai une question relative à du vieux code cobol qui utilise des GO TO, donc je fait appel aux souvenir des membres.

    Exemple de programme ci-dessous.
    La question est : est-ce que la SECTION TOTO va être exécutée dans la continuité de FIN-PARAGRAPHE ou bien , est-ce que le PERFORM d'une SECTION s'arrête comme avec un THRU ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    * début de programme
       PERFORM TATA.
    * fin de programme
    
    TATA SECTION.
    TETE. 
       PERFORM PARAGRAPHE
       ...
    
    ...
    PARAGRAPHE.
       ...
       GO TO FIN-PARAGRAPHE
       .
    
    FIN-PARAGRAPHE.
       EXIT.
    
    TOTO SECTION.
    TITI.
       DISPLAY 'B'
       .

    Merci d'avance
    Cyril
    Ce qui complique ta question, c'est que outre le paragraphe PARAGRAPHE, il y a aussi une section de niveau supérieur, section TATA.

    Donc, pour moi, mais je peux me tromper, on ne va pas exécuter la section TOTO, non pas pour des raisons liées à PARAGRAPHE, mais tout simplement parce que la section TATA est terminée.

    Ce qui veut dire que le PERFORM section s'exécute comme un PERFORM THRU.

    Mais ça serait bien de vérifier effectivement ...

    PERFORM procedure-name-1

    If procedure-name-1 is a section name, the
    return is made after the execution of the last statement of the last paragraph in
    the procedure-name-1 section
    Source - Enterprise COBOL for z/OS - LANGUAGE REFERENCE V4R2

  9. #9
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Test : PERFORM SECTION
    Citation Envoyé par escartefigue Voir le message
    Non, ça n'existe pas, un perform reste un perform et ce quelque soit la version cobol, la version du compilateur ou les options de compilation.

    La seule raison pour laquelle un perform simple (sans trough ou thru) exécute plusieurs paragraphes et qu'il appelle une section qui elle même contient plusieurs paragraphes
    Bon , j'ai testé ce matin,
    un PERFORM SECTION se comporte bien comme un PERFORM THRU.

    Merci à tous de vos réponses.

    Cordialement
    Cyril

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Absolument pas !

    Ce n'est pas parceque 2 instructions peuvent dans certains cas produire le même résultat, qu'elles sont équivalentes, et là elles ne le sont pas.

    Perform section exécute toute la section et seulement la section appelée
    Perform paragraphe exécute tout le paragraphe et seulement le paragraphe appelé

    Par contre perform paragraphe-1 thru / trough paragraphe-2 exécute tous les paragraphes entre paragraphe-1 et paragraphe-2 inclus

    bien sur, une section étant le plus souvent composée de plusieurs paragraphes, perform section te semble fonctionner comme le perform thru mais il n'en est rien. Avec l'option through, rien n'oblige à ce que ce soient tous les paragraphes d'une section alors qu'avec perform section, si.
    Et comme déjà mentionné plus haut, autant le perform section que le perform through sont à éviter.

  11. #11
    Membre averti
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2008
    Messages : 179
    Points : 350
    Points
    350
    Par défaut
    exactement escartefique, un perform section arretera l'execution à la premiere section suivante qu'il rencontrera.
    donc si nous avons dans une section un go to qui renvoie à un autre paragraphe dans la meme section ou une autre, il exécutera jusqu'à la prochaine section qu'il rencontre.
    peut importe le nombres de paragraphes dans la section et peu importe la section.
    erreur de debutant que j'ai plusieurs fois constaté , en passant, perform THRU executes toutes les paragraphes y compris le paragraphe du thru
    personnellment je n'utilise jamais les section , un bon perform thru est netement plus lisible, sachant que le paragraphe du thru ne contient jamais d'instructions

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 268
    Points
    38 268
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par xfanx Voir le message
    personnellment je n'utilise jamais les section , un bon perform thru est netement plus lisible, sachant que le paragraphe du thru ne contient jamais d'instructions
    Autant aller jusqu'au bout de la démarche, et ne jamais utiliser de perform thru non plus ! Ca ne sert absolument à rien

Discussions similaires

  1. [Débat] Votre avis sur la section "Dev Web"
    Par Marc Lussac dans le forum Evolutions du club
    Réponses: 31
    Dernier message: 03/03/2004, 21h55
  2. [CR] Grouper des sections de détail?
    Par rodrigue50 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 06/06/2003, 15h32
  3. [Conception] Section administration d'un site, tables
    Par bolo dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 02/04/2003, 15h17
  4. [éditeur de rapport]section
    Par Stessy dans le forum PowerAMC
    Réponses: 11
    Dernier message: 28/03/2003, 13h36

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