{"id":54,"date":"2010-08-15T00:41:58","date_gmt":"2010-08-15T05:41:58","guid":{"rendered":"http:\/\/drmad.org\/blog\/?p=54"},"modified":"2018-10-28T14:51:40","modified_gmt":"2018-10-28T19:51:40","slug":"aclaracion-odio-java-y-un-poco-de-switchcase","status":"publish","type":"post","link":"https:\/\/drmad.org\/blog\/aclaracion-odio-java-y-un-poco-de-switchcase.html","title":{"rendered":"Aclaraci\u00f3n: ODIO JAVA (y un poco de switch\/case)"},"content":{"rendered":"<p><a href=\"https:\/\/www.google.com.pe\/search?q=hate%20java\">Java<\/a> es un lenguaje arcaico, incre\u00edblemente lento, y redundante. Si lo ense\u00f1\u00e9 alguna vez, fue porque:<\/p>\n<ol>\n<li>El director del Instituto que me lo pidi\u00f3 inicialmente, se confundi\u00f3\u2026 pens\u00f3 haber le\u00eddo en mi <a href=\"http:\/\/drmad.org\/curriculum\">curr\u00edculo<\/a> que yo hab\u00eda sido docente en la UNICA (ah\u00ed dice claramente que fui <i>Tech Support<\/i>. Fue un momento bastante jocoso, la verdad),<\/li>\n<li>Parece que no existia nadie m\u00e1s en Ica que ense\u00f1ara eso, y<\/li>\n<li>Me pareci\u00f3 paja la idea de ser profe \ud83d\ude42<\/li>\n<\/ol>\n<p>Es un error que no volver\u00e9 a repetir. Quiero ense\u00f1ar\/exponer sobre Linux, <a href=\"http:\/\/gambas.sourceforge.net\/en\/main.html\">Gambas<\/a>, <a href=\"http:\/\/blender.org\">Blender<\/a>, <a href=\"http:\/\/python.org\/\">Python<\/a>, y cualquier otro software libre que sea emocionante \ud83d\ude42<\/p>\n<p>\u00bfPor qu\u00e9 digo que Java es arcaico y redundante? Porque su sintaxis es una copia de C. Y la sintaxis de C s\u00f3lo tiene raz\u00f3n de ser en C, ya que el compilador de \u00e9ste optima el c\u00f3digo para convertirlo en <i>lenguaje m\u00e1quina<\/i>, y ganar velocidad. Los lenguajes de programaci\u00f3n de m\u00e1s alto nivel ya no compilan a lenguaje m\u00e1quina directamente, usualmente lo hacen hacia un bytecode, y las optimizaciones de velocidad precisas de C pierden sentido. Para muestra, un bot\u00f3n: La sentencia <tt>switch<\/tt>, de C.<\/p>\n<p>Si te has preguntado <i>por qu\u00e9<\/i> tienes que escribir un <tt>break<\/tt> despu\u00e9s de cada segmento <tt>case<\/tt> en una sentencia <tt>switch<\/tt> en Java,  es por que tu inconsciente tambi\u00e9n sabe que Java es feo \ud83d\ude00 B\u00e1sicamente, un <tt>switch<\/tt> es un mont\u00f3n de <tt>if<\/tt>s anidados, y es lo mismo usar uno u otro (<a href=\"http:\/\/python.org\/\">python<\/a>, por ejemplo, no tiene una instruccion <tt>switch<\/tt>, y te recomienda usar simplemente <tt>if<\/tt>s), no hay beneficio de velocidad.<\/p>\n<p>Excepto en C. La sentencia <tt>switch<\/tt> en C crea una <a href=\"http:\/\/es.wikipedia.org\/wiki\/Tabla_de_saltos\">tabla de saltos<\/a>, donde el puntero de ejecuci\u00f3n es empujado cierta cantidad de instrucciones seg\u00fan el valor num\u00e9rico que se le pasa a la sentencia <tt>switch<\/tt>. Al no haber comparaciones (esto es, <tt>if<\/tt>s), es mucho m\u00e1s r\u00e1pido. Entonces cada <i>keyword<\/i> <tt>case<\/tt> marca un punto donde debe de saltar el puntero de ejecuci\u00f3n. Aqu\u00ed viene lo interesante: <tt>case<\/tt> <i>no es una sentencia<\/i>, no produce c\u00f3digo m\u00e1quina, solo lo usa el compilador para armar la tabla de saltos. Cuando se ejecuta el programa, <strong>no hay forma de saber d\u00f3nde acaba las sentencias que le corresponde a cada <\/strong><tt><strong>case<\/strong><\/tt>, por lo que uno manualmente tiene que marcar el fin, indicando que salga del bloque <tt>switch<\/tt> usando la sentencia <tt>break<\/tt>.<\/p>\n<p>Esta forma de trabajar de <tt>switch<\/tt> permite hacer optimizaciones bastante locas (como el <a href=\"http:\/\/es.wikipedia.org\/wiki\/Dispositivo_de_Duff\">dispositivo de Duff<\/a>). Otra cosa a notar aqu\u00ed, es que el valor que se le proporciona a <tt>switch<\/tt> debe ser \u00fanicamente num\u00e9rico (o pueda ser <i>casteado<\/i> a num\u00e9rico), ya que este valor ser\u00e1 sumado al valor del puntero de ejecuci\u00f3n.<\/p>\n<p>Es poco probable que ese tipo de sentencia <tt>switch<\/tt> se use en estos tiempos, incluso lenguajes feos como Visual Basic tienen un <tt>switch<\/tt> mucho m\u00e1s moderno (su <tt>SELECT CASE<\/tt>, que permite hacer comparaciones de mayor, menor, y de cadenas, obviamente es internamente <tt>IF<\/tt>s anidados)<\/p>\n<p>\u00bfA\u00fan sigues pensando que Java es moderno? All\u00e1 en 1995, adoptaron la sintaxis de C para hacerlo familiar con los programadores, y modificaron cosas que trae problemas en C (como punteros, recolectores de basura, etc.) Cumpli\u00f3 su objetivo, y se volvi\u00f3 muy popular. Y el mismo bodoque siguen usando hasta ahora, por mucha presi\u00f3n de grandes billeteras. Suena un poco a la historia de Windows \ud83d\ude42 Ahora hay muchos lenguajes de programaci\u00f3n, como <a href=\"http:\/\/python.org\/\">Python<\/a>, o <a href=\"http:\/\/www.ruby-lang.org\/\">Ruby<\/a>, que son infinitamente mejores, modernos, y se enfocan en la velocidad de desarrollo, que es lo que realmente importa en estos tiempos.<\/p>\n<p>Si, es cierto: PHP tiene tambi\u00e9n la sintaxis de C. Por eso estoy en el proceso de dejarlo \ud83d\ude42<\/p>\n<p>(Desde el <a href=\"https:\/\/web.archive.org\/web\/20111201063834\/http:\/\/drmad.org:80\/blog\/aclaracion-odio-java-y-un-poco-de-switchcase.html\">Wayback Machine<\/a>)<\/p>\n<p><strong>Update 18 marzo, 2016<\/strong>: No, no lo dej\u00e9. Despu\u00e9s de un par de a\u00f1os de estar ense\u00f1\u00e1ndolo, me di cuenta que se ha vuelto <i>menos feo<\/i>, as\u00ed que le he dado una nueva oportunidad (obviando usar estas cosas obsoletas, como <tt>switch<\/tt>s y <tt>for<\/tt>s). Incluso he hecho un <i>framework<\/i> para PHP, llamado <a href=\"http:\/\/vendimia.in\">Vendimia<\/a> \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java es un lenguaje arcaico, incre\u00edblemente lento, y redundante. Si lo ense\u00f1\u00e9 alguna vez, fue porque: El director del Instituto<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[9,10,21],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","hentry","category-java","category-programacion","category-wayback-machine"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6p3z1-S","jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":7,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":507,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/posts\/54\/revisions\/507"}],"wp:attachment":[{"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/media?parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/categories?post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/drmad.org\/blog\/wp-json\/wp\/v2\/tags?post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}