¿Existe una mejor manera de escribir v = (v == 0? 1: 0); [cerrado]
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.
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.
Ya que 0
es un false
valor y 1
es un true
valor.
v = (v ? 0 : 1);
Si está contento de usar true
y false
en lugar de números
v = !v;
o si deben ser números:
v = +!v; /* Boolean invert v then cast back to a Number */
v = (v + 1) % 2
y si necesita recorrer más valores, simplemente cambie 2
por (n + 1)
. Digamos que necesitas realizar un ciclo 0,1,2, solo hazlo v = (v + 1) % 3
.
Podrías escribir una función para ello y usarla como:
v = inv(v)