Convención de código Java y algo más (Parte 1)



Comenzando a escribir después de un largo periodo, esta vez retomando el blog y agregándole nuevos temas que tienen que ver con programación y la ciencia de la computación. Para empezar hablaremos sobre Java (aunque no es mi lenguaje de programación favorito) realmente la gran mayoría, conoce y ha trabajado con este LP, su sintaxis tan fácil de aprender, la cantidad de librerías, potente (escalable) y su uso en la industria y desarrollo del software,etc, etc ... le han hecho merecedor de los mas usados y mejores pagados en este medio. (aunque las estadísticas dicen que es Ruby).

Para los que ya conocen este lenguaje y todo lo que ofrece, fue creado por la compañía Sun microsystems y luego adquirida por Oracle, basándose en C/C++ (como muchos otros LP) como uso fundamental para la plataforma Java.
El siguiente tema va para tanto los que tienen poca o nula experiencia en el lenguaje y desean que su código sea "Entendible" o legible para otros programadores, la cual tomaré de lo publicado por Scott Hommel, también agregaré algo de la experiencia de otros programadores.

Empecemos...

Convención de Código de Java y algunas notaciones conocidas

Porque debo usar convenciones?

Por muchas razones:

Por que algún día crearás software mantenible y otros o tú tendrán que entender la lógica de lo programado en algunos meses y años.
Porque le da presentación como un producto bien hecho.
Y a la gran mayoría de desarrolladores tienen que seguir una convención 

En archivos

El ".java" es la extension de codigo fuente en Java
El ".class" es el bytecode que la JVM se encarga de ejecutar

En el orden de los archivos

En el codigo fuente va en el siguiente orden;
1) Comentarios al comienzo
2) Sentencias import y package
3) Declaraciones de clases e interfaces

1) Comentarios al comienzo: deben comenzar con un comentario en el que se lista el nombre de la clase, información de la versión, fecha, y copyright:

/*
 * Nombre de la clase
 *
 * Informacion de la version
 *
 * Fecha
 *
 * Copyright
 */

2) Sentencias import y package
La primera línea no-comentario de los ficheros fuente Java es la sentencia package. Después de esta, pueden seguir varias sentencias import. 

package java.awt;
import java.awt.peer.CanvasPeer;

 Nota: El primer componente de el nombre de un paquete único se escribe siempre en minúsculas con caracteres ASCII y debe ser uno de los nombres de dominio de último nivel, actualmente com, edu, gov, mil, net, org, o uno de los códigos ingleses de dos letras que especifican el país como se define en el ISO Standard 3166, 1981.

3) En clases o interfaces: Seguiría el orden:

-Comentario de documentación de clases de la clase o interafce
/**...*/

-Sentencia class o interface

-Comentario de implementación de clase si es necesario
/*...*/

-Variables de clase (las static, primero las public, luego protected y despues private)
-Variables de instancia
-Constructores
-Métodos

En la Indentación


1) Para la longitud evitar lineas de mas de 80 caracteres 

2) Para "romper la linea" se hace cuando:
-Después de una coma
-Después de un operador
-Después de un alto nivel (junto al padre)
-Alinearlo al mismo nivel
-Si se aglutina al margen derecho, indentar justo 8 espacios en su lugar:

Ejemplos

Metodos:
unMetodo(expresionLarga1, expresionLarga2, expresionLarga3,
         expresionLarga4, expresionLarga5); // al ras de el parentesis
var = unMetodo1(expresionLarga1,
                unMetodo2(expresionLarga2,
                          expresionLarga3));

Expresiones aritméticas
nombreLargo1 = nombreLargo2 * (nombreLargo3 + nombreLargo4
               - nombreLargo5) + 4 * nombreLargo6; // PREFERIDA
nombreLargo1 = nombreLargo2 * (nombreLargo3 + nombreLargo4
                              - nombreLargo) + 4 * nombreLargo6;  // EVITAR

Para indentar 8 espacios:
lo que hacemos normalmente:

unMetodo(int anArg, Object anotherArg, String yetAnotherArg,
         Object andStillAnother) 

Se debería hacer 8 espacios desde p de private en la parte inferior hasta la s de static (contamos 8 espacios):

private static synchronized metodoDeNombreMuyLargo(int unArg,
        Object otroArg, String todaviaOtroArg,
        Object unOtroMas) {
         ...
}

Igualmente para IF   usaremos la reglas de 8 espacios

//MEJOR USAR ESTA INDENTACIÓN
if ((condicion1 && condicion2)
 || (condicion3 && condicion4)
 ||!(condicion5 && condicion6)) {
 hacerAlgo();
}
//O ESTA
if ((condicion1 && condicion2) || (condicion3 && condicion4)
 ||!(condicion5 && condicion6)) {
 hacerAlgo();
}


Ultimo