Mostrando entradas con la etiqueta Android estandar programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta Android estandar programacion. Mostrar todas las entradas

Styleguide de Google para programar en Android.

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 :

/**
 * @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(ArrayList no){
  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 ImmutableList NAMES = 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 Set mutableCollection = 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) {
}





Compartir Compartir Compartir Compartir