# Función Choose / fDecidirDato

**URL:** <https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468>\
**Category:** Velneo\
**Created:** [31 Agosto, 2012 08:32 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468 "2012-08-31T08:32:48Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![jordimas](https://avatars.discourse-cdn.com/v4/letter/j/f05b48/32.png) [@jordimas](https://foros.velneo.com/u/jordimas)\
**Post date:** [31 Agosto, 2012 08:32 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/1 "2012-08-31T08:32:48Z")

</div>

Hola,  
Pregunta para nota: ¿Por que la función choose evalua los 3 parámetros siempre?

Ejemplo:  
choose(  
1=1,  
fun:MENSAJE\_HOLA@Test.dat(),  
fun:MENSAJE\_ADIOS@Test.dat()  
)

Resultado:  
Hola  
Adios

Esto funciona así en 6.X y en V7.  
¿No sería más óptimo evaluar la condición y según el resultado evaluar una sola parte, al igual que un IF?  
¿Cuál es el motivo?

Gracias.  
Saludos, Jordi.

(javascript, js)

---

<div class="post-metadata">

**Author:** ![manuel.rd](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/manuel.rd/32/3508_2.png) [@manuel.rd](https://foros.velneo.com/u/manuel.rd)\
**Post date:** [31 Agosto, 2012 09:41 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/2 "2012-08-31T09:41:44Z")

</div>

Buenas,  
a mi solo me muestra la el hola.

---

<div class="post-metadata">

**Author:** ![benito.lavandeira](https://avatars.discourse-cdn.com/v4/letter/b/439d5e/32.png) [@benito.lavandeira](https://foros.velneo.com/u/benito.lavandeira)\
**Post date:** [31 Agosto, 2012 09:52 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/3 "2012-08-31T09:52:42Z")

</div>

Que raro, si eso fuese así estaríamos apañados

---

<div class="post-metadata">

**Author:** ![mamestre](https://avatars.discourse-cdn.com/v4/letter/m/bbce88/32.png) [@mamestre](https://foros.velneo.com/u/mamestre)\
**Post date:** [31 Agosto, 2012 10:23 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/4 "2012-08-31T10:23:16Z")

</div>

Pues lo estamos.  
Chequeado.  
Estamos hablando de que ejecuta las funciones para obtener el valor.  
En teoría debería comportarse como un “if” y sólo evaluar cuando se cumple la condición.

---

<div class="post-metadata">

**Author:** ![jordimas](https://avatars.discourse-cdn.com/v4/letter/j/f05b48/32.png) [@jordimas](https://foros.velneo.com/u/jordimas)\
**Post date:** [31 Agosto, 2012 10:33 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/5 "2012-08-31T10:33:25Z")

</div>

¿Lo habéis probado? Lo acabamos de probar en windows 7 y linux.

Cuándo digo evaluar no digo que el retorno del choose sea incorrecto, digo que las 2 funciones se ejecutan y si dentro tienen un comando “Mensaje” se imprimen ambos mensajes, si tuvieran una alta de ficha se harian las 2 altas, etc.

Lo más común en el choose() es que sean operaciones con variables y no afecta, pero al ser funciones que pueden modificar registros ya es más peligroso.

¿Podéis hacer la prueba con un código como al de arriba?

Saludos, Jordi Mas.

---

<div class="post-metadata">

**Author:** ![jorge-velasco](https://avatars.discourse-cdn.com/v4/letter/j/3bc359/32.png) [@jorge-velasco](https://foros.velneo.com/u/jorge-velasco)\
**Post date:** [31 Agosto, 2012 14:15 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/6 "2012-08-31T14:15:40Z")

</div>

Buenas.

La instrucción choose evalúa todos los parámetros y después devuelve el correcto…

Si no recuerdo mal ya en 6x el funcionamiento era así.

Por eso no es recomendable el uso de choose con muchos parámetros.

[http://velneo.es/info\_v7\_75\_es/velneo\_vdevelop\_v7/proyectos\_objetos\_y\_editores/asistente\_de\_formulas/funciones\_estandar/funciones\_basicas/choose/](http://velneo.es/info_v7_75_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/asistente_de_formulas/funciones_estandar/funciones_basicas/choose/)

Un saludo.

---

<div class="post-metadata">

**Author:** ![comercial](https://avatars.discourse-cdn.com/v4/letter/c/94ad74/32.png) [@comercial](https://foros.velneo.com/u/comercial)\
**Post date:** [31 Agosto, 2012 21:20 UTC](https://foros.velneo.com/t/funcion-choose-fdecidirdato/5468/7 "2012-08-31T21:20:37Z")

</div>

Y digo yo, puedes usar un **if else** en su lugar, ¿no?, cualquiera sabe cual es el motivo de la existencia de este fdecidirdato()/choose(), si se evaluan los dos resultados, seguro que alguna explicación tendrá el ‘Master supremo’ para hberlo ‘parido’ de esa forma. Por cierto el equivalente sería: [http://msdn.microsoft.com/es-es/library/27ydhh0d(v=vs.80).aspx](http://msdn.microsoft.com/es-es/library/27ydhh0d%28v=vs.80%29.aspx). Pero en este no se evaluan las dos respuestas (no se si se permiten funciones en ellas ¿?¿?).

Edito y rectifico, me ha dado por leer un poco mas y he visto esto:  
  
**a = 10  
b = 0  
result = IIf(b 0, a / b, 0)**

While the programmer intends to avoid raising an error by performing a division by zero, whenever b is zero the error will actually happen. This is because the code in the snippet is to be read as

a = 10  
b = 0  
\_temp1 = a / b ’ Error if b = 0  
\_temp2 = 0  
\_temp3 = b 0  
result = IIf(\_temp3, \_temp1 , \_temp2)

This issue makes the IIf() call less useful than the conditional operator. To solve this issue, Microsoft developers had considered[2] converting IIf to an intrinsic function; had this happened, the compiler would have been able to perform type inference and short-circuiting by replacing the function call with inline code.

aquí:[http://en.wikipedia.org/wiki/IIf](http://en.wikipedia.org/wiki/IIf)

Saludos.  
Miguel.
