Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Cuestión Sobre Método De Una Clase.Borra El Array Original
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Hola Comunidad!.

Tengo una clase llamada baraja, la cual tiene un método llamado Cortar.
A este método le paso una array de cadena que contiene la baraja y el lugar por donde corto la baraja.

barajatemp1 contiene el contenido del array que se le ha pasado al método o función.
barajatemp2 es la baraja cortada que es la que devuelve el método.

Bien, hasta ahí todo correcto. Hasta ahora la aplicación me funciona dentro de lo que hice.
Mi cuestión va orientada a esto. El array que yo le paso también se "borra" y me ha
dejado un poco desconcertado, creía que era una copia (valor) con lo que trabaja y no el original.(referencia)

No es que sea un problema para la aplicación, pero si como duda.

Public Function CortarBaraja(otrabaraja As String[], lugar As Integer) As String[]

  Dim barajatemp1 As New String[]    
  Dim barajatemp2 As New String[]  
  Dim x As Integer  
  
  barajatemp1 = otrabaraja
  
  For x = lugar + 1 To barajatemp1.Count - 1
    barajatemp2.Add(barajatemp1[x])            
  Next
  barajatemp1.Remove((lugar + 1), (barajatemp1.Count - 1) - lugar)  
  For x = 0 To barajatemp1.Count - 1
    barajatemp2.Add(barajatemp1[x])      
  Next
  barajatemp1.Clear
  Return barajatemp2  
  
End
 


Creo que el problema esta en usar New.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 25 Febrero 2013, 12:17; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Shell:
Podias poner la linea en el que llames al método y como esta definida la cadena que le pasas (con una propiedad, o public ... as string[] )


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: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Julio:

Ok.
Esto se encuentra en el formulario principal:

Private mibaraja As New ClaseBaraja
Private aunabaraja As New String[]
Private abarajamezclada As New String[]  
Private abarajacortada As New String[]

Private mispuntos As Float

Public Sub _new()

End

Public Sub Form_Open()
    
  aunabaraja = mibaraja.CrearMazo()
  abarajamezclada = mibaraja.Barajar(aunabaraja)
  abarajacortada = mibaraja.CortarBaraja(abarajamezclada, 5)
  
  mispuntos = 0
    
End
 


Esto es en la clase Baraja:

Public obaraja As New ClaseCarta

 


Y el método ya lo conoces.

Aquí tienes la clase carta.

Private spalo As String[]
Private snomcarta As String[]
Private svalorcarta As Float[]

Property palo As String[]
Property nomcarta As String[]
Property valorcarta As Float[]



Private Function palo_Read() As String[]
  Return spalo  
End

Private Sub palo_Write(Value As String[])
  spalo = Value
End

Private Function nomcarta_Read() As String[]
  Return snomcarta  
End

Private Sub nomcarta_Write(Value As String[])
  snomcarta = Value
End

Private Function valorcarta_Read() As Float[]
  Return svalorcarta  
End

Private Sub valorcarta_Write(Value As Float[])
  svalorcarta = Value
End
 


Uso en la clase Baraja un constructor, tal que así:

Public Sub _new()
  
  obaraja.palo = ["OROS", "COPAS", "ESPADAS", "BASTOS"]
  obaraja.nomcarta = ["AS", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "SOTA", "CABALLO", "REY"]
  obaraja.valorcarta = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 0.5, 0.5, 0.5]
  
End
 


Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 25 Febrero 2013, 13:04; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Los arrays siempre se pasan por referencia. Si quieres pasar por valor utiliza el método .copy que llevan de por sí...

array2=arrayuno.copy()

o

mifuncion(miarray.copy())


Con esto último lo pasas por valor.

Saludos
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Gracias Shordi,

Lo intentare como cuentas.

He enviado un privado a Jesús, no tengo ni idea que habrá ocurrido.  
Pero fue muy extraño, cuando le di a enviar, algo había cambiado en la variable lugar, el tipo de esta variable se escribió mal.

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: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Shell:

Puedes encontrar un motón de métodos interesantes para trabajar con arrays de cadenas en este enlace:

http://gambasdoc.org/help/comp/gb/string[]?es

Saludos

Nota:
En enlace copialo y pegalo completo en el navegador, ya que no sale bien en el foro
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Lunes, 25 Febrero 2013, 13:24; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Gracias Julio.

Shordi:

Antes,Gambas2 solo pasaba por valor.Con la entrada de Gambas3 ya se pudo pasar por referencia.
Hice en su día un ejemplo en el blog, para el paso por referencia a un procedimiento.

PUBLIC SUB Form_Open()

Dim sNombre AS String

sNombre=”Jose Luis”

'Llamamos al procedimiento, pasándole como parámetro la variable sNombre

VerNombre(ByRef sNombre)

'Al salir del procedimiento ,mostramos el valor de la variable sNombre,
'comprobando que ha cambiado.

Message.info(“El valor del nombre es: “ & sNombre)

End


PUBLIC SUB VerNombre(ByRef sNom AS STRING)

'Vemos su valor original.

Message.info( “El valor original del parámetro es: “ & sNom)

'Cambiamos su valor y lo mostramos.

sNom=”Jose María”

Message.info(“El valor del parámetro se cambia a: “ & SNom)

END
 


Pero claro, se esta usando una sentencia añadida ByRef

Al final funciono como tu dijiste:
abarajamezclada = mibaraja.Barajar(aunabaraja.Copy())
 


Normal que se borrase el contenido del array.

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: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
shordi escribió: [Ver mensaje]
Los arrays siempre se pasan por referencia.


No solo los arrays, cualquier objeto SIEMPRE es pasado por referencia, ya que el argumento (la variable pasada) es un puntero a la memoria del objeto y no el objeto en si. Es por eso que cuando el argumento es un objeto, el ByRef no es necesario.
 



 
sebikul - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Cuestión Sobre Método De Una Clase.Borra El Array Original 
 
Efectivamente Sebikul, más razón que un santo.
 



 
shordi - 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 Cuestión Sobre El TreeView shordi General 3 Lunes, 02 Junio 2014, 08:53 Ver último mensaje
shordi
No hay nuevos mensajes Una Cuestión Sobre El Scrollview shordi Controles/Librerías/Componentes 6 Lunes, 29 Febrero 2016, 20:48 Ver último mensaje
jsbsan
No hay nuevos mensajes Cuestión Sobre Clases Shell General 17 Martes, 29 Marzo 2016, 00:28 Ver último mensaje
Shell
No hay nuevos mensajes Sobrescribir Un Método De Una Clase Shell General 7 Miercoles, 11 Abril 2018, 10:19 Ver último mensaje
Shell
 

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