Est-il une meilleure façon d'écrire v = (v == 0 ? 1 : 0);

Je veux basculer une variable entre 0 et 1. Si c'est 0 je veux le mettre à 1, sinon si c'est 1 je veux le mettre à 0.

C'est une opération fondamentale que j'ai à écrire aussi souvent que je voudrais étudier la plus courte, la plus claire possible de la façon de faire. Voici mon meilleur jusqu'à présent:

v = (v == 0 ? 1 : 0);

Pouvez-vous améliorer sur ce point?

Edit: la question est de savoir comment écrire la déclaration ci-dessus dans le moins de caractères, tout en conservant la clarté - comment est-ce 'pas une vraie question"? Ce n'était pas destiné à être un code de golf de l'exercice, bien que quelques réponses intéressantes viennent de personnes qui s'adressent à elle en tant que de golf - il est agréable de voir de golf utilisé dans un esprit constructif et de réflexion manière.

  • Cela ressemble déjà simple/clair/court pour moi.
  • la ruse: v = +!v;
  • Si "mieux" signifie également "plus rapidement": jsperf.com/v-0-1-0.
  • Interressant, mais je pense que vous devriez tester avec l'affectation également, comme v ^= 1; ne se comportent pas de la même chose que v = v ^ 1;: jsperf.com/v-1-v
  • C'est aussi simple que cela devrait obtenir. Toutes les autres réponses, je vois une source de confusion, et certains d'entre eux de changer la logique; introduire des bogues.
  • comment alors? Je ne vois pas v = v ^ 1 sur la page liée.
  • Personne n'a suggéré d'utiliser v = v ^ 1;, mais pimvdb:s test évalué l'expression v ^ 1, ce qui équivaut à un test de v = v ^ 1; au lieu de v ^= 1;. Le résultat est le même, mais ils ne fonctionnent pas exactement de la même.
  • Pourquoi ne pas utiliser if(v == 0) { v = 1; } else { v = 0; }? Je doute qu'il y est une différence dans la vitesse et il est beaucoup plus facile à lire si vous êtes nouveau dans le code. Si c'est plus facile à lire et à comprendre et il n'y a pas de réelle différence de performance, alors c'est mieux.
  • Je dois avouer que cette question est très intéressante, même si elle semble si simple...
  • Votre chemin est le plus clair, donc il n'y a pas de raison de le changer. Il est également robuste, car la valeur pour v est garanti pour être dans la plage souhaitée, indépendamment de la valeur qu'il avait avant. Et cette robustesse est encore parfaitement visible.
  • Je suppose que j'ai mal compris. Lorsque vous avez dit qu'ils ne le sont pas "se comporter" de même, je pensais que vous vouliez dire, le résultat était différent, mais je suppose que vous parlez des différences de vitesse seul.
  • Je suis aussi un spectacle de freak mais pour moi personnellement aucun gain de performances (surtout quand son petit) vaut la peine de sacrifier la lisibilité du code. C'est pourquoi je vote pour cette solution.
  • Voter pour qui solution?
  • J'ai voté pour l'OP de la solution (v = (v == 0 ? 1 : 0);) parce qu'il montre clairement la logique derrière cette ligne de code. Je ne dis pas que d'autres solutions sont mauvaises, mais à partir de mon expérience personnelle coller à la logique derrière le code est toujours la meilleure manière en particulier lorsque vous travaillez avec d'autres personnes ou si il ya une possibilité que le code peut être changé beaucoup de choses dans le futur par d'autres.
  • Non, vous avez voté pour la question. Les Votes pour les questions ne sont pas compare les votes pour les réponses, c'est par rapport à des voix à d'autres questions.
  • Je ne comprends pas quel est le big deal? J'ai voté pour la Fpo solution à l'intérieur de son / le sien question parce qu'il / elle m'a demandé si il ya une meilleure façon de l'un qu'il / elle est à l'aide de / a fournis.
  • Ce n'est pas une grosse affaire, mais ce n'est tout simplement pas la façon dont le site fonctionne. Bien sûr, vous pouvez voter pour la question, mais qui ne fonctionne pas comme un vote pour une réponse.
  • Je n'ai pas le droit de vote pour les OP post afin de le qualifier comme réponse, je voulais juste lui montrer que sa solution originale a été le meilleur à mon avis.
  • Vous pouvez utiliser n'importe quelle raison vous voulez, mais le vote sera juste un vote pour une bonne question.
  • Exactement ce que dois-je faire pour le rendre absolument clair que je n'aime pas ce que mon vote est utilisé en dehors du fait qu'il permet à l'OP savoir que son / le sien est le meilleur à mon avis? Voulez-vous arrêter de faire des remarques si je upvote de votre poste?
  • Je vais essayer de vous faire comprendre que votre vote ne sera pas interprété de cette façon, mais vous pouvez continuer à penser que si vous le souhaitez.
  • puis-je détecter un soupçon de perfectionnisme? 😉
  • ou probablement v^=1
  • Une meilleure solution à donner votre avis serait de créer une réponse qui dit que vous vous sentez à l'original est le meilleur moyen, et expliquer POURQUOI vous vous sentez que c'est le cas. qui permet aussi à d'autres gens de facilement côté avec votre réponse par vote it up.
  • van der Linded je n'aime pas la redondance. Tout ce que j'avais à dire a été dit dans mes commentaires sur le post original.
  • Voir ma réponse!
  • Tout ce que vous utilisez, faire une macro afin de ne pas répéter tous sur la place - oh, si vous étiez à l'aide de C je veux dire. Faire une fonction 🙂
  • Cette question semble être hors-sujet parce que c'est un code de golf de question
  • Votre question fait l'un des greatests les machines de Rube Goldberg dans l'ensemble de stackoverflow.
  • Vous pourriez ne pas voulez obtenir la fantaisie. Cause que vous voulez le garder lisible.

InformationsquelleAutor Ollie Glass | 2011-08-02