Clean code en Javascript
Hemos visto a lo largo de la historia las diferentes definiciones respecto a la palabra programación. Estas a veces generan confusión y aquí buscaremos resolver los diferentes inconvenientes para que lo comprendas mejor.
Programación: Acción de programar.
Programar: Formar programas. Secuencias de instrucciones que sirven para dirigir las operaciones de un computador.
Es obvio que a estas definiciones les hace falta texto para comprenderlo mejor, vamos a completarlo.
Programación: Es crear, componer y organizar instrucciones, estas le indican a una computadora lo que deben hacer. Podemos escribir dichas instrucciones en Javascript, Python o PHP.
Sin embargo, código limpio es el que se escribe con la intención de que otra persona lo entienda y pueda darle mantenimiento.
Para comprender mejor estas definiciones, vamos a usar el lenguaje Javascript.
Variables en Javascript
Debes escribir código que puedas leer
La idea es proporcionar significado, cualquier cosa debe ser directamente comunicativo. Las variables, los métodos y las clases se deben escogerse a conciencia y con conocimiento.
Var, let y const
En Javascript al momento de declarar variables debemos usar las palabras claves o reservadas var
, let
y const
. Aunque lo ideal sería evitar el uso de elementos con alcances globales, por ende no sería bueno usar a var
ya que nuestro enfoque debe ser el de crear en la mayoría de los casos ámbitos de bloques para mantener la intuición y prevenir los comportamientos extraños.
Ejemplo con var
.
{
var message = 'Variable global'
}
console.log(message)
// Obtenemos: Variable global
En este ejemplo podemos acceder a la variable message
aunque esta se encuentre dentro de un bloque entre llaves. Aquí observamos el concepto de "alcance global" y esto no sucede con las variables definidas como let
o const
.
Sabemos que
var
existe, pero usemoslet
yconst
para mantener el ámbito de bloque
{
let message = 'Mensaje leído únicamente desde las llaves'
}
console.log(message)
// Obtenemos: Uncaught ReferenceError: message is not defined
La diferencia entre let
y const
es que al usar una CONSTANTE no podemos cambiar su valor, con esto transmitimos intención y otro programador entenderá el porqué de su uso.
const message = 'No puede cambiar'
message = 'Nuevo texto'
// Obtenemos: Uncaught TypeError: Assignment to constant variable
¿Y si no usamos estas palabras reservadas?
Va a funcionar el código, es algo que técnicamente puede hacerse pero no deberíamos hacerlo, la idea inicialmente es indicar si es var
, let
o const
para transmitir el deseo o intención precisamente para deducir un mensaje mas intuitivo.
message = 'Valor'
// Funciona, pero no trabajes así
Código limpio para nombres
Escribe un nombre que otro ser humano pueda pronunciar
Todo en programación debe ser escrito en inglés y debe escribirse correctamente, completo, sin abreviaciones, ni acrónimos, ni caracteres especiales.
Solo es escribir.
currentDate
publicationDate
Tenemos un texto que dice claramente algo, podemos leer "fecha actual" y "fecha de publicación". Al trabajar de esta manera debemos tener en cuenta el uso coherente del texto y nada más, esto solo depende de ti.
Piensa siempre en cómo mejorar la comunicación en el equipo de programación. Algunas veces demoramos en escoger nombres porque buscamos precisión, coherencia y una nomenclatura uniforme.
Estaría mal hablar en un proyecto de clientes, estudiantes y usuarios porque generaría mucha confusión.
getUser()
getUser()
sería un método ideal para acceder a la lectura de datos, get
y User
hablan por si solo, dicen de inmediato que queremos obtener y qué queremos obtener (atento con los acentos).
Código limpio para tipos de datos
Bool
Sabemos que este tipo de datos puede tener únicamente dos valores (verdadero, falso). En este caso en particular una correcta forma de trabajar con ellos es en forma de pregunta, de nuevo, para mejorar la legibilidad y transmitir mayor sentido.
- ¿Tiene permisos?
- ¿Se puede leer?
- ¿Está vacío?
- ¿Hay frio?
Estas preguntas darán como respuesta un true
o false
. Por eso tienen mucha utilidad para los booleanos.
let isEmpty = false
let canRead = false
let hasPermissions = true
Descripción numérica
Esta idea está pensada para elementos que tratamos mediante un listado como una paginación, colección de datos en una tabla y en general elementos numéricos que requieran de una descripción numérica.
let maxUsers = 12
let totalUsers = 48
Array
En todo sistema hacemos uso de un listado de datos que podamos recorrer o iterar, un ejemplo común es consultar una tabla y recorrer dicho resultado para imprimirlo en pantalla. En este caso el consejo es tratarlos con nombres en plural.
const users = ['user 1', 'user 2']
Los declaré como constante porque por lo general obtenemos un listado de datos que no cambiamos, solo lo recorremos, el ejemplo es igual de valido si usamos let
.
Funciones
¿Cómo llamar a tus funciones? Sería interesante reflexionar respecto a ello.
Una función representa una acción así que debemos usar términos gramaticales para comprenderlo mejor (como verbo y sustantivo).
- Verbo: Aquello que expresa una acción.
- Sustantivo: Algo que existe y es independiente. Puede ser un objeto, sujeto, lugar, etc.
Si mantienes el principio de ser preciso y descriptivo puedes conseguir expresar correctamente el objetivo de una función, por ejemplo:
- Crear un articulo.
- Validar un usuario.
- Enviar un email.
En Javascript sería de la siguiente manera:
createPost() { }
validateUser() { }
sendEmail() { }
Hemos comprobado el uso de verbo y sustantivo.
En funciones de acceso a datos usamos lo que es común: get para obtener, set para alterar, si el resultado esperado es un Bool entonces usamos lo aprendido en dicha sección, trabajamos como si fueran preguntas con is, can, etc.
Clases y objetos
En este caso debe evitarse a toda costa el nombre genérico, por ejemplo: Info
, Data
, etc. El nombre define la responsabilidad por ello debemos tener cuidado y transmitir directamente lo que queremos solucionar.
En este punto lo correcto es mantener lo aprendido en variables, tipos de datos y funciones.
- La clase debe formarse con un sustantivo, por ejemplo
User
. - En los métodos de la clase podemos mantener lo aprendido en funciones.
- En las propiedades también podemos mantener lo aprendido en variables.
Sigamos aprendiendo, escribamos código limpio