Blog >Lista Soluciones > Estándares Android
Estándares de Google para Android
Definición de estándar
Un estándar de programación es una forma de "normalizar" la programación para que al trabajar en un proyecto cualquiera, las personas involucradas en el mismo tengan un acceso rápido y una correcta comprensión del código. Un estándar nos define la escritura y organización del código fuente de un programa, además el seguir un estándar de programación te facilita como programador la modificación de tu propio código fuente aunque lleves tiempo sin mirarlo.
El pasado año 2014, google sacó un artículo en el que definía unos estándares con los que programan ellos en Android, el artículo lo podeis ver aquí .
Así que los he agrupado y aunque no todos, están los más comunes que usamos a la hora de programar. Además si también si quereis ver los estándares de java más comunes podreis echar un vistazo aquí.
Comentarios
Si los comentarios que tratan sobre implementaciones o comentar el código serán los comentarios de implementación. Comentarios de bloque, estos van arriba en la clase, precedidos de linea en blanco :
Comentarios de línea : Comentarios cortos alineados al mismo nivel de la linea de código que sigue. Llevan linea en blanco :
Comentarios de aclaración : Comentarios en la misma linea del código comentado, si hay más de uno, intentar alinear aunque no es obligatorio.
La extructura
La extructura de bloques tiene que llevar el estilo K & R ("Egyptian brackets") :
La indentación
La indentación (la tabulación entre distintos niveles) es de 2 espacios y sólo habrá una sentencia por línea.
La llave de apertura { nunca estará precedida de linea en blanco y lo siguiente será un salto de linea.
Salto de línea después de la llave de cierre }, e intentar alinearla con la línea donde se abrió ese bloque. No hay salto de linea despues de la linea si es seguido por otra llave o una coma.
Los bloques vacíos tendrán este formato
Límite de línea
Cualquier proyecto puede elegir tener el límite de la columna 80 a la 100.
Cuando una misma línea se divide en varias líneas, normalmente para evitar que desborda el límite de la columna, esta actividad se llama ajuste de líneas.que son sangría de 4 espacios. Cuando hay múltiples líneas de continuación, la sangría se puede variar más allá de 4 como se desee. En general, dos líneas de continuación utilizan el mismo nivel de sangrado si y sólo si comienzan con elementos sintácticamente paralelos.
Líneas en blanco
Entre los miembros consecutivos (o inicializadores) de una clase como pueden ser campos, constructores, métodos, clases anidadas, inicializadores estáticos o inicializadores de instancia.
Además dentro de cuerpos de los métodos, según sea necesario para crear agrupaciones lógicas de declaraciones.
Espacios en blanco
Habrá espacios detrás de cada if, for o catch Antes de cualquier llave de apertura { [ con dos excepciones, una son las anotaciones y otras como por ejemplo los arrays:
A ambos lados de cualquier operador binario o ternario,y también se aplica : En multiples excepciones
Opcional : justo dentro de las dos llaves de una inicialización de un array
Extructuras formales de inicialización de un array
Atributos de clase, métodos y variables : aparecen en el orden recomendado por la especificación del lenguaje Java:
Los nombres de las clases seguiran este formato : UpperCamelCase, con verbos adecuados
CONSTANTES : Siempre con mayúsculas
VARIABLES : Siempre empiezan con letra pequeña :
Excepciones : Queda prohibido hacer una excepción en la que no haya nada que mostrar cuando salte. Para las pruebas usaremos NoSuchElementException para averiguar que excepción se produce.
Estándares de Google para Android
Definición de estándar
El pasado año 2014, google sacó un artículo en el que definía unos estándares con los que programan ellos en Android, el artículo lo podeis ver aquí .
Así que los he agrupado y aunque no todos, están los más comunes que usamos a la hora de programar. Además si también si quereis ver los estándares de java más comunes podreis echar un vistazo aquí.
Comentarios
Si los comentarios que tratan sobre implementaciones o comentar el código serán los comentarios de implementación. Comentarios de bloque, estos van arriba en la clase, precedidos de linea en blanco :
/** * @author makone * @description This class creates a Noticia object */
Comentarios de línea : Comentarios cortos alineados al mismo nivel de la linea de código que sigue. Llevan linea en blanco :
try { //ACCION } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); }
Comentarios de aclaración : Comentarios en la misma linea del código comentado, si hay más de uno, intentar alinear aunque no es obligatorio.
private int id; private int categoria; private String name; //titulo principal private String descripcion; private String URLimagen; //URL para descargar imagen
La extructura
La extructura de bloques tiene que llevar el estilo K & R ("Egyptian brackets") :
return new MisPeliculas() { @Override public void method() { if (condition()) { try { something(); } catch (ProblemException e) { recover(); } } } };
La indentación
La indentación (la tabulación entre distintos niveles) es de 2 espacios y sólo habrá una sentencia por línea.
La llave de apertura { nunca estará precedida de linea en blanco y lo siguiente será un salto de linea.
Salto de línea después de la llave de cierre }, e intentar alinearla con la línea donde se abrió ese bloque. No hay salto de linea despues de la linea si es seguido por otra llave o una coma.
Los bloques vacíos tendrán este formato
//Constructor 1 void doNothing() {}
Límite de línea
Cualquier proyecto puede elegir tener el límite de la columna 80 a la 100.
Cuando una misma línea se divide en varias líneas, normalmente para evitar que desborda el límite de la columna, esta actividad se llama ajuste de líneas.que son sangría de 4 espacios. Cuando hay múltiples líneas de continuación, la sangría se puede variar más allá de 4 como se desee. En general, dos líneas de continuación utilizan el mismo nivel de sangrado si y sólo si comienzan con elementos sintácticamente paralelos.
//EJEMPLO 1 public producto(int id, String nombre,float precio, String descripcion,String uRLimagen, int cat) { this.precio = precio; this.id = id; this.nombre = nombre; this.descripcion = descripcion; this.URLimagen = uRLimagen; this.cat = cat; } //EJEMPLO 2 public boolean checkConnectivity() { boolean enabled = true; ConnectivityManager connectivityManager = (ConnectivityManager) this.c .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connectivityManager.getActiveNetworkInfo(); if ((info == null || !info.isConnected() || !info.isAvailable())){ enabled = false; } return enabled; }
Líneas en blanco
Entre los miembros consecutivos (o inicializadores) de una clase como pueden ser campos, constructores, métodos, clases anidadas, inicializadores estáticos o inicializadores de instancia.
Además dentro de cuerpos de los métodos, según sea necesario para crear agrupaciones lógicas de declaraciones.
String id = c.getString("ID"); String name = c.getString("NAME"); String desc = c.getString("DESCRIPCION"); String imagen = c.getString("IMAGE"); String precio = c.getString("PRECIO"); String categoria = c.getString("CATEGORIA"); e=new producto(); e.setId(Integer.valueOf(id)); e.setNombre(name); e.setdescripcion(desc); e.setPrecio(Float.parseFloat(precio)); e.setURLimagen(imagen); e.setCat(Integer.valueOf(categoria));
Espacios en blanco
Habrá espacios detrás de cada if, for o catch Antes de cualquier llave de apertura { [ con dos excepciones, una son las anotaciones y otras como por ejemplo los arrays:
String[][] x = {{"foo"}};
A ambos lados de cualquier operador binario o ternario,y también se aplica : En multiples excepciones
catch (FooException | BarException e)
- En el foreach :
public boolean cargaFotosNoticiasAcabada(ArrayListno){ for (Object noticia : no){ producto pas = (producto) noticia; if (pas.isFotoCargada()==false){ return false; } } return true; }
- Después de , : ; o al cerrar un paréntesis y al agrupar elementos por ejemplo :
private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
Opcional : justo dentro de las dos llaves de una inicialización de un array
new int[] {5, 6} and new int[] { 5, 6 } da igual una que otra.
Extructuras formales de inicialización de un array
new int[] { new int[] { 0, 1, 2, 3 0, } 1, 2, new int[] { 3, 0, 1, } 2, 3 } new int[] {0, 1, 2, 3}
Atributos de clase, métodos y variables : aparecen en el orden recomendado por la especificación del lenguaje Java:
public protected private abstract static final transient volatile synchronized native strictfp
Los nombres de las clases seguiran este formato : UpperCamelCase, con verbos adecuados
CONSTANTES : Siempre con mayúsculas
// Constants static final int NUMBER = 5; static final ImmutableListNAMES = ImmutableList.of("Ed", "Ann"); static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable static final SomeMutableType[] EMPTY_ARRAY = {}; enum SomeEnum { ENUM_CONSTANT }
VARIABLES : Siempre empiezan con letra pequeña :
// Not constants static String nonFinal = "non-final"; final String nonStatic = "non-static"; static final SetmutableCollection = new HashSet (); static final ImmutableSet mutableElements = ImmutableSet.of(mutable); static final Logger logger = Logger.getLogger(MyClass.getName()); static final String[] nonEmptyArray = {"these", "can", "change"};
Excepciones : Queda prohibido hacer una excepción en la que no haya nada que mostrar cuando salte. Para las pruebas usaremos NoSuchElementException para averiguar que excepción se produce.
try { emptyStack.pop(); fail(); } catch (NoSuchElementException expected) { }