Paso de parámetros a una función - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: General (https://gambas-es.org/forum-4.html) +--- Tema: Paso de parámetros a una función (/thread-1962.html) |
Paso de parámetros a una función - guizans - 21-05-2025 Hola a todos. Vamos a pensar en que tenemos una función que puede recibir tres, dos o un parámetro, y estos son de tipo Float. La función va a realizar una tarea u otra en función de los parámetros recibidos. Y aquí viene la duda. En otros lenguajes, cuando hay parámetros opcionales, los que no reciben valor tienen asignado Null o None. Pero esto no pasa en Gambas. Me quedaría como opción, asignarle el valor de cero, y si este cambia es que ha recibido un parámetro. Código: Private Function paseParametros(Optional a As Float = 0, Optional b As Float = 0, Optional c As Float = 0) As Float Hasta aquí funciona. ¿Pero y si uno de los tres parámetros que paso tiene que ser 0 y necesito que ejecute el código? En este caso, esto no me serviria, ya que no es lo mismo cero que Null, ya que el primero es un número y el segundo es valor vacio. Le he estado dando vueltas y no se me ocurre ningula solución. ¿es una limitación de Gambas? Apuesto a que si. Un saludo. ¿Por qué la solución te viene a la cabeza después de un rato de haber formulado la pregunta en el foro? Misterios de la vida. La solución es en vez de usar Float usar Variant, ya que este si admite Null. No es una solución que me guste, ya que al especificar el tipo de parámetro se sabe de antemano el dato a pasar, pero con Variant puede ser cualquier cosa y hasta que se mira el código de la función no se sabe. Algo parecido le ocurre a Python y no pasa nada. Un saludo. RE: Paso de parámetros a una función - omoreno - 21-05-2025 Hola Guizans. Intenta con los parámetros de 3 puntos (...) Código: Public Function FindX(TableX As String, WhereX As String, ...) As Variant Luego la llamas pasando la cantidad de parámetros que se requieran. Saludos. RE: Paso de parámetros a una función - omoreno - 21-05-2025 Otra forma: Código: Public Sub WebButton1_Click() Saludos. RE: Paso de parámetros a una función - guizans - 22-05-2025 Hola omoreno. Si, conozco esa forma, pero te enfrentas al mismo problema. El número de parámetros a pasar está entre uno y tres. Y el tipo de dato es Float, eso fijo, con lo cual tu forma también es válida. A lo que me refiero, es que Gambas al declarar una variable numérica le asigna el cero a la variable, mientras que en otros lenguajes, como Java, esa variable e Null, con lo cual en este caso, es más fácil determinar si una variable pasada por parámetro ha sido usada. Otra cosa que puede resultar útil en ciertos escenarios, tal como hace Java o Python, es aparte de pasar el parámetro, se indica a la variable que se le pasa, y que Gambas no permite. Esto sería un ejemplo: Código: pasarParametro(v=0.50, r=0.25) Son peculiaridades propias de cada lenguaje, no existe el lenguaje perfecto, aunque Gambas se le aproxima mucho ![]() Un saludo. RE: Paso de parámetros a una función - Shell - 23-05-2025 Estoy algo perdido. ¿ Qué dificultad tiene que sea cero uno de los parámetros ?. Código: Public Sub Form_Open() Saludos RE: Paso de parámetros a una función - guizans - 26-05-2025 Hola Shell Estás comitiendo el mismo error, es decir, que estás evaluando que los números pasados tienen que ser enteros positivos, ¿y si es uno de los parámetros que paso es -1?, tú código tampoco funcionaria correctamente. Por eso digo que hay una diferencia entre asignar un valor que se supone que no se va a usar a que la variable por defecto sea None, no es lo mismo. No os rayeis, no pasa nada, es una simple curiosidad que me surgió a partir de un pequeño ejemplo que vi en Java y me plantee si se podía hacer de la misma forma en Gambas. Este el código que digo: https://github.com/mouredev/Weekly-Challenge-2022-Kotlin/blob/main/app/src/main/java/com/mouredev/weeklychallenge2022/Challenge41.kt Un saludo. RE: Paso de parámetros a una función - Shell - 29-05-2025 Bien. Entonces usemos Variant en el tipo de parámetro de la función. Examina la forma de comprobar los parámetros al comienzo de la función. Si no son nulos o no son float, ademas necesitas convertir a texto, ya que IsFloat necesita que le pase texto. Comprueba la salida de la función. Código: Public Sub Form_Open() Salida de la función: Cita:Valores inválidos Saludos RE: Paso de parámetros a una función - Grandamakulo - 29-05-2025 Me «via metel ande naide me llama», pero, ¿y probando con IsNaN, IsNumber, IsBlank etc. según corresponda? RE: Paso de parámetros a una función - Shell - 29-05-2025 (29-05-2025, 13:25)Grandamakulo escribió: Me «via metel ande naide me llama», pero, ¿y probando con IsNaN, IsNumber, IsBlank etc. según corresponda? Todo depende de como lo quieras hacer o mejor dicho, que vas a comprobar. En el caso IsNumber o IsFloat, los dos esperan una cadena y ya con IsFloat compruebas si la cadena es un Float IsNumber puede ser entero, real. IsFloat limita que tipo es. Si gambas no tiene una cosa, hay que buscar algo alternativo. Que no se pueda hacer de la misma manera, claro, normal. El uso de Variant, admite cualquier tipo de valor. Ya sea un entero, una cadena, real, null. Que se puede optimizar la función, puede. Se trata más del uso de parámetros opcionales y poder pasar lo que queramos. Siempre que no nos olvidemos de Null en el caso de que alguno de los parámetros sea nulo. IsNan o IsBlank no las he usado, no es algo habitual que use. Saludos RE: Paso de parámetros a una función - guizans - 29-05-2025 Hola Shell Me gusta tú solución, y si, tienes toda la razón, que Gambas no tenga una cosa no quiere decir que no se pueda hacer de otra forma. Un saludo. |