Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
AS Y AS NEW
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje AS Y AS NEW 
 
Hola amigos. Soy nuevo en este sitio. Quisiera hacer una pregunta. Estoy intentando comprender los tipos de matrices que se pueden declarar y cómo acceder a ellas con punteros. Pero hay veces que no entiendo cuándo podemos/debemos poner en la declaración AS o AS NEW. En los siguientes ejemplos he declarado previamente una clase llamada Miclase:

PRIVATE matriz_1[4, 12] AS Integer
PRIVATE puntero_2 AS Integer[]
PRIVATE puntero_3 AS NEW Integer[]
PRIVATE matrizdepunteros_4[6, 9] AS Integer[]
PRIVATE puntero_5 AS Miclase
PRIVATE puntero_6 AS NEW Miclase
PRIVATE matrizdepunteros_7[4, 6] AS Miclase
PRIVATE puntero_8 AS Miclase[]
PRIVATE puntero_9 AS NEW Miclase[]
PRIVATE matrizdepunteros_10[2, 8] AS Miclase[]
PRIVATE puntero_11 AS NEW Integer[4, 7]
PRIVATE puntero_12 AS NEW Float[][4, 7]
PRIVATE puntero_13 AS NEW Miclase[4, 7]
PRIVATE puntero_14 AS NEW Miclase[][4, 7]

Cocretamente no entiendo por qué en los últimos cuatro casos no deja poner un simple AS.
 



 
última edición por Alaplancha el Miercoles, 29 Agosto 2012, 20:13; editado 2 veces 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: AS Y AS NEW 
 
Hola Alaplancha.

Las ultimas cuatro instrucciones no estas escritas bien.

En gambas existen dos tipos de arrays.Los de una dimensión son declarados con AS NEW
Son dinámicos.Crecen o encogen su numero a medida que añades o eliminas elementos.
Al usar la palabra NEW estas iniciializando el array.

Private Nombres AS NEW STRING[]
 


PRIVATE Nombres AS STRING[]

Nombres=NEW STRING[]
 

Hace lo mismo.En el primer ejemplo es mas abreviado.

Luego existen los arrays nativos.Que pueden tener hasta 8 dimensiones.
No son dinámicos.No se les puede cambiar el tamaño una vez declarada sus
dimensiones.

Private Nombres[4,4] AS STRING
 


Necesitas el manual de gambas y usa el buscador para el tema de punteros.
No lo hemos tratado mucho.Pero hay algo de información.

Aquí tienes el enlace:

http://foro.gambas-es.org/viewtopic...hlight=punteros

Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Jueves, 30 Agosto 2012, 00:08; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: AS Y AS NEW 
 
Hola Shell.

Muchas gracias por tu respuesta. Tengo que estudiar más, ya que soy consciente de que estoy muy pez.

Creo que lo primero que he de hacer es nombrar las cosas como Identificador en lugar de como puntero. Copio aquí un código que he hecho con los ejemplos 11 y 13. Funcionan los dos, a condición de utlizar AS NEW y no un simple AS. Es decir, que tengo que declarar el Identificador e ¿instanciar? en una misma línea, no me deja postponer el NEW para una segunda línea má tarde, y eso no lo entiendo:

Primero creo una clase llamada Miclase:

' gambas class file
Public x As Float
Public y As Float

Después en FMain escribo:

' gambas class file
Private Identif_11 As New Integer[4, 7] 'Declara e instancia una matriz 4x7 para guardar enteros
Private Identif_13 As New Miclase[4, 7] 'Declara e instancia una matriz 4x7 para guardar objetos de la clase Miclase
Private Objeto As New Miclase

Y dentro de Form_Open() escribo:

Identif_11[2, 3] = 18
Print Identif_11[2, 3]

Objeto.x = 3.141592
Identif_13[3, 5] = Objeto
Print Identif_13[3, 5].x

Esto funciona. En consola obtengo 18 y 3.141592.

Saludos.
 



 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: AS Y AS NEW 
 
Hola Alaplancha.

Alaplancha escribió: [Ver mensaje]

Muchas gracias por tu respuesta. Tengo que estudiar más, ya que soy consciente de que estoy muy pez.

Ademas de gambas también es bueno que vayas aprendiendo a usar la interfaz de la comunidad.Date tiempo, ve probando cosas.
Para que el código en el mensaje se vea mejor. Hacemos click una vez para abrir y otra para cerrar las etiquetas que encierran el código.
Al igual que las etiquetas de las paginas html.

 menuobjetos

Te muestro como quedaría el código.

Alaplancha escribió: [Ver mensaje]


Creo que lo primero que he de hacer es nombrar las cosas como Identificador en lugar de como puntero. Copio aquí un código que he hecho con los ejemplos 11 y 13. Funcionan los dos, a condición de utlizar AS NEW y no un simple AS. Es decir, que tengo que declarar el Identificador e ¿instanciar? en una misma línea, no me deja postponer el NEW para una segunda línea má tarde, y eso no lo entiendo:



