Desarrollando en Manjaro: Como se hizo MPIS [Modulo traslate] parte 1

mpis_logoSaludos amigos Manjaristas.

Seguimos con la serie Como se hizo MPIS, en esta oportunidad les hablare del Modulo traslate  que es el encargado de dar el soporte multi-idioma a MPIS, este modulo aun se encuentra en desarrollo ya que se espera convertirlo en una herramienta parecida a gettext pero un poco mas sencilla de implementar en futuros proyectos. Para hablar de este modulo debemos explicar que es un decorador en python para que sirven y como implementarlos.  vamos a ello.

Los decoradores son funciones que reciben una función como parámetro y devuelven la función modificada (también existen decoradores de clases, lo veremos mas adelante), en pocas palabras una función que modifica a otra función seria como hacer x = f(x) donde x es una función, por lo que se podría cambiar dinámicamente las funcionalidades de una clase o función sin tener que rescribir código, esto nos ayuda a hacer nuestro código mas limpio y  organizado.

¿Porque complicarnos la vida con un decorador?, cuando con una función o una clase normal nos bastaría para cumplir con lo que actualmente hace el modulo en MPIS, por cuestiones de gustos y facilidad para extender el modulo a lo que se tiene pensado para el futuro. veamos un ejemplo sencillo de un decorador en python.

def decorador(funcion):
    def envoltura():
        print("antes de la")
        funcion()
        print("despues")
    return envoltura

@decorador
def mi_funcion():
    print("funcion a decorar")

mi_funcion()

Como se puede observar un decorador no es mas que una función, y la usamos colocando el símbolo @ antes del nombre de la función  y antes de la definición de la función a decorar. en el ejemplo nuestro decorador solo imprime una cadena antes y después de la ejecución de la función, pero las posibilidades son infinitas, la limitación?, nuestra imaginación. Si ejecutamos el ejemplo la salida que mostraría la consola seria:

screenshot_20170120_130757

Veamos como se hacen los decoradores usando clases.

class decorador:
    def __init__(self, f):
        self.f = f

    def __call__(self):
        def envoltura():
            print("antes de la")
            self.f()
            print("despues")
        return envoltura()


@decorador
def mi_funcion():
    print("funcion a decorar")


mi_funcion()

La diferencia entre uno y otro es que usando clase podemos admitir parámetros en el decorador ejemplo @decorador(parámetro). En el ejemplo haciendo uso de clases hay dos cosas que explicar la primera en el constructor de la clase hacemos una copia de la función a decorar, la segunda en el método call definimos los modificativos a la función a decorar. ahora por que call , pues es el método que se ejecuta cuando la clase es llamada con el @, como información adicional se pueden encadenar tantos decoradores como se quieran, se ejecutaran en cascada ejemplo:

@bold
@cursiva
def funcion():
    pass

Su ejecución seria, primero se aplica cursiva a la función y luego al resultado de ese decorado se le aplica el decorador bold.

Esta explicación no pretende ser una guía de decoradores ya que hay muchos aspectos que he pasado por alto, solo intento sentar la base para poder entender como funciona el modulo traslate de MPIS.

Para no extendernos mas lo dejaremos para una próxima publicación,donde veremos en detalles el código del modulo traslate y las explicaciones de su funcionamiento. Espero sus comentarios con gusto responderé cualquier duda o pregunta, hasta la próxima entrada.

 

 

Anuncios
Esta entrada fue publicada en General, Manjaro, Tutoriales y etiquetada , , , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s