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

 C Discussion :

Opérateur ternaire ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Opérateur ternaire ?
    Bonsoir ,

    Je me posais une quesiton

    Est-ce possible d'implémenter cette condition avec une opération ternaire d'une ligne ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (arrayII[0]==arrayII[1])  arrayII[0]=tmpArrayII[2];
    else if (arrayII[0]==arrayII[2])  arrayII[0]=tmpArrayII[0];
    else arrayII[0]=tmpArrayII[1] ;

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Oui, mais quel intérêt ?

    Ta condition est lisible (sans que je comprenne ce que tu y fais mais peu importe).

    J'ai peur qu'avec un if ternaire (qui ne prend qu'une seule ligne), tu perdes en lisibilité et que de toute façon, l'optimiseur du compilateur ne sache pas mieux faire.

    Donc à mon avis (et sans plus de contexte), je garderais le test comme cela.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Attention c'est quand même illisible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arrayII[0] = (arrayII[0]==arrayII[1]) ? tmpArrayII[2] : (arrayII[0]==arrayII[2] ? tmpArrayII[0] : tmpArrayII[1]);

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Avec un seul opérateur ternaire, ce n'est pas possible, mais avec deux, oui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    arrayII[0] = ( arrayII[0]==arrayII[1]
                                ? tmpArrayII[2]
                                : arrayII[0]==arrayII[2]  
                                              ? tmpArrayII[0]
                                              : tmpArrayII[1] );
    Par contre, imbriquer des opérateurs ternaires, ce n'est pas très conseillé pour la lisibilité

    Par contre, je me demande si une boucle ne pourrait pas être un peu plus lisible et plus flexible face à l'évolution de ton code (si j'ai bien compris ce que tu tentes de faire ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i = 1;
    int max = 3;
    while( i != max && arrayII[0] != arrayII[i] )
             i++;
     
    arrayII[0] = tmpArrayII[ (i+1) % max ];
    EDIT : grillé par ram-000 et orfix

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Joe,

    Et voilà, on revient toujours au même problème : vouloir gagner une ligne ou 2, au détriment de la lisibilité.

    Mauvaise idée.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonsoir ,

    Merci de vos réponses .

    En effet , je vais me concentrer sur la lisibilité et garder la boucle if .

    @Neckara D'ailleurs ton while est pas mal aussi . Elle fonctionne , mais elle peut être déroutante à côté des 3 lignes if de base :-)

  7. #7
    Membre éclairé
    Profil pro
    Retraité
    Inscrit en
    Novembre 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2009
    Messages : 331
    Par défaut
    Pour améliorer la visibilité, on peut utiliser le préprocesseur. Je n'ai pas regardé le détail de l'opération que tu souhaite faire, mais voilà un petit exemple des possibilités:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #define MIN2(a, b) (((a) < (b)) ? a : b)
    #define MAX2(a, b) (((a) > (b)) ? a : b)
    #define MIN3(a, b, c) (((a) < (b)) ? MIN2(a, c) : MIN2(b, c))
    #define MAX3(a, b, c) (((a) > (b)) ? MAX2(a, c) : MAX2(b, c))
    Attention aux redoublements de parenthèses: ils sont nécessaires.
    Il ne reste plus qu'a utiliser MAX3() avec trois arguments...

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchoumo Voir le message
    En effet , je vais me concentrer sur la lisibilité et garder la boucle if .
    "boucle if" ça faisait longtemps que je l'avais pas vue celle là...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Meme reponse que les autres, avec une precision :

    Citation Envoyé par tchoumo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (arrayII[0]==arrayII[1])  arrayII[0]=tmpArrayII[2];
    else if (arrayII[0]==arrayII[2])  arrayII[0]=tmpArrayII[0];
    else arrayII[0]=tmpArrayII[1] ;
    Arrete de coder 5 minutes, prends du recul sur ton code : tu as arrayII et tmpArrayII, ce qui laisse supposer que tu as probablement aussi arrayI et tmpArrayI. Ces noms de variables sont illisibles, et le risque de te melanger les pinceaux est (tres) grand.

    Si tu as un seul tableau, l'appeler tab, array ou un truc du genre n'est pas problematique en soi. Mais si tu en as plusieurs, il vaut mieux les nommer explicitement en fonction de ce qu'ils contiennent.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  10. #10
    Membre confirmé Avatar de satenske
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2011
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 143
    Par défaut
    Citation Envoyé par tchoumo Voir le message
    Bonsoir ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (arrayII[0]==arrayII[1])  arrayII[0]=tmpArrayII[2];
    else if (arrayII[0]==arrayII[2])  arrayII[0]=tmpArrayII[0];
    else arrayII[0]=tmpArrayII[1] ;
    Je ne peux que plussoyer gangsoleil, mais j'ajouterai aussi que ce n'est pas forcément une bonne chose de toujours vouloir compacter le code.
    Je trouve une disposition comme ci-dessous plus lisible… (Rien que des espaces feraient du bien à ton code !)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (arrayII[0] == arrayII[1]) {
        arrayII[0] = tmpArrayII[2];
    } else if (arrayII[0] == arrayII[2]) {
        arrayII[0] = tmpArrayII[0];
    } else {
        arrayII[0] = tmpArrayII[1] ;
    }
    Je trouve également qu'il est bien de systématiquement mettre des accolades, bien que ce soit discutable.

    Après, l'idée de pvincent est tout simplement génial ! :-)

Discussions similaires

  1. Réponses: 12
    Dernier message: 11/04/2006, 11h41
  2. opérateur ternaire
    Par the big ben 5 dans le forum Langage
    Réponses: 7
    Dernier message: 23/02/2006, 18h06
  3. Equivalant opérateur ternaire C++
    Par Pero dans le forum Langage
    Réponses: 5
    Dernier message: 07/10/2005, 09h44
  4. [java] pb Opérateur ternaire
    Par phileme dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 04/07/2004, 13h10
  5. Opérateur ternaire
    Par MASSAKA dans le forum Langage
    Réponses: 14
    Dernier message: 13/05/2004, 15h50

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