Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
¿ Parámetro Opcional Es Igual A Por Defecto ? [No Solucionado]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje ¿ Parámetro Opcional Es Igual A Por Defecto ? [No Solucionado] 
 
Buenos días!.

Tengo una clase donde por defecto en el constructor se le asigna un valor a algunas de sus propiedades si no se le da ninguno.
Para ellos use optional.

En el ejemplo uso dos clases. Una es figura 2d y la otra figura 3d.

En la clase figura 2d, entiendo que si no se le pasa argumentos al
constructor, por defecto ambas propiedades (ancho y alto) son igual a 10.

Private hancho As Integer
Private halto As Integer

Property ancho As Integer
Property alto As Integer


Public Sub _new(Optional an As Integer, Optional alt As Integer)
  
  If an = 0 Then an = 10
  If alt = 0 Then alt = 10
    
  Me.ancho = an
  Me.alto = alt
  
End

Private Function ancho_Read() As Integer

Return hancho  

End

Private Sub ancho_Write(Value As Integer)

  hancho = Value

End

Private Function alto_Read() As Integer

  Return halto

End

Private Sub alto_Write(Value As Integer)

  halto = Value

End
 


En el caso de Figura3D que hereda de Figura2D solo he añadido la propiedad profundidad.

Inherits Figura2D

Private hprofundidad As Integer
Property profundidad As Integer

Public Sub _new(Optional prf As Integer)
  
  If prf = 0 Then prf = 10
  Me.profundidad = prf
  
End

Private Function profundidad_Read() As Integer

Return hprofundidad  

End

Private Sub profundidad_Write(Value As Integer)

  hprofundidad = Value

End
 


En el Main:

Public Sub Main()

Dim cubo As Figura3D

cubo = New Figura3D

Print Subst("Ancho del cubo: &1", cubo.ancho)
Print Subst("Alto del cubo: &1 ", cubo.alto)
Print Subst("Profundidad del cubo: &1", cubo.profundidad)

End
 


Bien ahora surge un problema. Yo solo quiero cambiar la propiedad profundidad!.

  parametros

Pero....

Citar:

Ancho del cubo: 30
Alto del cubo: 10
Profundidad del cubo: 10


¿ Hacerlo con una colección ?.  

¿ Es mejor hacer uso de Not  en el constructor ?

Public Sub _new(Optional an As Integer, Optional alt As Integer)
  
  'If an = 0 Then an = 10
  If Not an Then an = 10
  
  'If alt = 0 Then alt = 10
  If Not alt Then alt = 10
    
  Me.ancho = an
  Me.alto = alt
  
End
 


Si busco en la ayuda de gambas, Not numero, calcula el not lógico de un número en binario.
De 0, -1 como es normal.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Sabado, 22 Julio 2017, 13:40; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Shell:

Has probado la funcion isnull(..),. osea

En vez de:
If Not an Then an = 10


poner
if isnull(an) then  an=10


Para valores "por defecto", yo he hecho siempre eso...
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Viernes, 21 Julio 2017, 12:38; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
A lo mejor meto la gamba   pero yo cuando tengo un parámetro opcional tanto en un constructor como en un método lo que hago es esto:
public sub _new(Optional parametro as Integer = 10)
end
 

Así, si no le paso ningún parámetro entonces la variable "parametro" vale 10 y si le paso un valor, pues coge el valor pasado.
Un saludo.
 



 
Guizans - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Guizans:

Citar:
public sub _new(Optional parametro as Integer = 10)
end


Muy bueno, no conocía esa forma.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
jsbsan escribió: [Ver mensaje]
Guizans:

Citar:
public sub _new(Optional parametro as Integer = 10)
end


Muy bueno, no conocía esa forma.


Esa es la forma correcta!!

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Encantado de haber sido útil.

Un saludo.
 



 
Guizans - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Buenas!.

Efectivamente la forma correcta es la que ha mostrado Guizan.
No es que dejara de conocerla, me lié más con pasar el argumento concreto.
Me extrañó el tener que usar condicionales.

El problema que encuentro aun, es el querer pasar un argumento concreto, no todos los argumentos.
Puede que esto necesite siempre un orden.

Creo que la solución puede ser pasando una colección al constructor. No veo otra forma.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Shell:


Citar:
El problema que encuentro aun, es el querer pasar un argumento concreto, no todos los argumentos.
Puede que esto necesite siempre un orden.

Si, efectivamente, tienes que ponerlo en el orden que tenga definido, dejando los otros sin poner ningún valor.

Por ejemplo:
Tenemos la funcion:

public fuction  volumen(optional alto as integer=1,optional ancho as integer=1, optional largo as inteteger=1) as integer
 


Si quieres ponerle solo el dato del ancho (2º parámetro), seria asi:

volumen(,23,)

Con eso calcularía:
alto=1 (valor por defecto)
ancho=23 (el que pones en la función)
largo =1 (calor por defecto)


Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Muy interesante, yo lo hacia de otra manera, pero esta es mas práctica, incluso se pueden asignar variables a las varables.

Public Function Homer(Optional strPath As String = User.home) As String

  Dim strOut As String

  If Stat(strPath).Type = gb.Directory Then
    strOut = strPath
  Else
    If Stat(strPath).Type = gb.File Then
      strOut = File.Dir(strPath)
    Endif
  Endif

  Return strOut

End
 


Saludos.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: ¿ Parámetro Opcional Es Igual A Por Defecto ? 
 
Julio:

Vaya, muchas gracias, por fin!.
Entre los parámetros opcionales y las comas bien que me lié.  

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Abrir Una Página Web Con El Navegador Por... netking86 General 9 Lunes, 15 Febrero 2010, 19:43 Ver último mensaje
jguardon
No hay nuevos mensajes ¿ Es Posible Pasar Una Función Como Par... Shell General 13 Domingo, 27 Marzo 2016, 19:38 Ver último mensaje
Shell
No hay nuevos mensajes Pasar Un Parámetro Concreto De Varios A U... Shell General 6 Martes, 03 Enero 2017, 22:34 Ver último mensaje
Shell
No hay nuevos mensajes Dos Clases Que Se Llaman Igual tincho Controles/Librerías/Componentes 4 Sabado, 09 May 2020, 16:05 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron