No tienes acceso a esta clase

¬°Contin√ļa aprendiendo! √önete y comienza a potenciar tu carrera

Evitar el hardcoding

9/26
Recursos

El hardcoding es la pr√°ctica de escribir valores literales en lugar de identificadores. No debe de usarse, ya que si el d√≠a de ma√Īana debemos cambiar los valores eso significa que debemos cambiar el c√≥digo en los lugares que est√© ese valor est√°tico por completo y luego mandar a producci√≥n, cu√°ndo podr√≠amos hacer el cambio m√°s org√°nico en una variable que afecte a todos los lugares que es llamada.

Aportes 47

Preguntas 1

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

Para los devs que no tengan mucha experiencia en PHP intentere explicar lo mejor que pueda el codigo:

<?php //tag de apertura todo archivo php debe tener este tag
require_once // funcion nativa de php que permite importar otro archivo php
$argv[1] // php cuenta con el arreglo argv para soportar una cadena que se envia en terminal cada separacion de la cadena por espacios es un elemento del array.
echo // es una instruccion para imprimir en pantalla un valor
PHP_EOL // permite que al mostrar una respuesta en pantalla agregue visualmente un "enter" o salto de linea 

Desgraciadamente el hardcoding es tan com√ļn‚Ķ pero tambi√©n es a veces una tarea tit√°nica desaparecerlo.
En mi empresa, hemos ya hecho dos reestructuraciones de proyectos funcionales casi de cero, una aplicación en React Native ya usando estas prácticas y otra en un sitio de comercio para estandarizar componentes y estilos. Técnicamente fue un mes muerto, pero a la larga, ahora que todo está refactorizado y sin hardcoding es realmente más fácil de planificar actualizaciones y agregar nuevas características, inclusive sin tener que involucrar al equipo original.

No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding. No debo hacer hardcoding.

Evitar el hardcoding


El hardcoding es la práctica de escribir valores literales en vez de identificadores. Debemos asegurarnos de que solo necesitemos hacer un cambio en un solo lugar y que el código este correcto.

Es preferible que todas estas variables que potencialmente van a ser modificadas se encuentre en un lugar com√ļn y no en las partes del c√≥digo complejo.

Siempre es bueno poner variables en lugar de valores literales, algo que se suele hacer es crear un archivo de entorno (Usualmente llamado .env) en donde van todas tus variables, y simplemente en el código lo mando a llamar, es genial porque todo es automatizado, si necesitas cambiar algo, simplemente lo haces desde tu archivo .env

Un ejemplo podría ser el caso de implementar una pasarela de pagos, donde tienes un ambiente de pruebas y uno de producción, cuando pasas a producción debes establecer tus API Keys de producción, y es más fácil escribirlas simplemente en un archivo de entorno:D

Nota clase: hardcoding escribir valores literales en lugar de identificadores. Lo ideal es tener un identificador que contenga un valor y ese identificador en cada lugar donde va el valor del identificador.
Otro efecto que tiene el hardcodig es oculta información, cuando estas desarrollando tienes una lluvia de ideas y las escribes directo al código y después de algunos días ya no les encuentras sentido ya que toda la idea no se escribió o desarrollo bien.

Ejemplos claros. Desde hoy voy poner en practica lo que estoy aprendiendo en este curso.

Hay valores que pueden evitar ser hardcodeados, hay valores que no. En todo caso, hardcodear o como le decimos algunos: grabar en piedra, es una mala pr√°ctica a veces necesaria ¬Į_(„ÉĄ)_/¬Į

Yo lo deje de esta manera

$IVA = 21;
$precioInicial = 100;

function precioConIVA($IVA, $precioInicial){
    return $precioInicial * (1 + ($IVA / 100));
 }

echo "Valor del IVA:" .$IVA."%" . "<br />";
echo "Sin IVA: $".$precioInicial . "<br />";
echo "Con IVA: $".precioConIVA($IVA, $precioInicial);

