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 Perl Discussion :

modulariser, écrire un bon code


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut modulariser, écrire un bon code
    salut tout le monde!

    j ai ecris ce morceau de code:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    ##########################################################################
    # 1- für FA-CAN
    ##########################################################################
    my @nodes_FA_CAN_pdus_Refs = $root_FA_CAN->get_xpath('//pduRef');
    my @nodes_FA_CAN_signals = $root_FA_CAN->get_xpath('//signal');
    my @nodes_FA_CAN_signal_name = $root_FA_CAN->get_xpath('signals/signal/shortcut');
    my @nodes_FA_CAN_signal_Class_Ref = $root_FA_CAN->get_xpath('//signalClassRef');
     
    my @nodes_FA_CAN_pdus = $root_FA_CAN->get_xpath('//pdu');
    my @nodes_FA_CAN_pdu_name = $root_FA_CAN->get_xpath('pdus/pdu/shortcut');
    my @nodes_FA_CAN_Signal_Ref= $root_FA_CAN->get_xpath('pdus/pdu/signalInstances/signalInstance/signalRef');
    my @nodes_FA_CAN_TriggerConditionRef=$root_FA_CAN->get_xpath('pdus/pdu/timings/timing/triggerConditionRef');
     
    my @nodes_FA_CAN_Signal_Classes = $root_FA_CAN->get_xpath('//signalClass');
     
    my @nodes_FA_CAN_Trigger_conditions = $root_FA_CAN->get_xpath('//triggerConditions');
     
    ##########################################################################
    # 2- für A-CAN
    ##########################################################################
    my @nodes_A_CAN_pdus_Refs = $root_A_CAN->get_xpath('//pduRef');
    my @nodes_A_CAN_signals = $root_A_CAN->get_xpath('//signal');
    my @nodes_A_CAN_signal_name = $root_A_CAN->get_xpath('signals/signal/shortcut');
    my @nodes_A_CAN_signal_Class_Ref = $root_A_CAN->get_xpath('//signalClassRef');
     
    my @nodes_A_CAN_pdus = $root_A_CAN->get_xpath('//pdu');
    my @nodes_A_CAN_pdu_name = $root_A_CAN->get_xpath('pdus/pdu/shortcut');
    my @nodes_A_CAN_Signal_Ref= $root_A_CAN->get_xpath('pdus/pdu/signalInstances/signalInstance/signalRef');
    my @nodes_A_CAN_TriggerConditionRef=$root_A_CAN->get_xpath('pdus/pdu/timings/timing/triggerConditionRef');
     
    my @nodes_A_CAN_Signal_Classes = $root_A_CAN->get_xpath('//signalClass');
    my @nodes_A_CAN_Trigger_conditions = $root_A_CAN->get_xpath('//triggerConditions');
    ##########################################################################
    # 3- für PT-CAN
    ##########################################################################
    my @nodes_PT_CAN_pdus_Refs = $root_PT_CAN->get_xpath('//pduRef');
    my @nodes_PT_CAN_signals = $root_PT_CAN->get_xpath('//signal');
    my @nodes_PT_CAN_signal_name = $root_PT_CAN->get_xpath('signals/signal/shortcut');
    my @nodes_PT_CAN_signal_Class_Ref = $root_PT_CAN->get_xpath('//signalClassRef');
     
    my @nodes_PT_CAN_pdus = $root_PT_CAN->get_xpath('//pdu');
    my @nodes_PT_CAN_pdu_name = $root_PT_CAN->get_xpath('pdus/pdu/shortcut');
    my @nodes_PT_CAN_Signal_Ref= $root_PT_CAN->get_xpath('pdus/pdu/signalInstances/signalInstance/signalRef');
    my @nodes_PT_CAN_TriggerConditionRef=$root_PT_CAN->get_xpath('pdus/pdu/timings/timing/triggerConditionRef');
     
    my @nodes_PT_CAN_Signal_Classes = $root_PT_CAN->get_xpath('//signalClass');
    my @nodes_PT_CAN_Trigger_conditions = $root_PT_CAN->get_xpath('//triggerConditions');
    c est a dire je fais la meme tache 3 fois.
    donc j aime bien ecrire une fonction qui fait ca.

    j ai besion des listes @nodes_FA_CAN_pdus_Refs, @nodes_FA_CAN_signals...
    pour le reste du mon code.

    ma question quelle est la demarche a suivre ici?
    dois je ecrire une subroutine dans mon main code ou bien dois je ecrire une module est acceder au subroutine depuis mon main?
    comment regrouper les subs? c a dire dois je ecrire une fonction ou j obtiens les listes pour fa, a et pt can de la maniere suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sub get_nodes_fa_can
    {...}
    sub get_nodes_a_can
    {...}
    sub get_nodes_pt_can
    {...}
    ou bien je m oriente vers les listes directement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    sub get_nodes_pdus{...} #pour les fa-can, a-can et pt-can
    sub get_nodes_signals{...} #pour les fa-can, a-can et pt-can
    .
    .
    .
    j espere etre clair dans ma question.
    merci pour votre aide!

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Concernant tes données, as-tu réfléchi à les regrouper pour diminuer le nombre de variable pour y accéder ?
    Un peu comme ceci :

    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
    23
    24
    25
    26
    27
    my %nodes = {
    ##########################################################################
    # 1- für FA-CAN
    ##########################################################################
      FA_CAN => {
        pdus_Refs => $root_FA_CAN->get_xpath('//pduRef'),
        signals      =>$root_FA_CAN->get_xpath('//signal'),
        signal_name => $root_FA_CAN->get_xpath('signals/signal/shortcut'),
        Signal_Class_Ref => $root_FA_CAN->get_xpath('//signalClassRef'),
        pdus     => $root_FA_CAN->get_xpath('//pdu'),
        pdu_name => $root_FA_CAN->get_xpath('pdus/pdu/shortcut'),
        Signal_Ref => $root_FA_CAN->get_xpath('pdus/pdu/signalInstances/signalInstance/signalRef'),
        TriggerConditionRef => $root_FA_CAN->get_xpath('pdus/pdu/timings/timing/triggerConditionRef'),
        Signal_Classes => $root_FA_CAN->get_xpath('//signalClass'),
        Trigger_conditions => $root_FA_CAN->get_xpath('//triggerConditions'),
      },
      A_CAN => {
    ##########################################################################
    # 2- für A-CAN
    ##########################################################################
        pdus_Refs => $root_A_CAN->get_xpath('//pduRef'),
        signals => $root_A_CAN->get_xpath('//signal'),
        signal_name => $root_A_CAN->get_xpath('signals/signal/shortcut'),
        signal_Class_Ref = $root_A_CAN->get_xpath('//signalClassRef'),
        pdus => $root_A_CAN->get_xpath('//pdu'),
    ...
    }
    Sinon, il n'est pas absolument nécessaire de créer un module si ce n'est pour y mettre qu'une seule fonction.
    Par contre, j'ai pas bien compris les deux types d'organisation de fonction proposées.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    87
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 87
    Par défaut
    j ai cette sub:
    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
    sub set_nodes
    {
    my $root = $_;
    my @nodes_pdus_Refs = $root->get_xpath('//pduRef');
    my @nodes_signals = $root->get_xpath('//signal');
    my @nodes_signal_name = $root->get_xpath('signals/signal/shortcut');
    my @nodes_signal_Class_Ref = $root->get_xpath('//signalClassRef');
     
    my @nodes_pdus = $root->get_xpath('//pdu');
    my @nodes_pdu_name = $root->get_xpath('pdus/pdu/shortcut');
    my @nodes_Signal_Ref= $root->get_xpath('pdus/pdu/signalInstances/signalInstance/signalRef');
    my @nodes_TriggerConditionRef=$root->get_xpath('pdus/pdu/timings/timing/triggerConditionRef');
     
    my @nodes_Signal_Classes = $root->get_xpath('//signalClass');
     
    my @nodes_Trigger_conditions = $root->get_xpath('//triggerConditions');
    return;
    }
    avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    &set_nodes($root_FA_CAN);
    &set_nodes($root_A_CAN);
    &set_nodes($root_PT_CAN);
    j obtiens mes listes.
    mais je pouvoir acceder au liste au dehors de la sub!
    ca le les utilises apres!

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Dans ce cas, organise comme je t'ai indiqué, et fait en sorte que ta fonction retourne cette structure :

    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
    23
    24
    sub set_nodes
    {
      my $root = $_;
     
      return {
        pdus_Refs => $root->get_xpath('//pduRef'),
        signals    => $root->get_xpath('//signal'),
        signal_name => $root->get_xpath('signals/signal/shortcut'),
        signal_Class_Ref => $root->get_xpath('//signalClassRef'),
     
        pdus => $root->get_xpath('//pdu'),
        pdu_name => $root->get_xpath('pdus/pdu/shortcut'),
        Signal_Ref => $root->get_xpath('pdus/pdu/signalInstances/signalInstance/signalRef'),
        TriggerConditionRef => $root->get_xpath('pdus/pdu/timings/timing/triggerConditionRef'),
     
        Signal_Classes => $root->get_xpath('//signalClass'),
     
        Trigger_conditions => $root->get_xpath('//triggerConditions'),
      };
    }
    ...
    $FA_CAN = set_nodes($root_FA_CAN); # le & est déprécié pour l'appel de fonction
    $A_CAN = set_nodes($root_A_CAN);
    $PT_CAN = set_nodes($root_PT_CAN);
    Les valeurs retournées sont des références de hash, à utiliser :

Discussions similaires

  1. [PHP 5.2] Comment écrire ce simple code php ?
    Par Jean-Seba dans le forum Langage
    Réponses: 9
    Dernier message: 31/07/2011, 12h06
  2. Réponses: 5
    Dernier message: 08/03/2011, 15h26
  3. [1.x] [sf 1.4.x] Redirection ne renvoyant pas le bon code http
    Par Cethywolf dans le forum Symfony
    Réponses: 6
    Dernier message: 17/01/2010, 18h28
  4. Comment récupérer le bon Code Erreur par le tray-catch
    Par belaggoun2000 dans le forum C++Builder
    Réponses: 1
    Dernier message: 16/02/2009, 14h03
  5. [Sécurité] Ecrire du bon code PHP
    Par LordBob dans le forum Langage
    Réponses: 15
    Dernier message: 17/11/2005, 22h51

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