(Si un tema similar ya existe por favor no duden en eliminarlo)
Introducción:
Se conocen como buenas practicas la acción de realizar algo preocupándote de que esto este bien hecho, siguiendo patrones, convenciones y estándares adecuados para lograr un buen producto, el tema es que la programación no se queda fuera de este concepto y cada lenguaje tiene sus "buenas practicas". En lo personal concluyo que en Java las "Buenas practicas" no están muy bien definidas y en muchos casos existen variaciones entre lo que uno cree que es bueno y lo que otros creen que lo es. Por esta razón espero que participen y me ayuden a encontrar un punto medio que nos ayude a evitar el temible código espagueti entre otras cosas.
Desarrollo:
1. Nombres:
En java como en muchos otros lenguajes existen variables, paquetes, clases y métodos. Los nombres que identifican a cada uno de estos aun cuando pueden ser prácticamente cualquiera, se establecieron convenciones para que nuestro código fuera mas prolijo y por lo tanto su lectura fuera mas sencilla. Por otro lado aplicando estas practicas se evitaran conflictos tales como que una clase tenga el mismo nombre que un paquete. A continuación listare cada uno de estos acuerdos y mas abajo procederé a detallarlos y adjuntare ejemplos.
1.1. Se recomienda que tanto paquetes, clases, métodos, variables y constantes tengan un nombre significativo que apunte a su utilidad.
1.2. Todas las variables se escriben en minúscula, en caso de tener mas de una palabra se pondrá la inicial de cada una de estas en mayúscula exceptuando la primera.
1.3. El nombre de las constantes sera únicamente en mayúsculas, si existe mas de una palabra estas son separadas por un guion bajo.
1.4. Se recomienda que todos los métodos a lo igual que las variables tengan nombres en minúscula y en caso de existir mas de una palabra, escribir la inicial de cada una de estas con mayúscula exceptuando la primera.
1.5. Se recomienda que los nombres de los métodos siempre sean verbos.
1.6. Utilizar prefijos significativos para métodos comunes.
1.7. Los nombres de las clases siempre empezaran con mayúscula y el resto sera en minúscula, en caso de existir mas de una palabra se pondrá la inicial de cada una de estas con mayúscula.
1.8. Los nombres de paquetes siempre serán totalmente en minúsculas.
1.9. Se recomienda utilizar prefijos tales como "com", "name", "org" para los paquetes dependiendo de quien es su creador.
1.1. Se recomienda que tanto paquetes, clases, métodos, variables y constantes tengan un nombre significativo que apunte a su utilidad:
Hace un tiempo atrás los programadores acostumbraban a utilizar nombres cortos para poder ahorrar memoria, aparte de que muchos editores de texto no aceptaban mas de 80 caracteres por linea, pero actualmente las limitaciones de memoria en disco y memorias portátiles ya se han desvanecido, y prácticamente todo editor de texto soporta con creces mas de 80 caracteres por linea, es por esto que en la actualidad se recomienda siempre dar nombres característicos a cada elemento y de esta manera poder identificar fácilmente cual es su funcionalidad en el programa.
Código
// Esto no es recomendado int w = 640; int h = 480; // Esto es recomendado int width = 640; int height = 480;
1.2. Todas las variables se escriben en minúscula, en caso de tener mas de una palabra se pondrá la inicial de cada una de estas en mayúscula exceptuando la primera:
Una forma muy simple de identificar una variable de otro tipo de elemento es su nombre, y en java una convención muy conocida es que toda variable empieza en minúscula y en caso de que su nombre se vea compuesto por dos o mas palabras se pondrá la inicial de cada una de estas en mayúscula exceptuando la primera. En el caso de existir una abreviatura tal como FPS se recomienda colocar su nombre en minúsculas de todas maneras.
Código
// Esto esta mal int FPS = 30; // Esto esta bien int fps = 60;
1.3. El nombre de las constantes sera únicamente en mayúsculas, si existe mas de una palabra estas son separadas por un guion bajo:
Para identificar fácilmente una constante y no tener que buscar su procedencia es muy recomendable poner su nombre completamente en mayúscula y si esta se conforma por mas de una palabra, se separaran con un guion bajo
Código
// Esto esta mal final float pi = 3.14; final int ESCALAVENTANA = 2; // Esto esta bien final float PI = 3.14; final float ESCALA_VENTANA = 2;
1.4. Se recomienda que todos los métodos a lo igual que las variables tengan nombres en minúscula y en caso de existir mas de una palabra, escribir la inicial de cada una de estas con mayúscula exceptuando la primera:
Código
// Esto esta mal public void PintarPerro(){ } public void pintar_gato(){ } // Esto esta bien public void pintarPerro(){ } public void pintarGato(){ }
1.5. Se recomienda que los nombres de los métodos siempre sean verbos:
Los métodos usualmente son para realizar acciones, tales como calcular un problema matemático o asignar un nuevo valor a un atributo, es por esta razón que se aconseja que los nombres de los métodos siempre sean verbos tales como pintar, dibujar, calcular, eliminar...
Código
// Esto esta mal public int suma(int x, int y){ return x+y; } // Esto esta bien public int sumar(int x, int y){ return x+y; }
1.6. Utilizar prefijos significativos para métodos comunes:
Por principio de encapsulación los objetos deberían tener todos sus atributos como privados o protegidos y la única manera de acceder a ellos desde el exterior es por métodos "get" o "set". Se recomienda que siempre que se cree un método con estas características se indique el prefijo "get" o "set" dependiendo de su utilidad.
También existe el prefijo "is" utilizado en métodos que retornan un booleano (true o false) entre otros tales como "compute" para métodos que realicen algún calculo, "find" para métodos destinados a buscar algo, o "initialize" para métodos utilizados para inicializar algo. Estos últimos tres "compute", "find" e "initialize" no son muy utilizados.
Código
// Esto esta mal public void edad(int edad){ this.edad = edad; } public int decirEdad(){ return edad; } // Esto esta bien public void setEdad(int edad){ this.edad = edad; } public int getEdad(){ return edad; } public boolean isFocusable(){ return focusable; }
1.7. Los nombres de las clases siempre empezaran con mayúscula y el resto sera en minúscula, en caso de existir mas de una palabra se pondrá la inicial de cada una de estas con mayúscula:
Como dije anteriormente una buena manera de identificar ciertos elementos es mediante su nombre y al respetar esta convención nunca tendrás un problema a la hora de identificar una clase de una variable o método.
Código
// Esto esta mal public class juego{ } public class Ventana_Principal{ } //Esto esta bien public class Juego{ } public class VentanaPrincipal{ }
1.8. Los nombres de paquetes siempre serán totalmente en minúsculas:
los nombres de paquetes serán completamente en minúscula sin importar que exista mas de una palabra, en caso de ser así algunos optan por agregar un "." en mi caso opto por evitar utilizar nombres compuestos, ya que el punto se entiende como un paquete anidado en otro.
Código
// Esto esta mal package Juego; // Esto esta bien package juego;
1.9. Se recomienda utilizar prefijos tales como "com", "name", "org" para los paquetes dependiendo de quien es su creador:
Bueno, en este momento me esta costando mucho recordar esto, así que no ahondare mucho en este tema, quizás mas adelante lo complete, el hecho es que existen distintos tipos de prefijos que se acomodan a nosotros como lo son por ejemplos com y name:
com = compañia
name = nombre
En caso de ser un solo programador el que esta programando se utiliza el prefijo name seguido por el nombre del programador y si el programa es por parte de una compañía se utilizaría el prefijo com seguido por el nombre de la compañía, de esta manera se puede identificar quien es su creador y a quien le pertenece los derechos de su creación, un ejemplo para que quede mas claro
Código
package name.nacho.components; package com.polloshermanos.components;
En este caso no pondré una sección "esto esta mal" ya que yo sinceramente no hago mucho uso de esto y no estoy muy familiarizado con su importancia.
Continuare con esto mañana, que ya me estoy cansando de escribir