Benchmarking en distintos lenguajes

Aldrin Gonzalo Martoq Ahumada amartoq en dcc.uchile.cl
Mie Dic 5 02:06:14 CLST 2007


On Dec 4, 2007 2:30 PM, Franco Catrin L. <fcatrin en tuxpan.com> wrote:
> Veamos un simple cambio de este sencillo ejemplo.  Ahora queremos
> pasar el nombre del "saludado" por parametro.  En Java quedaria como :
>   (sin validar)
>
> public class HelloWorld
> {
>     public static void main(String[] args )
>     {
>         System.out.println( "Hello " + args[0] );
>     }
> }

Sigue odiando Java por su mal llamada "elegancia" (==
sobre-ingenieria). Escribo ese ejemplo en eclipse 3 europa, y ya tengo
varios warnings. El programa final "profesional" queda asi:

-------------------hello/HelloWorld.java-----
// "The use of the default package is discouraged.
package hello;

public class HelloWorld {

    // avoid using explicit string literals, declare constants instead
    // BTW, por que esto no lo hace el compilador!
    private static final String _STR_HELLO = "Hello "; //$NON-NLS-1$

    public static void main(String[] args) {
        System.out.println(_STR_HELLO + args[0]);
    }
}
-------------------

Oh perdon, el programa se cae por una (de las odiadas por mi)
"RunTimeExceptions"; es decir, los errores _mas_ tipicos comunes por
los cuales se caen los programas, en particular NullPointerException;
pero que no son revisados durante la compilacion.

$ java hello.HelloWorld
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at hello.HelloWorld.main(HelloWorld.java:66)

Nueva version:
---------------hello/HelloWorld.java
// "The use of the default package is discouraged.
package hello;

public class HelloWorld {
    // avoid using explicit string literals, declare constants instead
    private static final String _STR_HELLO = "Hello "; //$NON-NLS-1$

    // avoid using explicit string literals, declare constants instead
    private static final String _STR_USAGE = "Usage: java
hello.HelloWorld <your_name>"; //$NON-NLS-1$

    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println(_STR_USAGE);
            return;
        }
        System.out.println(_STR_HELLO + args[0]);
    }
}
--------------------------

Y que es eso de NON-NLS??? Ah claro, olvidaba la i18n....

---------- Ultima version, espero ------
package hello;

public class HelloWorld {
    private static final String _STR_HELLO =
Messages.getString("HelloWorld.HELLO"); //$NON-NLS-1$

    private static final String _STR_USAGE =
Messages.getString("HelloWorld.USAGE"); //$NON-NLS-1$

    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println(_STR_USAGE);
            return;
        }
        System.out.println(_STR_HELLO + args[0]);
    }

import java.util.MissingResourceException;
import java.util.ResourceBundle;

public class Messages {
    private static final String         BUNDLE_NAME     =
"hello.messages";                     //$NON-NLS-1$

    private static final ResourceBundle RESOURCE_BUNDLE =
ResourceBundle.getBundle(BUNDLE_NAME);

    private Messages() {
    }

    public static String getString(String key) {
        try {
            return RESOURCE_BUNDLE.getString(key);
        } catch (MissingResourceException e) {
            return '!' + key + '!';
        }
    }
}

---- messages.properties ----
HelloWorld.HELLO=Hello
HelloWorld.USAGE=Usage: java hello.HelloWorld <your_name>
-----------------------------------


Alguien en java llega a algo tan elaborado??? Y eso que ni siquiera
hemos llegado a J2EE....

Algun contraejemplo en otro lenguaje, anyone??? ;)


-- 
Aldrin Martoq


Más información sobre la lista de distribución Linux