Telegram bots en golang (IV)

¡Nómadas! Estamos llegando al final de esta serie de posts sobre Telegram y sus Bots. Tal como comentamos en la entrada anterior, la versión de la calculadora Bot que habíamos implementado no es optima, así que es esta entrada vamos a tratar de optimizar el código, para que quede más elegante y funcional.

Algoritmo actual

Ahora mismo la dinámica o algoritmo es el siguiente:

  1. Comprobamos que se haya recibido un comando
  2. Extraemos por cada comando los argumentos
  3. Procesamos los la operación
  4. Devolvemos resultados al usuario

Como se desprende de los puntos anteriores y más claro si miramos el código de la anterior entrada, veremos que se repite mucho código. Esto significa que si comentemos un fallo en algún punto común o tenemos que actualizar el código común repetiremos trabajo en vano. Por todo esto, lo primero que vamos a hacer es reorganizar el código para evitar repetir código.

Optimización del algoritmo

Qué os parece si remplazamos el switch por el siguiente algoritmo:

  1. Comprobar si es un comando.
    1. Si lo es, entonces validar los argumentos.
      1. Realizar la operación oportuna.
      2. Devolver resultados al usuario.
    2. Devolver error al usuario.
  2. No hacer nada.

Puede que suene algo más complejo, pero ahora veréis que acortamos el código considerablemente y además el programa es mucho más mantenible.

Implementación

Por ahora el esqueleto del código quedaría tal que así:

Donde está el comentario // Realizar operaciones de la calculadora es donde haremos la validación de los argumentos. Lo que antes hacíamos cuatro veces ahora solo lo haremos una única vez. Supongo que ya empezáis a ver la sencillez y mantenibilidad que ofrece esta nueva forma de organizar el código.

Te puede interesar  Telegram bots en golang (II)

Ahora lo que tendremos que hacer es copiar y pegar la validación de argumentos que hacíamos antes donde está el comentario mencionado, pero sin aplicar la operación, pues esto es algo que haremos después.

La comprobación y extracción de los argumentos sigue siendo la misma, la única diferencia es la operación, que no existe. En cambio hemos añadido una variable de tipo bool para indicar si la operación es de tipo decimal o no. Además, se ha añadido una variable txt de tipo string para almacenar el resultado o mensaje a devolver al usuario.

Por último nos quedaría ver como queda la parte del cálculo de las operaciones de la calculadora y el envío de los mensajes hacia el usuario.

Al final no podemos escapar de tener dos partes casi iguales, pues hay que diferenciar la casuística decimal de la entera. Pero ya no es mantener cuatro veces el mismo código.

También queda implementar las funciones esComandoValido,  esComandoCalcesComandoInicio. La primera os podréis imaginar que simplemente comprueba que el comando sea uno de los que se permiten en nuestra calculadora. Por otra parte, el segundo comando devuelve el comando junto con un flag indicando si se trata de un comando para realizar una operación o no. Así podemos diferenciar el comando start del resto de un modo rápido. El último comando simplemente comprueba si se trata del comando start para mostrar el mensaje de ayuda.

Una vez implementadas las funciones el código queda como sigue. Indicar también que se han añadido unas variables globales donde se especifican los comandos que se aceptan en la calculadora. De modo que si ampliamos o reducimos comandos no hace falta modificar partes del código.

Te puede interesar  Puesta en marcha de Odoo en Debian 9 - Parte 1

Código final

Con esto finalizamos la serie de post sobre Telegram y sus Bots. Esperamos que os haya gustado.

Telegram bots en golang (IV)
Etiquetado en:                     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *