Comunidad Gambas-es
Ey, Java!. :-D - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Linux (https://gambas-es.org/forum-9.html)
+--- Foro: Programación en otros lenguajes (https://gambas-es.org/forum-12.html)
+--- Tema: Ey, Java!. :-D (/thread-1317.html)



Ey, Java!. :-D - Shell - 03-04-2023

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


RE: Ey, Java!. :-D - Shordi - 03-04-2023

I'm too old for this shit...


RE: Ey, Java!. :-D - Shell - 03-04-2023

(03-04-2023, 19:19)Shordi escribió: I'm too old for this shit...

Big Grin
it's a very interesting answer. At least you've bothered.

Ejemplo de clase estática con método estático. No se invoca a un método mediante un objeto (instancia de una clase).


[Imagen: Sma9viB.png]

[Imagen: 18FwKPq.png]

Así que esto lo hace igual que Java.

En cuanto a Java.

Concepto de métodos de clase o static y métodos de instancia. Diferencias. Método main de Java. (CU00683B)