Para el calculo de nuevos producto funciona código, pero si deseamos mostrar el historial de precios de los productos, en donde se cobró el IVA mas alto no nos serviría, utilizar el archivos de configuración, para este caso del calculo de IVA pensaría que la alternativa debería ser por base de datos, de donde mas del porcentaje se incluya con rango de vigencias del IVA.

Side Note: En Panam√° he escuchado el t√©rmino ‚Äúquemar el c√≥digo‚ÄĚ cuando estamos hablando de hardcoding.

¬ŅEn sus pa√≠ses de residencia utilizan otro nombre para hablar de hardcoding?

A veces sentía que exageraba parametrizando cosas pero ya me pasó que por descuido no lo hice con el valor de una url y en cuanto cambió hubo problemas. Ahora ya no me preocupa que haya una larga lista de parámetros en el archivo de configuración

Para evitar el hardcoding, se puede utiliza archivo de configuracion.
con variables const.

Si quieres probar el código del profesor usando php, debes:

  1. ir a la carpeta en donde guardas el codigo, generalmente en un index.php, (este es el nombre del archivo, recuerda guardar el c√≥gigo con un nombre, de la siguiente forma ‚ÄúnombreArchivo.php‚ÄĚ)
  2. ejecutar el código con php (debes tener instalado como minimo un entorno para php, yo uso xampp):
php index.php argumentos ...

NOTA: En argumentos irá el valor que será capturado por $argv[1] en el código y guardado en una variable.
.
Código de ejemplo: manejo del IVA evitando el hardcoding:
.
archivo configs.inc.php

<?php
  $configs = ['valor_iva'=>0.21];
?>

.
archivo index.php
.

<?php

  include_once __DIR__.'/config.inc.php';

  /** NOTA: ejecutar esto en terminal: php index.php argumento
   * *Supongamos el c√°lculo del iva sobre un precio
   * externalizamos el valor del iva a un archivo de configuracion
   */

  $iva = $configs['valor_iva'];

  $precioInicial = $argv[1];
  $precioConIva = $precioInicial * (1 + $iva);

  echo "valor del IVA es del: ".($iva * 100)."%".PHP_EOL;
  echo "precio con IVA: \$$precioConIva, precio sin IVA: \$$precioInicial".PHP_EOL;

?>

.
Ejecución por terminal
.

.
#nuncaParesDeAprender ūüėÉ

No sabía que esta mala practica tiene nombre :0

Escribir en un solo lugar para así impactar en en todos lugares donde sea necesario

He visto api’s implementadas con código Hardcode y es un problema buscar para acceder a los endpoints de cada recurso.

Luego si olvido por que puse x numeros

A pesar de que el curso es adaptable a cualquier lenguaje de programación seria interesante verlo dictado en otros lenguajes además de PHP. Sobretodo para quienes estamos apenas aprendiendo.

Vengo del a√Īo 2082 el Iva en argentina no desaparece

Mala practica de incluir valores literales en lugar de identificadores.

No s√© si soy el √ļnico que se di√≥ cuenta que al hablar del IVA, deberia haber multiplicado por 0.21 y no por 1.21.

usar la convención de PASCAL_CASE, todo en mayuscula y declararlo constante

Lo conocia como magic numbers, alguien que no sepa que es el IVA no va a saber a que hace referencia y sera mas dificil de mantener cuando se haga un cambio

Fantástica clase, de entrada explica como resolver problemas de implementación reales.

una aplicaci√≥n muy √ļtil sobre este concepto es cuando necesitamos definir variables de entorno en un archivo .env

Se debe evitar el uso de valores est√°ticos, ya que es mejor utilizar constantes o variables globales.

Interesante. Hay que evitar escribir valores literales y utilizar identificadores, nos va a permitir tener calidad de código que sea claro y consistente.

Me llevo algo de tiempo la verdad me perdi mucho. Pero aqui esta

