Aunque a menudo se ignoran, los estándares de codificación son cruciales para crear una base de código coherente y legible, esencial para nuevas incorporaciones en el equipo y para la escalabilidad.
Escribir y comprender código en una gran base de código que no sigue los estándares de codificación es un proceso desordenado e imposible de mantener, por mucho comentarios que tenga. Tener presentes unos estándares de codificación consensuados por el equipo asegura un proceso de desarrollo de software ágil y una buena calidad del código.
Índice:
¿Qué son los estandares de codificación?
Los estándares de codificación son reglas, técnicas y directrices para crear un código más limpio, legible y eficiente, con un mínimo de fallos y errores. Además, ofrecen a los desarrolladores una forma uniforme de construir código altamente funcional.
Recuerde que las normas de codificación no son opiniones personales; son reglas concretas que determinan el estilo de programación, los procedimientos y los métodos de su código. Por tanto, deben definirse explícitamente y ponerse a disposición de los desarrolladores.
Las normas de codificación garantizan que todos los desarrolladores sigan las directrices especificadas. Como resultado, todos los desarrolladores -incluso los recién llegados- pueden entender, depurar y mantener el código con facilidad. Lo ideal sería que el código fuente de su equipo pareciera escrito por un único desarrollador en una sola sesión.
Herramientas y ejemplos
Hay una serie de programas que nos pueden ayudar a estandarizar nuestro código. Comprobando el código antes, mientras y después de nuestros despliegues nos aseguramos por ejemplo de que una indentación diferente (espacios vs tabulaciones, 2 espacios vs 4 espacios, etc), por error o por religión, no nos provoque un dolor de cabeza innecesario.
Estructuras de lenguajes de programación
Código Espagueti, el «anti patrón» de programación
Bash
Herramienta:
- ShellCheck: Herramienta que proporciona advertencias y sugerencias para scripts de Bash.
Ejemplo:
#!/bin/bash
# Ejemplo de script Bash siguiendo algunas convenciones comunes
parametro_uno=5
parametro_dos=10
if [ $parametro_uno -gt 0 ]; then
echo "El parámetro uno es positivo."
else
echo "El parámetro uno no es positivo."
fi
Documentación:
C
Herramientas:
- clang-format: Herramienta de formateo para C y otros lenguajes compatibles con LLVM.
- cppcheck: Herramienta estática de análisis de código para C y C++.
Ejemplo:
// Ejemplo de código C siguiendo algunas convenciones de estilo comunes
#include
int main() {
int parametroUno = 5;
int parametroDos = 10;
if (parametroUno > 0) {
printf("El parámetro uno es positivo.\n");
} else {
printf("El parámetro uno no es positivo.\n");
}
return 0;
}
Documentación:
Go
Herramientas:
- gofmt: Herramienta oficial para formatear código Go.
- golint: Linter para Go que verifica el cumplimiento de convenciones y estilos recomendados.
Ejemplo:
// Ejemplo de código Go siguiendo las convenciones de estilo recomendadas
package main
import "fmt"
func main() {
parametroUno := 5
parametroDos := 10
if parametroUno > 0 {
fmt.Println("El parámetro uno es positivo.")
} else {
fmt.Println("El parámetro uno no es positivo.")
}
}
Documentación:
Java
Herramientas:
- Checkstyle: Herramienta de verificación de código que sigue las reglas de estilo, como las especificadas en el Google Java Style Guide
- SpotBugs: Herramienta de análisis estático que puede ayudar a encontrar posibles problemas en el código Java.
Ejemplo:
// Ejemplo de código Java siguiendo el Google Java Style Guide
public class MiClase {
private int parametroUno;
private int parametroDos;
public MiClase(int parametroUno, int parametroDos) {
this.parametroUno = parametroUno;
this.parametroDos = parametroDos;
}
public void metodoEjemplo() {
if (parametroUno > 0) {
System.out.println("El parámetro uno es positivo.");
} else {
System.out.println("El parámetro uno no es positivo.");
}
}
}
Documentación:
JavaScript
Herramientas:
- eslint: Herramienta de linting para JavaScript que permite personalizar reglas según las guías de estilo, como la de Airbnb.
- prettier: Formateador de código que ayuda a mantener la consistencia en el estilo de JavaScript.
Ejemplo:
// Ejemplo de código JavaScript siguiendo la guía de estilo Airbnb
class MiClase {
constructor(parametroUno, parametroDos) {
this.parametroUno = parametroUno;
this.parametroDos = parametroDos;
}
metodoEjemplo() {
if (this.parametroUno > 0) {
console.log("El parámetro uno es positivo.");
} else {
console.log("El parámetro uno no es positivo.");
}
}
}
Documentación:
Perl
Herramientas:
- Perl::Critic: Herramienta que proporciona comentarios sobre el estilo y calidad del código Perl.
- perltidy: Formateador de código Perl.
Ejemplo:
# Ejemplo de código Perl siguiendo algunas convenciones de estilo comunes
my $parametro_uno = 5;
my $parametro_dos = 10;
if ($parametro_uno > 0) {
print "El parámetro uno es positivo.\n";
} else {
print "El parámetro uno no es positivo.\n";
}
Documentación:
Python
Herramientas:
- flake8: Herramienta de linting que verifica el cumplimiento de PEP 8.
- black: Formateador de código que sigue las convenciones de estilo para Python.
Ejemplo:
# Ejemplo de código Python siguiendo PEP 8
class MiClase:
def __init__(self, parametro_uno, parametro_dos):
self.parametro_uno = parametro_uno
self.parametro_dos = parametro_dos
def metodo_ejemplo(self):
if self.parametro_uno > 0:
print("El parámetro uno es positivo.")
else:
print("El parámetro uno no es positivo.")
Documentación:
Ruby
Herramienta:
- RuboCop: Linter y formateador para Ruby que sigue las convenciones de estilo comunes.
Ejemplo:
# Ejemplo de código Ruby siguiendo algunas convenciones de estilo comunes
parametro_uno = 5
parametro_dos = 10
if parametro_uno > 0
puts "El parámetro uno es positivo."
else
puts "El parámetro uno no es positivo."
end
Documentación:
Rust
Herramientas:
- rustfmt: Formateador oficial de código Rust.
- clippy: Linter para Rust que proporciona sugerencias para mejorar el código.
Ejemplo:
// Ejemplo de código Rust siguiendo algunas convenciones de estilo comunes
fn main() {
let parametro_uno = 5;
let parametro_dos = 10;
if parametro_uno > 0 {
println!("El parámetro uno es positivo.");
} else {
println!("El parámetro uno no es positivo.");
}
}
Documentación: