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