<?php
    $numero = $_POST['Numero'];
    
    public function ImprimirFila(string $Columna1, string $Columna2): str {
       $fila = "<tr>
                <td>echo $Columna1</td>
                <td>echo $Columna2</td>
                </tr>"
        return $fila
    }

    public function CalcularFactorial(int $numero): int {
        $factorial = 1;
        for ($f = $numero; $f >= 1; $f--) {
            $factorial *= $f;
            echo ImprimirFila("$numero!","$factorial");
        } 
    }
    public function CalcularMultiplicacion(integer $limite = 10){
        for ($i = 0; $i <= $limite; $i++){
            $multiplicacion = $numero*$i
            echo ImprimirFila("$numero x $i", "$multiplicacion")
        }
    }
?>
<table border="1">
    <?php
    CalcularMultiplicacion();
    CalcularFactorial($numero);
    ?>
</table>

También es correcto el uso de Constantes para valores de poca variabilidad, ya que su mantenimiento seria centralizado.

Lo que hizo el profesor se me hizo una solución muy elegante

En mi experiencia he cometido mucho ese error de hardcodear constantes que al paso del tiempo van siendo utilizadas en varios lugares, es una mala practica y ando mejorando en ello, me parece muy claro forma en que el maestro realiza el ejemplo y como queda mas claro la lectura y con la capacidad de modificar sin afectar

  1. Evitar el hardcoding
    Declarar variables globales, o generar archivos o variables de configuracion, para al momento de cambiar valores sensibles, se haga el cambio global

Otro ejemplo de Hardcoding es al momento de darle una dirección de fichero al código.
Si usamos esa dirección varias veces en el código, de manera local puede que no tengamos problema, pero a la hora de mandarlo a un servidor, puede tener problemas para encontrarlo y toca cambiar uno a uno la dirección de ese fichero.

Hardcoding es muy sutil…

Est√° muy claro los benefcios de evitar el Hardcoding.

Creo que una buena práctica es utilizar funciones get y set para encapsular el código y hacer que su mantenibilidad sea mucho más simple.

Ejemplos de buenos código son los códigos fuentes de los frameworks. Hace unos días estaba viendo la lógica que Laravel tiene para el modulo de user (que trae por defecto). Y en la misma se aplican este tipo de principios.

Me encanta este curso, la verdad es que no me había quedado con buena espina de Chojrin desde el curso de introducción a la terminal. Pero en este curso es una pasada!

Buena pr√°ctica!!.

Esto creo que tambi√©n se llama quemar c√≥digo. Que colocar literal un valor que puede cambiar y no dejarlo como variable por si se tiene que modificar en alg√ļn momento

Me encanta tu optimismo Mauro

Woo es mi primera vez que estoy tan cerca de php por no decir que nunca antes hab√≠a interactuado con el mismo, pero intentando comprender la l√≥gica llegue a enter cosas de JavaScript que es lo que estoy aprendiendo, me resulta muy curioso el aprendizaje colateral que estoy teniendo y de si es posible! ūü§Ė pero si que estoy disfrutando de las lecciones !

Todo muy claro. Gracias

Para los programadores en C# .Net, existe los tipos llamados enum, las cuales son √ļtiles cuando tienen entidades (osea clases), que deben tener alguna especie de Status.

Por ejemplo, supongamos que tenemos la entidad Pedido , la cual es el típico ejemplo de alguna orden de compra de productos, o de envío de productos, lo que sea.

Pero es necesario para reglas de negocios, que el Pedido tenga un Status, que me indique si dicho Pedido se encuentra: ‚ÄúEn Proceso‚ÄĚ, ‚ÄúEn Entrega‚ÄĚ, ‚ÄúCancelado‚ÄĚ, ‚ÄúEntregado‚ÄĚ.

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/enum

Evitar el hardcoding

Mala practica de incluir valores literales en lugar de identificadores. Esto tiene una consecuencia grande ya que en el futuro cuando esos valores tengan que ser modificados, el unico modo de modificar esos valores seria editandolos uno por uno.

Entonces, es mejor establecer unos identificadores para despues realizar un solo cambio y afectar todo el codigo.

Yo que vine a la escuela de wordpress y ya me maree, pero me gusta, voy a estudiar php ūüėĄ

Esta bueno por que los que somos de argentina, ademas del IVA, podemos crear funciones para otros 169 impuestos mas.