Estandarización de código

En Selfish, comprendemos la importancia crítica de mantener un alto estándar en la escritura y estructuración de código. Esta página está dedicada a nuestras pautas de estandarización de código, un conjunto de normas y prácticas que seguimos rigurosamente para garantizar la calidad, eficiencia y mantenibilidad de nuestros proyectos de desarollo web.

Aquí encontrarás una guía detallada de nuestros métodos y principios para la estandarización del código, diseñados no solo para mejorar la coherencia y previsibilidad de nuestro trabajo, sino también para facilitar la colaboración y el entendimiento entre los miembros de nuestro equipo y nuestros clientes.

Estas pautas son el resultado de años de experiencia y aprendizaje continuo, reflejando las mejores prácticas de la industria y adaptándose a las últimas tendencias y tecnologías en el desarrollo de software. Ya seas un miembro de nuestro equipo, un colaborador o simplemente alguien interesado en las mejores prácticas de codificación, estamos seguros de que encontrarás esta información valiosa y enriquecedora.

Código legible y limpio.

Evitar mezclar código de funcionamiento similar.

//Ejemplo: 
	echo: $variable_1;
	echo: $variable_2; 
//En lugar de:
	echo: $variable_1;
	echo($variable_2);

Tabulación a 4 espacios.

CRLF solamente a LF.

Correcto uso de los espacios.

Ejemplo:
    if($variable_1 == 'true'){
        //code
    }
En lugar de:
    if ( $variable_1 == 'true' )
    {
        //code
    }

Parámetros de salida al comienzo.

Ejemplo: 
    function my_function(){
    	if($variable_1 == null){
    		return: 0;
    	}
    	//resto del codigo
    }
En lugar de:
    function my_function(){
    	if($variable_1 != null){
    		//realizar codigo
    	}
    }

Código en inglés.

Pese a que la página pueda estar en varios idiomas, por estándar lo correcto sería que nuestra programación se realice en inglés.

Ejemplo:
	$first_pos = ‘something’;
En lugar de:
	$primera_posicion = ‘algo’;

Variables autodescriptivas.

Una variable debe ser entendible por el nombre que contenga, considerando ser lo más breve posible.

Ejemplo:
	$host_locations = json_decode($response);
En lugar de: 
	$response =  json_decode($response);
O de:
	$x =  json_decode($response);

Dividir y vencer

Realizar funciones y código atómico para tareas repetitivas.
Implementar funciones ayuda a mantener el programa con la menor cantidad de código repetido y granular las funciones para un mantenimiento más sencillo.

Ejemplo:
	function render_instruments(){
		$instruments = array( 'drum', 'trumpet', 'fiddle', '...', 'saxophone' );
    		foreach( $instruments as $instrument ) {
			echo $instrument;
			}
	}
En lugar de: 
	$instruments = array( 'drum', 'trumpet', 'fiddle', '...', 'saxophone' );
	echo $instruments[0] = 'drum';
	echo $instruments[1] = 'trumpet';
	echo $instruments[2] = 'fiddle';
	…
	echo $instruments[20] = 'saxophone';	

Operadores ternarios cuando sea conveniente

Fomentar el correcto uso de operadores ternarios cuando no afecten a la legibilidad del código.

Ejemplo:
	$user_name = $user_id === 1 ? 'Paty' : 'Diego'
		
En lugar de:
	if ( $user_id === 1 ){
		$user_name = 'Paty';
	} else if ( $user_id === 2 ){
 		$user_name = 'Diego';
	}
Sin embargo:
	if ( $user_id === 1 ){
		$user_name = 'Paty';
	}elseif($user_id === 2){
		 $user_name = 'Diego';
	}else{
		throw exception
	}
En lugar de:
	$user_name = $user_id === 1 ? 'Paty' : ( $user_id === 2 ? 'Diego' : throw exception );	

Notación

Por convenio y preferencia de los usuarios, la notación a utilizar será “Snake Case”

Ejemplos de definición de variables
	$is_granted;
	$first_pos;
	<div id=”today_date”></div>
Ejemplos de definición de funciones
	function get_custom_users(){
		//code
	}

Teniendo como excepción el manejo de clases según le convenga al lenguaje de programación a utilizar, donde en la mayoria de los casos las clases se nombran con CamelCase

