¿Existe una mejor manera de escribir v = (v == 0? 1: 0); [cerrado]

Resuelto Ollie Glass asked hace 13 años • 0 respuestas

Quiero alternar una variable entre 0 y 1. Si es 0, quiero establecerla en 1; de lo contrario, si es 1, quiero establecerla en 0.

Esta es una operación tan fundamental que escribo con tanta frecuencia que me gustaría investigar la forma más corta y clara posible de realizarla. Aquí está mi mejor hasta ahora:

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

¿Puedes mejorar esto?

Editar: la pregunta es cómo escribir la declaración anterior en la menor cantidad de caracteres manteniendo la claridad: ¿cómo es que esto "no es una pregunta real"? Esto no pretendía ser un ejercicio de golf codificado, aunque han surgido algunas respuestas interesantes de personas que lo abordan como golf: es agradable ver que el golf se utiliza de una manera constructiva y que invita a la reflexión.

Ollie Glass avatar Aug 02 '11 18:08 Ollie Glass
Aceptado

Simplemente puedes usar:

v = 1 - v;

Por supuesto, esto supone que la variable se inicializa correctamente, es decir, que sólo tiene el valor 0 o 1.

Otro método que es más corto pero utiliza un operador menos común:

v ^= 1;

Editar:

Para ser claro; Nunca abordé esta pregunta como código de golf, solo para encontrar una forma breve de realizar la tarea sin utilizar trucos que oscurezcan, como los efectos secundarios de los operadores.

Guffa avatar Aug 02 '2011 11:08 Guffa

Ya que 0es un falsevalor y 1es un truevalor.

v = (v ? 0 : 1);

Si está contento de usar truey falseen lugar de números

v = !v;

o si deben ser números:

v = +!v; /* Boolean invert v then cast back to a Number */
Quentin avatar Aug 02 '2011 11:08 Quentin

v = (v + 1) % 2y si necesita recorrer más valores, simplemente cambie 2por (n + 1). Digamos que necesitas realizar un ciclo 0,1,2, solo hazlo v = (v + 1) % 3.

Prusse avatar Aug 02 '2011 11:08 Prusse

Podrías escribir una función para ello y usarla como:

v = inv(v)

Daniel avatar Aug 02 '2011 11:08 Daniel