Tutorial de Java

Sugerencias de Codificación

Anterior | Siguiente
  1. Nombres de Ficheros
  2. Organización de Ficheros
  3. Ficheros fuente Java
  4. Indentación
  5. Comentarios
  6. Declaraciones
  7. Sentencias
  8. Espacios en blanco
  9. Convenciones de nomenclatura
  10. Técnicas de programación
  11. Código de Ejemplo

Quizá el título de la sección esté mal expresado, porque no se intenta aquí establecer una normas a seguir para codificar en Java, sino que en esta sección se recogen las convenciones y sugerencias de codificación Java que sigue Javasoft en su código y que recomienda seguir a la comunidad de programadores. Cubre muchos aspectos, desde los nombres de los ficheros, a la organización de éste, indentación, comentarios, declaraciones, sentencias, espacios en blanco, convenciones de nomenclatura, prácticas de programación, hasta incluso código de ejemplo.

Todos los ejemplos de esta sección pertenecen a Sun, tienen su Copyright y se usan con permiso solicitado.

Las convenciones son importantes por un gran número de razones, así que ese es el motivo de recogerlas en este Tutorial, aunque cada programador es muy libre de seguirlas o no, dependiendo de sus hábitos ya adquiridos o de las normas que siga su empresa. Entre las razones a destacar por las que se deben seguir una normas, están:

  • El 80% del coste del ciclo de vida de una pieza de software es el mantenimiento
  • Raramente un software es mantenido por el autor original
  • Las convenciones incorporan legibilidad al código, permitiendo que los ingenieros entiendan el nuevo código mucho más rápidamente
  • Si se proporciona el software como un producto, ha de asegurarse que está igual de empaquetado y limpio que cualquier otro que se haya hecho

Nombres de Ficheros

El sufijo de los ficheros con código Java es .java.

Un fichero habitual en cada directorio debería ser README, para sumarizar el contenido de ese directorio.

Organización de Ficheros

Un fichero debe consistir en secciones bien definidas, separadas por líneas en blanco y un comentario opcional identificando cada una de las secciones.

Ficheros de más de 2000 líneas con inmanejables y deberían evitarse.

El ejemplo de fichero fuente Java, muestra el modo de formatear adecuadamente un fichero.

Ficheros fuente Java

Cada fichero con código Java debe contener una sola clase pública o interfaz. Cuando se asocian clases privadas e interfaces con una clase pública, se pueden colocar en el mismo fichero fuente que la clase pública. La clase pública debería ser la primera clase o interface del fichero.

Los ficheros fuente con código Java, deberían seguir el siguiente orden:

Comentarios iniciales

Todos los ficheros fuente deben comenzar con un comentario al estilo C que indique el programador, o programadores, la fecha, una nota de copyright y una pequeña descripción del propósito del programa. Por ejemplo:

   /*
    * Nombre de la clase
    *
    * Versión
    *
    * Copyright
    */

Sentencias import y package

Por ejemplo

    import java.applet.Applet;
    import java.awt.*;
    import java.net.*;

Declaraciones de clase e interface

En la tabla siguiente se describen las diferentes partes de la declaración de una clase o interface, y en el orden que deben aparecer, tal como se muestra en el código de ejemplo.

  Parte de la declaración Notas
1 Comentario de documentación
(
/**...*/)
En la parte de Comentario de Documentación se indica la información que debe ir en este comentario
2 Sentencia class o interface  
3 Comentarios a la implementación de la clase/interface
(
/*...*/), en caso necesario
Este comentario debería contener cualquier información de alcance que no sea adecuada para estar situada en el comentario que permite generar posteriormente la documentación.
4 Variables de la clase (estáticas) En primer lugar las variables public, luego las protected y finalmente las private.
5 Variables de instancia Primero las públicas, luego las protegidas y las privadas.
6 Constructores  
7 Métodos Estos métodos deben estar agrupados por funcionalidad, en vez de por el ámbito o accesibilidad. Por ejemplo, un método de una clase privada puede encontrarse entre dos métodos de instancia públicos. La finalidad es que el código sea más fácil de leer y entender.

