Comunidad de diseño web y desarrollo en internet online

Como programar mejor en JS (TIP 011) (Valores default)

Citar            
MensajeEscrito el 13 Nov 2014 10:32 pm
El tip de hoy es un truco que me gusta usar para compactar codigo. Imaginemos esto tenemos que leer el valor de un objecto que puede o no existir y encima de eso si no existe ponemos un valor por default.

Supongamos que tenemos un objeto que contiene nuestra configuración. Pero no sabemos si este objeto existe. Entonces podriamos hacer lo siguiente:

Código :

if (settings)
{
    if (settings.borderColor)
    {
        //Aqui estamos seguro que hay un valor que leer
    }
}


Y si quisieramos un valor por default podriamos hacer esto:

Código :

var boderColor = '#ffffff';
if (settings)
{
    if (settings.borderColor)
    {
        borderClor = settings.borderColor;
    }
}


Despues de esto podriamos usar el valor bordercolor, y si existe settings y la propiedad borderColor en settings obtendriamos ese valor, si no seria el de default '#FFFFFF', hasta ahora nada fuera de lo común. Pero como podriamos hacer esto en una sola linea de codigo?

Código :

var borderColor = (settings && settings.borderColor) || '#FFFFFF';


Asi de facil el && asegura que no se lea settings.borderColor a menos que exista settings. Evitando un bug posible si settings no existiera, y en caso que exista settings, pero no settings.borderColor entonces el || se asegura de usar '#FFFFFF', en caso que si exista se usa el primer valor del operador OR "||" es decir settings.borderColor.

Algo que tener en cuenta que si settings.borderColor fuese 0 se usaria '#FFFFFF', asi que hay que tener cuidado con su uso de este truco en circunstancias en que 0, false, o similares fuera un valor accpetable.

Por striwensko

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Nov 2014 12:13 pm
No se evita un bug, porque no lo es. Lo que se evita es que salte una excepción por identificador desconocido (variable indefinida).

El truco funciona porque por omisión (no por "default") cuando se evalúa el operador lógico AND se evalúa primero el primer operando listado y si ese operando vale falso, ya no tiene sentido seguir con el resto de los operandos porque toda la expresión evaluará a falso independientemente del valor de aquellos.

Y por el amor de Cervantes es por omisión, no por "default"!.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Nov 2014 07:46 pm
Muy cierto tu lo explicaste muy bien, basta con que dentro del operador AND cualquier valor sea FALSE para que toda la expresion sea FALSE, y cierto es una excepcion por una variable no declarada o no definida, depende del caso.

No te alteres tanto por que escriba con palabras en ingles, si algo nos ha enseñado switch case es saber que es default, break, creeme no escribo "default" para hacerte enojar jaja. Usamos muchas palabras en ingles y mas en nuestro ramo y es comun como TIP, ok, settings, borderColor (y todas las propiedades css)...

Y al leer tu comentario ya me dio la idea para el proximo Tip (consejo) como usar break para romper un loop una vez que has hecho lo que querias.

Por striwensko

15 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Nov 2014 12:01 pm
No es "loop", es bucle.

Mi problema no es con el inglés. Es cuando se usan términos en inglés cuando existe su equivalente en español perfectamente aplicable.

Y no todos los lenguajes tienen "default" en un "switch". De hecho algunos ni siguiera tienen "switch".

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 17 Nov 2014 03:59 pm
Ok esto es programacion o lengua española?.. Si es asi entonces seria mejor en lenguaje informatico decir "valor por defecto" -->ajueste predeterminado o preestablecido de algun parametro. Loop->Bucle entonces mejor decir ciclo o sentencia que se realiza repetidas veces ???????. Vamos que se entiende.

Por ignell

11 de clabLevel



Genero:Masculino  

Juegos con Html5

opera
Citar            
MensajeEscrito el 18 Nov 2014 12:08 pm
Ambos.

"Valor por defecto" ¿o sea que el valor es el resultado de un fallo?. Pues no. Eso es la traducción literal del inglés y está mal.

Bucle o ciclo está bien como "loop".

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.