Result y IIf - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Bases de Datos (https://gambas-es.org/forum-6.html) +--- Tema: Result y IIf (/thread-1153.html) |
Result y IIf - guizans - 29-12-2022 Hola a todos. Hago una llamada a un método que llama a una base de datos tipo SQlite3 y me devuelve un Result. Para evitar errores mas adelante del código compruebo si la búsqueda ha tenido éxito. Y lo puedo hacer así: Código: If resultado.Available Then Pero considero que una forma mas elegante de hacer esto es con un IIf Código: r = IIf(resultado.Available, resultado["ID"], -1) Pero este código me da error si el resultado está vacío. Acabo de leer en la documentación que IIf evalúa la expresión verdadera y falsa y por eso me da error. Parece un comportamiento anti intuitivo desde mi punto vista, aunque supongo que su motivo tendrá. Es una pena ya que usar IIf me ahorra líneas y parece mas elegante. Un saludo. RE: Result y IIf - Shell - 30-12-2022 (29-12-2022, 22:44)guizans escribió: Pero este código me da error si el resultado está vacío. Acabo de leer en la documentación que IIf evalúa la expresión verdadera y falsa y por eso me da error. Parece un comportamiento anti intuitivo desde mi punto vista, aunque supongo que su motivo tendrá. Es una pena ya que usar IIf me ahorra líneas y parece mas elegante. ¿ Y si pruebas con "If" en vez de "IIf" de esta forma ?. Código: r = If(resultado.Available, resultado["ID"], -1) Se parecen mucho. Supongo que la de forma de la sentencia abreviada de If, partió de IIf. Tendré que acostumbrarme a la forma abreviada de If. La estoy usando con settings, ejemplo: Código: Public Sub Form_Open() Pertenece a "Gambas from a Zip" : Y que todos debemos leer. Gran manual. (Publicidad no subliminal) Programming Gambas from Zip/SaveSettings Saludos RE: Result y IIf - Shordi - 30-12-2022 (29-12-2022, 22:44)guizans escribió: Hola a todos.Mmmm... sin ver tu código completo no digo esto en voz muy alta, pero así visto me parece que tu función de retornar el Result es, cuando menos confusa. Resultado ya indica por sí mismo si la búsqueda a sido exitosa o no, por lo que volver a preguntar por ello es un tanto inútil... aunque no conozco que visibilidad tiene tu variable resultado ni cómo estás usando la función que consulta la tabla de la BDD. ¿Podrías pasar el código completo? Saludos. RE: Result y IIf - guizans - 30-12-2022 Hola. Shordi: El código es un ejemplo de como IIf evalúa las expresiones antes de hacer la evaluación, no está incluido en ningún programa. Comento esto como curiosidad, me llamo mucho la atención. Shell: No conocía la forma abreviada de If, me la apunto y también me apunto el manual. Un saludo a todos. RE: Result y IIf - Shordi - 31-12-2022 (30-12-2022, 23:19)guizans escribió: Hola.Ah... vale. La evaluación de todos los elementos de las expresiones es un "default" de las operaciones de gambas... hasta donde yo conozco. Así si escribes [code] El compilador toma el valor del Boolean e y el texto del objeto y después evalua si el boolean es = a True y si el texto es = "". Por tanto el boolean se evalua 2 veces (para mirarlo y para compararlo) y el texto también (para extraerlo y para compararlo). Si quieres velocidad tienes que reformularlo así: [code] Un booleano es cierto si no es 0, un texto es falso si está vacío por defecto. La construcción ... and if ... (o or if, claro) ataja la cadena de evaluaciones, por lo que si miBoolean es falso, no se mira nada más y se salta a la siguiente línea de código (el Else o el Endif). La función iif, que yo sepa, es sólo "Estética", en su interior sigue esas mismas normas de evaluación. Saludos. |