Establecer valores por defecto en variables de Blogger

En mi articulo anterior sobre como validar tipos de datos en variables de Blogger expliqué como evitar errores relacionados con los tipos de datos. Aunque esto puede ser suficiente para mantener la integridad del código, hoy nos enfrentamos al ingreso de un valor del tipo correcto, pero que esta fuera del rango permitido, y eso es lo que vamos a manejar en este artículo.

Situación

Supongamos que tenemos una variable en donde le pedimos al usuario que escriba el nombre de una fruta, y en su lugar ingresa un valor que, aunque es del tipo correcto, no tiene sentido en el contexto de la variable:

<!-- Ingrese manzana, pera o uva -->
<Variable name="fruta" description="Fruta" type="string" value="gato"/>

<!-- Mostrando fruta -->
<b:eval expr='"La fruta es:" + data:skin.vars.fruta'/>

En este caso, el usuario ingresó "gato" en lugar de una fruta y aunque el tipo de dato es correcto, el valor carece de sentido. Este es un ejemplo simple, pero sirve para ilustrar el problema de no tener el control sobre los valores que el usuario ingresa.

Matriz de valores permitidos

Con esta tecnica, podemos definir una matriz de valores permitidos y si el valor ingresado no está en la matriz, se establece un valor predeterminado. Este método es útil para todo tipo de variables:

<b:with value='data:skin.vars.fruta' var='fruta'>
  <b:eval expr='data:fruta in ["manzana", "pera", "fresa"] ? data:fruta : "manzana"'/>
</b:with>
<b:with value='data:skin.vars.numero' var='numero'>
  <b:eval expr='data:numero in [10, 20, 30] ? data:numero : 10'/>
</b:with>
<b:with value='data:skin.vars.booleano' var='booleano'>
  <b:eval expr='data:booleano in [true, false] ? data:booleano : false'/>
</b:with>

En todos los casos anteriores, si el valor ingresado en la variable no se encuentra en la lista de valores que hemos definido, se mostrará el valor establecido por defecto. Esto garantiza que siempre se muestre un valor aceptable en nuestra plantilla, con el objetivo de evitar errores.

Rango de valores permitidos

El método anterior es útil para la mayoría de los casos, pero esta limitado a valores exactos, por ejemplo si el valor permitido es un número del 1 y 100, la matriz seria muy larga y excedería el límite de 40 tokens de Blogger por expresión. Para estos casos podemos cambiar el enfoque y evaluar si el valor ingresado esta dentro de un rango numérico:

<b:with value='data:skin.vars.rango' var='rango'>
<b:with value='data:rango + 0 == data:rango ? (data:rango * 1) : 5' var='rango'>
  <b:eval expr='data:rango >= 1 and data:rango <= 100 ? data:rango : 5'/>
</b:with>
</b:with>

En este caso, primero validamos que el valor sea realmente un número, de no ser así se establece un valor predeterminado de 5. Luego se evalua si el valor está en el rango del 1 al 100, caso contrario, se establece un valor predeterminado de 5.

Lista de valores permitidos

Hasta ahora hemos visto como manejar valores permitidos y rangos de valores permitidos, pero en todos estos casos solo obtendremos un valor a la vez. Si necesitamos mostrar más de un valor, podemos usar una lista de valores permitidos.

<b:with value='data:skin.vars.list + "."' var='list'>
  <b:loop values='["facebook", "twitter", "instagram"]' var='social'>
    <b:if cond='data:list contains data:social'>
      <data:social/>
    </b:if>
  </b:loop>
</b:with>

Para empezar, lo que hicimos fue asegurarnos de que la variable list sea un string, usando el método de validacion que explique en mi entrada anterior. Luego, creamos un bucle que recorre una lista de valores permitidos. Por último, evaluamos cada valor verificando si está en la lista y de ser así, lo mostramos. Nuestra variable debería verse algo asi:

<Variable name="list" description="Redes" type="string" value="facebook,instagram"/>

De esta manera, si el usuario ingresa un valor que no esta en la lista, ese valor no se mostrará.

Conclusión

Con estas técnicas, podemos asegurarnos de que los valores ingresados por el usuario sean los correctos y asi asegurar un correcto funcionamiento de la plantilla. Aunque estas técnicas no son infalibles, son una buena manera de evitar errores comunes y mantener la integridad del código.

Espero que este artículo haya sido de ayuda y si tienes alguna pregunta, no dudes en dejar un comentario. Muchas gracias por pasar y leer.