Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo"
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo" 
 
......yo creo que la razón es que sustancialmente son Punteros, porque - cuando una Función recibe y debe regresar un Array, una Estructura o un Puntero - NO necesitan las palabras "As tipo": el regrezo es automaticamente "por Referencia".    

Ejemplo con un Array:
Public Sub Main()
 
   Dim ss As String[] = ["a", "b", "c"]
      
     Print ss.Count
  
     Prova(ss)
    
     Print ss.Count
 
 End
 
 
 
Private Function Prova(vett As String[])
  
     vett.Remove(1)
  
End




Ejemplo con una Estructura:
Public Struct STRUTTURA
  b As Byte
  s As Short
  i As Integer
End Struct


Public Sub Main()

  Dim st As New STRUTTURA
  
   With st
     .b = 99
     .s = 9999
     .i = 999999
   End With
  
   Prova(st)
    
   With st
     Print .b
     Print .s
     Print .i
   End With

End


Private Function Prova(n As STRUTTURA)
  
   With n
     .b += 99
     .s += 9999
     .i += 999999
   End With
  
End




Ejemplo con Puntero:
Public Sub Main()

  Dim p As Pointer
  
   p = Alloc("abcde")
    
   Prova(p)
    
   Print String@(p)
      
   Free(p)

End



Private Function Prova(po As Pointer)
  
  Dim st As Stream
    
   st = Memory po For Write
   Write #st, 70 As Byte
   st.Close
  
End

 



 
última edición por vuott el Martes, 12 May 2015, 00:05; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo" 
 
Curioso, pero para mí que el tema está en que las funciones que pones de ejemplo no retornan ningún valor, lo que las convierte en procedures...
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo" 
 
shordi escribió: [Ver mensaje]
... lo que las convierte en procedures...


...y con eso ?  

No creo que el fenómeno sea determinado de la "Procedura" en si misma.
Pues la función llamada recibe como parámetro un puntero (es decir referencia al parámetro real), si cambia el parámetro pasado "por dirección", el cambio será visible para la función de llamada. Por consiguiente, el pasaje es potencialmente bidireccional.

He hecho un ejemplo aquì:
http://foro.gambas-es.org/viewtopic.php?t=2129&p=26363#p26363
 



 
última edición por vuott el Martes, 12 May 2015, 01:38; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo" 
 
Citar:
Pues la función llamada recibe como parámetro un puntero (es decir referencia al parámetro real), si cambia el parámetro pasado "por dirección", el cambio será visible para la función de llamada. Por consiguiente, el pasaje es potencialmente bidireccional.


Efectivamente, es un modo de manejar datos en la función llamante por parte de la que recibe el parámetro... pero no es necesario el AS TIPO porque no hay un retorno explícito de datos.
La función se limita a manipular los datos recibidos que al ser Arrays, colecciones o cualquier clase de objetos son recibidos por referencia. Pero no devuelve nada en sí misma. Esa es la diferencia de la necesidad o no de especificar el AS TIPO.

Saludos
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo" 
 
Bueno, pero la cuestión es que yo no supe que en gambas hubo este comportamiento automatico al pasar array y estructuras. En efecto, pasando otros tipos (Integer, String, etc), no hay el paso automatico por Referencia.
Saludos.
 



 
última edición por vuott el Martes, 12 May 2015, 09:13; editado 2 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Existe Alguna Función Para "Parsear&... arubioc General 2 Miercoles, 28 Marzo 2012, 14:46 Ver último mensaje
arubioc
No hay nuevos mensajes Un Detalle Con El Insert Into Gambas Value... jousseph Bases de Datos 5 Domingo, 04 Noviembre 2012, 20:58 Ver último mensaje
Shell
No hay nuevos mensajes Interceptar En Una Aplicación Sin Compone... vuott Aplicaciones/Fragmentos de Código 6 Lunes, 14 Abril 2014, 00:41 Ver último mensaje
vuott
No hay nuevos mensajes Cuando Un Codigo Es... "más Gambas&q... vuott General 14 Viernes, 05 Agosto 2016, 19:41 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

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