Cuando, Al Regresar, A La Función Llamada No Necesita "As Tipo"


Objetivo: 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
Perfil MP  
Objetivo: 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...

Perfil MP  
Objetivo: 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
Perfil MP  
Objetivo: 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

Perfil MP  
Objetivo: 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
Perfil MP  

Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.5256s (PHP: -80% SQL: 180%)
Consultas SQL: 47 - Debug off - GZIP Activado