Buenas!.
Está claro que al administrador no le gusta Java. No hay subforo.
Es que tenía una pregunta. Espero que sencilla. A ver si encuentro usuarios de gambas
que usen o les guste "un poco" Java.
Mi intención "siempre" a la hora de aprender un lenguaje es la de llevar a Gambas una idea,
mejorar la programación. Y sobre todo mejorar el aprendizaje de la programación orientada a
objetos.
"A modo sencillo". Si comparásemos un proyecto "básico" de Java con uno de Gambas.
¿ Cuál pensáis que son las diferencias "principales" ?.
Ayer estuve creando otro ejemplo en Java y creando uno similar en Gambas.
Imaginar un proyecto de consola para Gambas.
- Tenemos un Main como la rutina principal
En Java también tenemos un main, solo que este main es "estático".
Si recordamos bien, es un método común a todas las instancias que se cree de esta clase.
Voy a poner el ejemplo que hice ayer hecho en Java. Se trata de "ir" insertando valores en un array,
hasta que este está lleno de valores distintos a cero. Este array está desordenado.
Parece que en Java todo son clases.
Código:
package capitulo5tablas;
import java.util.Arrays;
public class InsertarEnTabla {
static int numElem;
static int[] t = new int[5];
public static void main(String[] args) {
InsercionNoOrdenada(12);
InsercionNoOrdenada(7);
InsercionNoOrdenada(45);
InsercionNoOrdenada(80);
InsercionNoOrdenada(4);
InsercionNoOrdenada(129); // No se puede realizar por tabla llena
InsertarEnTabla.InsercionNoOrdenada(56);
}
public static void InsercionNoOrdenada(int valor) {
// El orden no importa.
// Se inserta detrás del último elemento de la tabla
// mientras exista un hueco libre
if (numElem == t.length) {
System.out.println("La tabla está llena");
} else {
t[numElem] = valor;
System.out.println(Arrays.toString(t));
numElem++;
}
}
}
Fijaros, que tanto el main, como el método, como las variables publicas son "estáticas".
Aparentemente todo lo que se llama desde el main, tiene que ser estático. Y logicamente
las variables deben cumplir esa condición.
En este ejemplo no se está creando instancias de una clase.
Se podría haber hecho, pero en este ejemplo seria una "mala practica" hacer eso.
En Gambas creé una clase de este ejemplo, pero no tiene mucho sentido, ya que la clase no es instanciable,
no tiene constructor, se puede llevar parte del código a un módulo o a donde se encuentra el Main.
Os muestro el código en Gambas. Hace lo mismo, pero no hay métodos "estáticos",
ni variables de la misma condición.
Código:
Private numElem As Integer
Private tarray As New Integer[5]
Public Sub Main()
InserccionNoOrdenada(12)
InserccionNoOrdenada(7)
InserccionNoOrdenada(45)
InserccionNoOrdenada(80)
InserccionNoOrdenada(4)
InserccionNoOrdenada(129) 'No se puede realizar por array lleno
End
Public Sub InserccionNoOrdenada(valor As Integer)
If numElem = tarray.Count Then
Print "El array está lleno"
Else
tarray[numElem] = valor
ACadena()
Inc numElem
Endif
End
Public Sub ACadena()
Print "[ ";
For a As Integer = 0 To tarray.Max
Print tarray[a];
If a < tarray.Max Then Print " , ";
Next
Print " ]"
End
La salida de ambos ejemplo podrían ser como esta:
Cita:[ 12 , 0 , 0 , 0 , 0 ]
[ 12 , 7 , 0 , 0 , 0 ]
[ 12 , 7 , 45 , 0 , 0 ]
[ 12 , 7 , 45 , 80 , 0 ]
[ 12 , 7 , 45 , 80 , 4 ]
El array está lleno
No digo que sea ni peor ni mejor. Debe ser cuestión de constumbres, que no me acostumbro a que el main de Java sea estático.
Lógicamente desde este se pueden crear instancias de una clase, como podíamos hacer también en Gambas desde su Main.
Eso de estático me choca un poco, cuando el ejemplo es "sencillo", no manejo clases. En Java si, es la clase InsertarTabla.
A ver que me podéis comentar los que habéis conocido un poco Java.
Saludos