Actionscript: mejorando la presentacion del codigo: 1ra parte

Una correcta legibilidad facilita las tareas de codificar y mantener nuestras aplicaciones.

Una manera de mejorar la legibilidad de nuestro código es al usar convenciones de nombres.

Variables:

  • El nombre de la variable debe permitir identificar rápidamente su tipo (Entero, arreglo, etc) y su alcance (Local, global )
  • No usar el mismo nombre de variable en diferentes casos, esto puede causar confusión.
  • Usar abreviaciones claras y reconocidas, evitar por ejemplo usar la abreviatura sec, que puede significar sección o secundario.
  • Si es necesario usar un nombre que contenga varias palabras, cada palabra se debe distinguir usando una letra mayúscula o un separador como “_”.
  • Debe ser lo más descriptivo posible. Por ejemplo una variable que recoge datos de usuario sería mejor llamarla userData en lugar de únicamente data.
  • Usar nombres lo mas cortos posibles, claro mientras sean descriptivos.
  • Usar “Strict data typing” es decir definir el tipo de dato de la variable. Por ejemplo:
var datosUsuario:String = new LoadVars();
  • En contadores usar variables de una sola letra (i,n,j).
  • Iniciar las variables con una letra minúscula.

Constantes:

  • La constante debe ser escrita usando solo letras mayúsculas.
  • Separar las palabras con guión bajo “_”.

Variables booleanas:

  • Le debe anteceder la palabra “es” o “is” en ingles. Ya que solo puede ser verdadero o falso.
var isMujer:Boolean;

Nombres de funciones y métodos

  • Usar nombres descriptivos.
  • Cada palabra que compone el nombre de la función debe ser distinguida usando una letra Mayúscula o un separador como “_”.
  • Describe el valor que retorna y la operación que realiza. Por ejemplo obtenerNombre().

Clases y objetos

  • El nombre de la clase debe empezar con una letra mayúscula.
  • Cada palabra se debe distinguir usando una letra Mayúscula
  • Usar sustantivos para nombrarlas instancias, por ejemplo NuevoUsuario.
  • Usar nombres en singular, por ejemplo Usuario.
  • No usar el nombre de la clase en los atributos, pues genera redundancia. Por ejemplo usuario.usuarioEdad seria mejor edad únicamente.
  • Cuando incluyamos verbos debemos hacerlo en infinitivo. Por ejemplo Correr en lugar de corriendo.

Paquetes:

  • Usar el dominio reverso para nombrar los paquetes. Por ejemplo com.undermedia.
  • Agrupar las clases del paquete por funcionalidad.
  • Cada palabra de se debe distinguir usando una letra Mayúscula

Interfaces

  • El nombre de la clase debe empezar con una letra mayúscula.
  • Usar adjetivos, por ejemplo Imprimible.

Convenciones para comentar nuestro código

Los comentarios en nuestro código deben ayudar a entender al como y porque de algún segmento complejo.

  • No comentes lo obvio.
  • Para comentar varias lineas usa /**/ y para una sola //
  • Usa un comentario de cabecera para decribir aspectos como: Nombre, version, fecha, autor descripción.

Convenciones de la codificación

Uno de los aspectos más importantes de la codificación es la concistencia.

  • Manten el código en un solo lugar. Generalmente el primer Frame de la línea del tiempo.
  • Colóca el código en la primera capa y nombralo “ActionScript”.
  • No incluyas código dentro de los objetos como botones, instancias de movieClips. Por ejemplo evita:
on (release) {
// Do something.
}

En lugar usa:

myBtn.onRelease = function() {
// Do something.
};
  • Evita el uso de rutas absolutas, es decir evita el uso de “_root”. Usa this, this._parent, o _parent en lugar de _root.
  • Usa “_lockroot” para solucionar problemas asociados con un incorrecto uso de “_root”. Por ejemplo si cargas una movieClip y se para inesperadamente, usa:
this._lockroot = true;
  • Usa la palabra “this” aunque tu código funcione sin este. Esto facilita que el código sea mas entendible y legible.
  • Consideraciones de la palabra “this” en clases.
    • Para referirte a la clase dentro de una función o método anidado, crea una referencia local a la clase. Por ejemplo.
class Undermedia{
var propiedad:String;
function Undermedia(){
//Refernecia a la clase
var thisObj:Undermedia = this;
function funcionAnidada(){
thisObj.propiedad
}
}
}

Estructurando una clase

  • Usa un comentario de cabecera para decribir aspectos como: Nombre de la clase, version, fecha, autor, descripción.
  • Incluye archivos externos si son necesarios.
  • Coloca todas tus variables estáticas.
  • Coloca tus atributos, primero los públicos y luego los privados.
  • Declara el contructor de la clase.
  • Agrupa tus métodos por funcionalidad
  • Coloca los métodos get/set.

Guias para crear una clase

  • Colocaca cada declaracion en diferentes lineas, es decir evita:
var nombre:String, apellido:String;
playBtn.onRelease = playBtn.onRollOut = playsound;
  • Inicializa las variables locales cuando son declaradas, mientras que los atributos de clase deben ser inicializados con valores por “default” o con null esto optimiza el rendimiento el evitar mantener variables no utilizadas en memoria.
  • Declara las varibles antes de usarlas, esto incluye los “loops”.
  • Evita nombrar variables locales con el mismo nombre que las de clase
  • Define tus métodos o atributos públicos cuando lo requieran sino definelos como privados.
  • No abuses de los getters / setters, si algo va a ser leido únicamente solo crea el getter mas no el setter.
  • Usa un prefijo para el this aunque no sea necesario esto facilita identificar si el atributo a método pertenecen a la clase. Por ejemplo

class Undermedia{
var propiedad:String;
function Undermedia(){
//Refernecia a atributo de clase
Undermedia.propiedad;
}
}
  • Usa la palabra “Super” para referirse a un metodo o propiedad de una clase heredada, por ejemplo:
class Mamifero{
private var numPatas:Number;
function getNumPatas():Number{
return this.numPatas;
}
function setNumPatas(paramPatas):Void{
this.numPatas = paramPatas;
}
}

class Humano extends Clotes{
function getPatas(){
return super.getPatas();
}

}
  • No abuses con el uso de with, esto puede dificultar la legibilidad de tu código, al desconocer el alcance. Por ejemplo (Ejemplo extraido de la fuente).
this.attachMovie("circleClip", "circle1Clip", 1);
with (circle1Clip) {
_x = 20;
_y = Math.round(Math.random()*20);
_alpha = 15;
createTextField("labelTxt", 100, 0, 20, 100, 22);
labelTxt.text = "Circle 1";
someVariable = true;
}

Se lee mejor:

this.attachMovie("circleClip", "circle1Clip", 1);
circle1Clip._x = 20;
circle1Clip._y = Math.round(Math.random()*20);
circle1Clip._alpha = 15;
circle1Clip.createTextField("labelTxt", 100, 0, 20, 100, 22);
circle1Clip.labelTxt.text = "Circle 1";
circle1Clip.someVariable = true;

Una excepcion a la regla es cuando usas al API de dibujo pues se llama continuamente a los mismos métodos, por ejemplo:

this.createEmptyMovieClip("rectangleClip", 1);
with (rectangleClip) {
lineStyle(2, 0x000000, 100);
beginFill(0xFF0000, 100);
moveTo(0, 0);
lineTo(300, 0);
lineTo(300, 200);
lineTo(0, 200);
lineTo(0, 0);
endFill();
}