Curso de programacion en python3 : 05 - Metodos y creatividad en el control de ejecución

Esta entrada es parte de una serie, puedes ver la primera aquí

Para empezar, ¿que pasa si alguien comete el error de introducir datos inválidos? ¿que pasa si ese error fuerza el cierre del programa y con ello causa que se pierda información?, lo mas seguro es una carta de despido, la segunda posibilidad es que nada pase, pero yo no me arriesgaría a fallar tan miserablemente, para estas y otras posibilidades están las estructuras de control.

Empecemos con un ejemplo de métodos(también llamados funciones), los métodos son fragmentos de código que tienen una única función(por eso es mejor decir funciones), los métodos se definen por convención(acuerdos democráticos, vox populi, vox dei) con guiones bajos entre palabras en minúsculas, la diferencia real en python entre un método y una variable es muy poca, se debe definir un método antes de invocarlo como en C++, a los de java tal vez les resulte un poco molesto pero con el paso del tiempo la costumbre se forma, la palabra reservada def es la diferencia entre un método y cualquier otra estructura, aquí un ejemplo bastante simple de lo que se puede lograr trabajando con métodos.

#!/usr/local/bin/python3
#coding:utf-8
def preguntador():
    x = input("ingrese 1 para si y 2 para no\n")#sin el espacio queda feo XD
    try:
        x = int(x)#intenta convertir el char o string en int
    except:
        print("el contenido de x es:",x," y claramente no es valido")
        return
    if(x == 1):
        print("si")
    elif(x == 2):
        print("pues no")
    else:
        print("opcion no contemplada")

preguntador()#invocamos al método, sin esto, el programa no se ejecuta

Primero es necesario siempre añadir la codificación y en el caso de querer programas multiplataforma, la dirección de python en linux, definimos el método preguntador, recibimos del usuario algunos caracteres, pueden ser mas de uno, la palabra reservada try que significa intentar permite que se ejecute la conversión de tipo string hacia int a prueba de errores, si no es posible convertir el tipo de dato a int el error es capturado evitando que el programa deje de ejecutarse, normalmente el código continuaría a partir de capturar el error ya que esa es la idea pero la sentencia return nos permite cortar o detener la ejecución del método, mas adelante profundizamos en return.

El resto del código es muy simple de entender, si x es 1, se imprime si, si x es 2 se imprime pues no, si el método no ha terminado se imprime opción no contemplada, al final invocamos al método ya que sin esto no podrá ejecutarse, popularmente a un programa que se ejecuta de forma lineal como los anteriores se le llama script(guión) ya que no tiene otra función que ejecutarse una vez, este pequeño programa se le sigue llamando script pero esta vez es funcional( de función, por que tiene funciones :v) y el próximo ejemplo será un programa funcional, la diferencia entre un script y un programa es la forma de ejecución, ya que al terminar una tarea; un sistema debe esperar la siguiente orden y solo se cierra a petición del usuario, un script puede esperar una orden pero debe ser ejecutado de nuevo cada vez, todo el poder de una consola linux esta condensado en los script's que malamente llamamos comandos, pero eso se hablará cuando estemos tratando linux o tengamos aplicaciones por consola mas avanzadas.

Este ejemplo es el programa mas simple que pude imaginar, su función es seguir ejecutándose, cada vez imprime aquello que el usuario introduzca por consola y si el usuario introduce "salir" el programa se cierra.

#!/usr/local/bin/python3
#coding:utf-8
def salida_programada():
    entrada = input("Desea salir del programa? 1-si 2-no\n")
    try:
        entrada = int(entrada)
    except:
        print("Error en el ingreso")
        return
    if(entrada == 1):
        exit()

def tarea(entrada):
    print("se ha introducido",entrada)

def switch_manual(entrada):#les recuerdo que no hay switch
    if(entrada == "salir"):
        salida_programada()
    else:
        tarea(entrada)
       
if __name__=='__main__':#secretos de la vida :v sigue siendo un metodo
    while(True):#¿es infinito? pues si :v es la gracia
        entrada = input("Ingrese algo para mostrarse o salir para salir\n")
        switch_manual(entrada)

Empecemos por lo primero que se ejecuta, la sentencia if, esta forma que he utilizado es para determinar si el programa fue ejecutado por un usuario o ha sido llamado por otro programa, esta es una formula que deberíamos usar siempre y de hecho cada vez que haga un programa como tal voy a utilizarla, si algún método de este programa fuera necesario para algún proyecto futuro; tendría que modificar el código solo para utilizar un método, de momento esto no parece interesante pero sus aplicaciones superan a las que podríamos tener en clases de java donde tenemos solamente una clase main por proyecto y si fuera necesario tomar un método de esa clase, no podríamos, el switch manual es justamente eso, controlo el programa utilizando este método de intermediario evitando que el main se haga demasiado grande, la estética como había dicho es una de las cosas mas importantes en python, sobre todo cuando no hay llaves que identifican donde termina un método.

 Aquí empezamos extendiendo algunas consideraciones y volviendo a los script's funcionales, mucho mas fáciles de plantear para nuestras pruebas de estudio y bastante mas simples de depurar en el caso hipotético de un error, hay otras tantas formas de cortar la ejecución de un proyecto, para métodos ya hemos entendido que es posible detenerlos con return, para bucles como for o while tenemos entonces una forma bastante mas ligera que no interrumpe la ejecución del metodo llamada break(quebrar, detener).

#!/usr/local/bin/python3
#coding:utf-8

def bucle_terminado():
     for x in range(10):
          if(x > 5):
               print(x, "hasta aqui el ciclo")
               break
          else:
               print(x)
         
if __name__=='__main__':
     bucle_terminado()
     print("fin del programa")

Como ya es costumbre el "main" se encarga de arrancar el programa, este bucle se repite haciendo la impresión del numero x hasta que x = 6 e imprime "6 hasta aqui el ciclo", como vemos el programa termina pero no en el break, lo sabemos por que que no se han impreso los números siguientes al 6 y si se ha impreso "fin del programa".

Hasta aquí esta entrada, si cada uno de los lectores ha dedicado tiempo para hacer su propio código y ha ejecutado el que les propongo, puedo asegurar que tenemos un entendimiento de programación funcional e imperativa muy bueno, de momento solo estamos trabajando programación funcional sin requerir módulos externos, creo que va siendo hora de que creemos un modulo completo para ir adentrándonos en la programación funcional avanzada y saltar de ahí a la orientación a objetos.

Comentarios

Entradas populares de este blog

Hablemos de difamación, parafilias y denuncias bien hechas

Criticamos a pablito: "Atrapado en el cuerpo equivocado"

El fruto de una era: Antiintelectualismo moderno