MarioDebian, mi devlog

Bitácora de un desarrollador newbie.

Diferencias entre algo sencillo y algo enrevesado

Hoy me he puesto a intentar hacer una cutre aplicación para Android (que está tan de moda) y de paso a programar mis primeras líneas en JAVA. ¿Quén inventó ese lenguaje del diablo? Se merece las 7 plagas seguidas de una lapidación pública, y voy a ello con un ejemplo muy simple.

Vamos a intentar partir una cadena de texto por espacios, en Python:

>>> a="esto   es una cadena   de texto"
>>> a.split()
['esto', 'es', 'una', 'cadena', 'de', 'texto']

Nótese que entre alguna de las palabras hay más de un espacio.

Ahora vamos a hacerlo en JAVA:

public class test {
public static void main(String args[]) {
String a;
String [] aArray;
int i;
a="esto   es una cadena   de texto";
aArray=a.split(" ");
for (i=0; i<aArray.length; i++) {
System.out.println("index=" + i + " aArray=" + aArray[i]);
}
}
}

Que como resultado da:

index=0 aArray=esto
index=1 aArray=
index=2 aArray=
index=3 aArray=es
index=4 aArray=una
index=5 aArray=cadena
index=6 aArray=
index=7 aArray=
index=8 aArray=de
index=9 aArray=texto

No quiero ir de listillo, pero necesitar 6 veces más código para no hacerlo bien es como volver al esamblador. He intentado hacer aArray=a.trim().split(" ") pero ni con esas...seguro que hay una forma rebuscada de hacerlo, en python no hay que pensar tanto. Además es bastante más lento que python y eso que se ejecuta compilado en bytecode:

$ time python -c "a='esto   es una cadena   de texto'; print a.split()" >/dev/null
real	0m0.026s
user	0m0.020s
sys	0m0.004s
$ time java test > /dev/null
real	0m0.135s
user	0m0.064s
sys	0m0.016s

Articulos relacionados:

Comentarios

  1. jugulator699 python y java
    08/01/2010 | 02:51

    En realidad la cantidad de código que se escribe en java es entre 6 y 12 veces superior que la que se escribe en python, haciendo de este ultimo un excelente lenguaje para desarrollo ágil. Pero no hay que demeritar a java, por que gracias a su gigantesca comunidad existen infinidad de libreas, framewors, IDE's y demás utilitarios( incluido un interprete de python para la maquina virtual de java llamado jython) que ayudan a facilitar la tarea de desarrollo.

    Por otro lado, hay buenas noticias si estas interesado en le desarrollo para Android, por que google recientemente ha habilitado un interprete de python para esta plataforma.

    http://google-opensource.blogspot.com/2009/06/introducing-android-scripting.html
    http://code.google.com/p/android-scripting/wiki/PythonAndroidAPI

  2. 08/01/2010 | 08:40

    Es tan sencillo como leerse el JavaDoc de la función split y ver que se pueden usar expresiones regulares.

    aArray = a.split(" +");

    Y ya está.

  3. 08/01/2010 | 08:56

    Hombre, no creo que haya que confundir churras con merinas. Cada lenguaje para lo que es, para cosas sencillas y scripts Python le tiene que dar mil vueltas a Java pero para desarrollos serios Java ha demostrado ser un lenguaje robusto y muy válido. Otra cosa es la velocidad/rendimiento pero es que Java no está hecho para ser rápido.

  4. leo y que...
    08/01/2010 | 10:20

    Prueba a integrar un sistema bancario desarrollado con 25 programadores en dos años, a ver si te resulta tan sencillo mantenerlo con python.

    El mundo no se ha vuelto idiota, si las herramientas se usan es por algo.

  5. Rafalinux Haya paz
    08/01/2010 | 18:40

    Bueno, bueno, haya paz. MarioDebian no estaba criticando, ni constructiva ni destructivamente a Java. Leo, las cosas se pueden decir menos ofensivamente. Entiendo que Java es un lenguaje potente y robusto, quizá no tan rápido como Python, porque gana potencia a costa de la rapidez. Es versátil, y para proyectos de gran envergadura, es quizá el lenguaje de alto nivel apropiado para estos menesteres.

    MarioDebian nunca ha dicho lo contrario. Sólo que quizá él esté más adpatado a Python, y le cuesta encontrar lógica a procedimientos, expresiones regulares, número de líneas de código, etc, que existen en Java.

    No he leído que haya atacado a Java o que diga que es una basura o que no le guste. Ha descrito algo objetivo: en Java hay que escribir más líneas de código que en Python para hacer lo mismo. Pero quizá esto haga que Java esté en un nivel más bajo que Python (entendiendo como bajo nivel al nivel más cercano a la máquina, no a la calidad), ergo, más controlable.

    Enhorabuena por el blog! Saludos!

  6. 08/01/2010 | 23:08

    Hombre, ni tanto ni tan poco. A mi me gusta más python que java, pero no por eso voy a desmerecer a ninguno... (es cuestión de gustos), y menos sin saber programar bien en el lenguaje que esté criticando. (alguien te puede dar una lección, como fran)

  7. Alejandro Santos Java vs. Python
    09/01/2010 | 05:33

    La eficiencia de ejecución de Python es mejor a la de Java:

    http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=python&lang2=java

    La eficiencia del programador Python es mayor a la de Java.

  8. 09/01/2010 | 15:30

    Bueno, yo la verdad es que creo que es el típico post criticando a Java escrito por alguien que no esta dentro de Java. He visto muuuuchos en ese sentido y aunque llega a ser cansado, reconozco que me divierte algo, introducirme en ellos.

    Las líneas de código de Java no estan optimizadas, por ejemplo, así como la función Split admite expresiones regulares para el trabajo.

    Creo que si es la primera vez que escribes código Java no te ha salido muy bien, y que la principal razón, de tener seis veces mas código Java que Python, es mas bien por que desconoces el lenguaje, la potencia o las funciones disponibles.

    A lo mejor podías haber inicializado las variables en la misma línea en la que las creas, o crear el índice i dentro del for, o usar expresiones regulares en el split...

    Incluso podrías haber introducido los datos en el String args[].

    Yo creo que se puede resolver eso en unas cuatro lineas de código, No entiendo cuando le achacamos a Java lo que en realidad es nuestra falta de conocimiento.

    En fin. Un saludo.

  9. 09/01/2010 | 17:24

    Esto no pretendía ser un flame A vs. B y reconozco que como novato total en Java no puedo hablar con cierta propiedad.

    Programar en Java es bastante más difícil que en otros lenguajes, pero esto no significa que sea menos potente.

  10. 12/01/2010 | 22:40

    Wait, what?!

Responder

Los comentarios son moderados para evitar spam. Esto puede hacer que tu comentario tarde un poco en ser visible.
Añadir comentario

 authimage