class LeadsController extends Controller {
	/**
	 * Show all Leads and person asociated
	 */
	 ...
	 ...
	 ...

Booleanos con prefijo (is)

Siguiendo la lógica de programar en inglés y por estándar, lo correcto será utilizar el prefijo “is” al declarar una variable booleana o al crear una función cuyo propósito sea regresar una respuesta similar.

Ejemplo de variables:
	$is_admin;
	$is_active;
Ejemplo de funciones:
	function is_gapped(){
		//code
	}

Correcta documentación de código y separación

Será necesario realizar comentarios básicos del funcionamiento del código, así como pistas que apoyen a la descripción de variables y la fácil búsqueda de qué parte del código se encuentra.

Ejemplo:
	/*___ Get Admins ___*/
	function get_admin_users(){
		//Queried function to get all users.
		return get_users( array( 'role__in' => array( 'author', 'subscriber' ) ) ); 			
	}

Comparación explícita

Como método de prevención de errores, lo correcto será utilizar comparaciones explícitas dentro de las estructuras de control.

Ejemplo:
	$boolean = true;
	if($boolean == true){
		//code
	}else if($boolean == false){
		//code
	}else{
		throw exception
	}

Validación de cadenas vacías

Como método de prevención de riesgos, lo correcto será utilizar las herramientas que el lenguaje nos pueda proporcionar.

Ejemplo:
	is_null();
	isset();
	empty();

Evitar variables innecesarias

Tanto en php como en Javascript se puede eficientar el código evitando la creación de variables innecesarias.

Ejemplo php:
	echo get_post_meta(user_id,’post-status’,true);
En lugar de:
	$post_status = get_post_meta(user_id,’post-status’,true);
	echo $post_status;

Evitar múltiple uso de queries y accesos a DOM.

Adicional al punto anterior, cuando se necesite realizar múltiples consultas en cualquier lenguaje, lo correcto será realizar la consulta una sola vez y apoyarnos de una variable.

Ejemplo Javascript:
	obj = document.getElementById("texto");
	obj.innerHTML = "Hola Mundo";
	obj.style.color = “red”;
En lugar de:
	document.getElementById("texto").innerHTML = "Hola Mundo";
	document.getElementById("texto").style.color = “red”;
Ejemplo PHP:
	$admin_users = get_users( array( 'role__in' => array( 'author', 'subscriber' ) ) ); 
	var_dump($admin_users);
	var_dump(filter_users($admin_users));
En lugar de:
	var_dump(get_users( array( 'role__in' => array( 'author', 'subscriber' ))));
	var_dump(filter_users(get_users( array( 'role__in' => array( 'author', 'subscriber' )))));

Manejo de excepciones

El uso correcto de las excepciones apoya a un manejo de errores que no rompa la funcionalidad del código.

Ejemplo PHP:
	//create function with an exception
	function checkNum($number) {
		if($number>1) {
			throw new Exception("Value must be 1 or below");
		  }
		return true;
	}
	//trigger exception in a "try" block
	try {		
		checkNum(2);
    	 //If the exception is thrown, this text will not be shown
    	echo 'If you see this, the number is 1 or below';
	}
	//catch exception
	catch(Exception $e) {
		echo 'Message: ' .$e->getMessage();
	}
Ejemplo Javascript:
	try {
		adddlert("Welcome guest!");
	}
	catch(err) {
	    document.getElementById("demo").innerHTML=error.message;
	}

Uso de jQuery.

Por convenio, la recomendación será utilizar jQuery como método de acceso al DOM cuando sea necesario.

Evitar consultas a base de datos.

Por convenio, la recomendación será utilizar jQuery como método de acceso al DOM cuando sea necesario.

Evitar consultas a base de datos.

WordPress ofrece una gran cantidad de funciones de consulta de datos, por lo que siempre que sea posible se evitarán las consultas directas a la base de datos.

Evitar componentes dependientes de terceros.

Con motivo de evitar las dependencias de funciones de terceros, siempre que sea posible lo correcto será intentar obtener el código a utilizar y añadirlo al wordpress.

Método KISS.

KISS es un acrónimo de Keep It Simply Stupid (Mantenlo Simplemente Estupido) un código simple y fácil de entender a la larga es mucho más fácil de mantener, por lo que vale la pena en ocasiones sacrificar un poco de rendimiento a pro de que el código cumpla este método.

Utilizar un IDE estándar.

Por motivos de convenio, se utilizará el mismo IDE cuando se trabajen proyectos fuera de wordpress. Se utilizará VSCode

Implementar un software de control de versiones.

Se implementará git como software de control de versiones.