Estoy mirando un poco de React y me encuentro con esto.
Su puta madre. Eso pasa en otros lenguajes?
Hombre, un comparador && que sea true a la izquierda siempre va a evaluar la derecha y si es false a la izquierda pues ya hemos terminado porque deben cumplirse las 2 condiciones. Eso creo que es así en casi todos los lenguajes. Java y C# al menos.
#19864 es una forma un tanto guarra de hacer esa expresión, pero bueno xD. En JS todo está permitido
es muy común... es una especie de azúcar sintáctico para un operador ternario....
needUpdate?"Yes":"No"
needUpdate && "Yes" || "No"
Con el operador ternario necesitas definir ambos casos "true" y "false"... en el otro caso no.
#19865 Tienes toda la razón del mundo, sentido tiene... pero joder, es como decir
if (true && 7) { ... }
#19866 Eso es, me parece una guarrada hacer eso y más aún que lo extiendan en la documentación oficial de un framework tan utilizado. Así pasa luego
A los de facebook no les hicieron bullying para que se leyeran Clean Code
#19864 #19868 si, lo hacen también otros lenguajes y se llama lazy evaluation.
Casos útiles en los que lo utilizo bastante:
if (obj && obj.property && obj.property.nested) {
// en lugar de obj.property.nested, que petaria en caso de no estar definido
}
// poner las funciones computacionalmente caras a la derecha hace
// que sólamente se ejecuten cuando sea realmente necesario.
if (cheapFunction() || expensiveFunction()) {
// en este caso, expensiveFunction sólo se ejecutará cuándo
// cheapFunction retorne un valor falso
}
if (cheapFunction() && expensiveFunction()) {
// en este caso, expensiveFunction sólo se ejecutará cuándo
// cheapFunction retorne un valor verdadero
}
Esto entra en combinación con el hecho que javascript evalúa las condiciones directamente con el valor de las variables/expresiones, sin hacerles ningún cast, y que además retornará el valor de la última variable/expresión evaluada. Es por eso que puedes usarlo tal y cómo se explica en el tutorial de react.
Ejemplos más sencillos serían:
// evalúa si value es truthy y lo retorna automáticamente
// si es falsy, retorna 'default value'
const foo = value => value || 'default value';
foo('hola'); // 'hola'
foo(null); // 'default value'
foo(''); // 'default value'
Cabe decir que esto puede llegar a provocar bastantes bugs así que no es del todo seguro usarlo.
Por ejemplo, típico caso de bug producido por utilizar este pattern con números:
const bar = value => value || 100;
bar(1); // 1
bar(null); // 100
bar(0); // 100
Un saludo!
#19871 Y no es mejor hacer un
if (!cheapFunction()) {
expensiveFunction()
}
if (cheapFunction()) {
expensiveFunction()
}
?
#19871 me parece una putisima mierda de behaviour y un code smell de la hostia. Desde luego que vaya puto cancer de lenguaje que es JS, a ver si muere ya joder.
#19872 un todo caso sería:
if (!cheapFunction()) {
if (expensiveFunction()) {
// do something
}
}
if (cheapFunction()) {
if (expensiveFunction()) {
// do something
}
}
Con lo estarías aumentando el nesting por cada condición. Ojo, no digo que sea mejor una cosa o la otra, simplemente el lenguaje te permite hacerlo y no veo porqué no aprovecharlo.
#19878 Si tienes que anidar 2 ifs no veo ningún problema, mucho más legible que lo del lazy evaluations xD
Si tienes que anidar bastantes más entonces quizá lo que tienes es un problema de diseño.
#19878 C te permite apuntar a zonas arbitrarias de memoria con los punteros y nadie en su sano juicio lo hace.
Cuando un retrasado se pone a testear los emails y se da cuenta que no esta utilizando un mocker y esta enviando los emails a los clientes:
Alguien tiene alguna experiencia (reciente) con 'Instagram developers'?
Quiero pasar un desarrollo a 'Live' y llevan revisandolo un par de días, tardan más tiempo que apple en validar las apps, spm.
Estoy scriptando un proceso y en el log que dejo tras la ejecución imprimo credenciales en texto plano. Queredme.
#19888 puedes hacer un meme de esos de un dev disparando un friday deploy al weekend y preguntandose alguna chorrada del js
yo lo haria pero me dan asco los memes de negros, los dev negros, y bueno... los negros en general