Esa es la palabra.Instanciar.Si, si puedes hacerlo en otra linea.
Creas la clase, defines el objeto como el tipo de esa clase y luego
en una parte del código si la variable es común a todo el código, añades
NEW para instanciar el objeto.

Imagina que has creado la clase ejemplo y luego en el formulario FMain la defines y la instancias.

' gambas class file
PRIVATE objeto AS ejemplo

PUBLIC SUB Form_Open()

objeto=NEW ejemplo

END
 

Podía haberla instanciado en otro lugar de FMain si la variable es común a todo el formulario.

Alaplancha escribió: [Ver mensaje]

Primero creo una clase llamada Miclase:

' gambas class file
Public x As Float
Public y As Float
 

Después en FMain escribo:
' gambas class file
Private Identif_11 As New Integer[4, 7] 'Declara e instancia una matriz 4x7 para guardar enteros
Private Identif_13 As New Miclase[4, 7] 'Declara e instancia una matriz 4x7 para guardar objetos de la clase Miclase
Private Objeto As New Miclase
 

Y dentro de Form_Open() escribo:
Identif_11[2, 3] = 18
Print Identif_11[2, 3]

Objeto.x = 3.141592
Identif_13[3, 5] = Objeto
Print Identif_13[3, 5].x
 

Esto funciona. En consola obtengo 18 y 3.141592.


Es bueno también que los identificadores los nombres con nombres mas simples, mas comunes.
Si ya conocías el tema de punteros no debes ser muy nuevo en el tema de la programación.

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: AS Y AS NEW 
 
Hola Shell,

gracias por tu ayuda. Lo cierto es que soy autodidacta como programador, y mi base no es sólida, ni con los punteros ni con otras cosas. Poco a poco iré mejorando.

He estado estos días leyendo libros y buscando por aquí y por allá, y me voy haciendo una idea más precisa de cómo utilizar las matrices. Una dificultad añadida es que las versiones de gambas se van actualizando, y sus características cambian, con lo cual un hilo muy antiguo de un foro o una documentación no actualizada pueden despistar.

En el siguiente hilo

Benoît Minisini - About arrays

Benoît nos explica los dos tipos de matrices: normal y embedded. A las matrices normales también a veces vamos a encontrar que las llaman dinámicas o de tipo Java. A las matrices embedded también a veces vamos a encontar que las llaman estáticas o nativas. Benoît Prefiere llamarlas embedded (¿incrustadas?) porque estáticas puede inducir a confusión con la palabra STATIC, con la que no tienen nada que ver. Dice también que las matrices normales son auténticos objetos, tienen su propia dirección de memoria, mientras que las embedded están alojadas dentro de otro objeto.

Para diferenciar estos dos tipos de matrices cuando leemos las líneas de código, las matrices embedded tienen los corchetes donde especificar las dimensiones detrás del Identificador, mientras que las matrices normales los tienen detrás del Tipo.

En el siguiente hilo

Emil Lenngren - Gambas 3 arrays usage

Emil Lenngren y otros nos explican que las matrices embedded sólo pueden ser globales (ya sea públcas o privadas) y han de ser declaradas por ejemplo así:

Public ArrayOfStrings[5] As String  ' Una matriz embedded pública
 


Mientras que las matrices normales pueden ser globales (ya sea públicas o privadas) o locales, y han de ser declaradas por ejemplo así:

Dim ArrayOfStrings As New String[5] ' Una matriz normal local
Public ArrayOfStrings As New String[5]  ' Una matriz normal global pública
 


Observamos que para las matrices normales, ahora es obligatorio declarar con AS NEW (lo cual creo que respondería al título de mi mensaje) como nos indica Benoît en este otro hilo:

Benoît - Support for "static" arrays has been removed

En ese hilo habla de que el soporte (support) para las matrices embedded ha sido definitivamente suprimido. No sé exactamente que quiere decir que no hay soporte, si es que se pueden seguir utilizando,... El caso es que durante mucho tiempo recomendaron no utilizar las matrices embedded.

Dentro de las matrices normales, parece ser que la única opción no es matrices "dinámicas" de las que crecen, tipo Java, sino que podemos declarar también matrices con dimensiones conocidas en tiempo de compilación, por ejemplo:

Private matriz As New Integer[1, 2, 3, 4, 5, 6, 7, 8] ' Una matriz normal global privada, de hasta ocho dimensiones máximo, de tipo Integer
Private matriz As New Integer[][6, 19] ' Una matriz normal global privada, de tipo Integer[]
Private matriz As New Miclase[42, 3] ' Una matriz normal global privada, de tipo Miclase
Private matriz As New Miclase[][5, 7] ' Una matriz normal global privada, de tipo Miclase[]
 


Saludos
 



 
última edición por Alaplancha el Domingo, 02 Septiembre 2012, 11:54; editado 7 veces 
Alaplancha - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

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