Las 4 mejores consultas Java jamás vistas en Stack Overflow

Incluso el desarrollador más experto puede atascarse y necesitar ayuda de otras personas. La comunidad Stack Overflow es una de las más activas del mundo, en sus foros es posible encontrar respuesta útil a nuestras consultas, aprender de otros cómo aplicar la mejor solución y mejorar nuestros conocimientos sobre programación.

Stack Overflow es como una caja de bombones. Cuando entras nunca sabes lo que vas a encontrar pero seguro que será algo muy bueno que te alegrará el día.

 

La comunidad Java en Stack Overflow

Desde 2011, Stack Overflow pregunta cada año a los desarrolladores de todo el mundo acerca de sus tecnologías favoritas, hábitos de codificación y preferencias de trabajo, cómo aprenden, comparten y mejoran su nivel. Según la última encuesta de 2017, en la que han participado 64.000 desarrolladores, Java es uno de los lenguajes más populares ocupando la tercera posición.

Gráfico

Tú pregunta y la comunidad responde

Muchos caminos conducen a Stack Overflow. Puedes acceder de casualidad sin tener idea de programación en busca de una solución a través de Google, por un enlace en una web especialidad o porque eres parte de la comunidad que accede a diario en busca de consultas que responder.

A continuación recopilamos cuatro de las mejores preguntas y respuestas Java que nos han llamado poderosamente la atención.

 

1. Predicción de rama

¿Por qué es más rápido procesar un Array ordenado que un Array sin clasificar? Esta pregunta trae de cabeza a muchos estudiantes de ingeniería que comienzan a dar sus primeros pasos con Java. La respuesta para por usar la predicción de bifurcación. Un método que tiene como objeto el mejorar el desempeño de nuestras aplicaciones adivinando la forma en que una rama específica irá a una ruta definida. Suena un poco a rollo así que mejor veamos un ejemplo:
 

for (int i = 0; i < 100000; ++i)
       {
           // Primary loop
           for (int c = 0; c < arraySize; ++c)
           {
               if (data[c] >= 128)
                   sum += data[c];
           }
       }

Fuente código: https://gist.github.com/HennTakipi/fe9970cfcb47c6bc5e97399d73646bbc#file-branchprediction-java

La rama aquí es la declaración if. En este caso, si la matriz está ordenada, la predicción de bifurcación funcionará. Si no está ordenado, no funcionará.

No te preocupes si sientes un ligero dolor de cabeza. Es completamente normal. Cuando comencé a estudiar programación me sucedió exactamente lo mismo. Por suerte encontré la siguiente explicación en Stack Overflow ofrecida por el usuario Mysticial.

En dicha explicación debemos pensar en una línea de ferrocarril que tiene diferentes vías. Si imaginamos que nos encontramos ante un cruce y queremos saber qué camino tomará nuestro tren, ¿tomaremos el camino de la derecha o el de la izquierda? Siempre podemos detenernos a preguntar pero esto puede ser un proceso lento y engorroso. La clave aquí reside en identificar los patrones y poder seguirlos de manera automatizada.

Mecanismo
Imagen de Mecanismo, a través de Wikimedia Commons. Utilizado bajo la licencia CC-By-SA 3.0 .

 

2. Excepciones

Muchos programadores suelen ignorar las excepciones comprobadas, aquellas que pueden ser capturadas y relanzadas cuando ocurren. Sin embargo, hacerlo no hace que el problema desaparezca. Puede que nuestro programa funcione pero el error sigue estando ahí acechando esperando el mejor momento para aguarnos la fiesta.

Muchos de los hilos más frecuentes en Stack Overflow se inician con preguntas sobre excepciones. De hecho una de las preguntas más comunes es: “¿Qué es una NullPointerException y cómo la soluciono?” Si quieres saber más sobre esta excepción recomiendo que leas la siguiente respuesta.

 

3. Fechas y manejo de otros tipos datos

No me cansaré de repetir que un Int es un Int y un String es un String. Así intentemos crear una nueva especie de tipos de datos mezclar un Int y un String en una misma operación no dará como resultado un “IntString”. La broma es muy mala lo sé.

Es evidente que si no manejamos correctamente el tipo de datos de nuestras variables corremos el riesgo de un inevitable desastre. Sin embargo Java puede darnos alguna sorpresa. Para ejemplo el siguiente. Un usuario lanzó la siguiente pregunta en Stack Overflow: ¿Por qué restar estas dos fechas (en 1927) da un resultado extraño?

public static void main(String[] args) throws ParseException {
   SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
   String str3 = "1927-12-31 23:54:07";  
   String str4 = "1927-12-31 23:54:08";  
   Date sDt3 = sf.parse(str3);  
   Date sDt4 = sf.parse(str4);  
   long ld3 = sDt3.getTime() /1000;  
   long ld4 = sDt4.getTime() /1000;
   System.out.println(ld4-ld3);
}

Fuente código: https://gist.github.com/HennTakipi/7ffb627fbbaf45b927276716ceacb99e#file-subtractingdates-java

Si atendemos al código el resultado de la operación debería ser 1, dado que ambas fechas tienen 1 segundo de diferencia, pero el resultado final es 353. ¿Cúal es la razón? ¿Qué extraña conspiración existe tras este resultado? No, las máquinas no se han revelado todavía. La explicación es bastante más sencilla: es una cosa de zona horaria. El 31 de diciembre de 1927, el tiempo en Shanghai se movió 5 minutos y 52 segundos hacia atrás, y Java lo está analizando como el instante para esa fecha / hora local.

 

4. La excepción Chuck Norris

¿Es posible que nos encontremos ante una excepción que no pueda ser capturada en nuestro programa?¿Se bloqueará la aplicación?¿Es posible construir un fragmento de código en Java que haga que una hipotética java.lang.ChuckNorrisException sea imposible de capturar? La respuesta de jtahlborn te llevará a través del proceso completo pero no será fácil, ya lo aviso.

 

Consideraciones finales

Como seguramente has podido comprobar en realidad no importa cuánto sepas sobre Java, siempre encontrarás algo que te sorprenderá y de lo que aprender. Stack Overflow ayuda con problemas específicos en el código, pero también es una gran fuente para aprender nuevas cosas, debatir e intercambiar ideas con otros usuarios.

Si encuentras alguna otra pregunta interesante, debate o curiosidad en Stack Overflow no olvides dejar tus comentarios a continuación.

Guía de Posibilidades Profesionales en el Ecosistema de Java