Indentación

Deben tomarse 4 espacios como unidad de indentación. La construcción exacta de la indentación (espacios o tabuladores) no es crítica. Los tabuladores deben estar fijados exactamente cada 8 espacios (no cada 4).

Longitud de líneas

Se deben evitar líneas de más de 80 caracteres, porque sino no son manejadas correctamente por muchos terminales y herramientas.

Los ejemplos de uso en la documentación deben ir en líneas más cortas, generalmente de no más de 70 caracteres.

Corte de líneas

Cuando una expresión no cabe en una sola línea, debe saltarse a la siguiente línea de acuerdo con los siguientes principios generales:

  • Saltar después de una coma
  • Saltar antes de un operador
  • Son preferibles los saltos de alto nivel a los de bajo nivel
  • Alineas la nueva línea con el inicio de la expresión del mismo nivel de la línea inmediatamente anterior
  • Si las anteriores reglas dejan el código confuso, o demasiado compactado sobre el margen derecho, se colocarán indentaciones de 8 espacios en su lugar

Estos son algunos ejemplos de saltos de línea en llamadas a métodos:

funcion( expresionLarga1, expresionLarga2, expresionLarga3,
         expresionLarga4, expresionLarga5 );

var = funcion1( expresionLarga1,
                funcion2( expresionLarga2,
                          expresionLarga3 ) );

Los dos ejemplos siguientes muestran el salto de línea en una expresión aritmética. La primera es la más adecuada, ya que el salto se realiza fuera de la expresión entre paréntesis, que está a más alto nivel.

nombreLargo1 = nombreLargo2 * (nombreLargo3 + nombreLargo4 - nombreLargo5)
               + 4 * nombreLargo6; // PREFERIBLE

nombreLargo1 = nombreLargo2 * (nombreLargo3 + nombreLargo4
                               - nombreLargo5) + 4 * nombreLargo6; // EVITAR

Los ejemplos que siguen muestran la indentación en las declaraciones de métodos. El primer caso es el convencional. El segundo debería desplazar la segunda y tercera líneas demasiado a la derecha si se usa la indentación convencional, así que se indenta solamente 8 espacios.

// INDENTACION CONVENCIONAL
unMetodo( int unArg, Object otroArg, String esteEsOtroArg,
          Object yTodaviaOtroMas ) {
    ...
}

// INDENTA 8 ESPACIOS PARA EVITAR UNA INDENTACION DEMASIADO PROFUNDA
private static synchronized otroMetodoConNombreMuyLargo( int unArg,
        Object otroArg, String esteEsOtroArg,
        Object yTodaviaOtroMas ) {
    ...
}

El salto de líneas para las sentencias condicionales con if deberían utilizar la regla de los 8 espacios como norma general, en lugar de la habitual de 4 espacios, que en este caso hace la lectura más dificultosa.

// NO UTILIZAR ESTA INDENTACION
if ((condicion1 && condicion2)
    || (condicion3 && condicion4)
    ||!(condicion5 && condicion6)) { // SALTOS ERRONEOS
    hacerAlgoAlRespecto();           // HACEN ESTA LINEA CASI INVISIBLE
} 

// UTILIZAR ESTA INDENTACION ALTERNATIVA
if ((condicion1 && condicion2)
        || (condicion3 && condicion4)
        ||!(condicion5 && condicion6)) {
    hacerAlgoAlRespecto();
} 

// O UTILIZAR ESTA OTRA
if ((condicion1 && condicion2) || (condicion3 && condicion4)
        ||!(condicion5 && condicion6)) {
    hacerAlgoAlRespecto();
}

Las líneas de código siguientes muestran tres ejemplos aceptables de formateo de expresiones ternarias.

alpha = (unaExpresionBooleanaMuyLarga) ? beta : gamma;  

alpha = (unaExpresionBooleanaMuyLarga) ? beta
                                       : gamma;  

alpha = (unaExpresionBooleanaMuyLarga)
        ? beta 
        : gamma;

Navegador

Home | Anterior | Siguiente | Indice | Correo