Saltar a contenido

Definir la función main()

Habíamos acordado como buena práctica que las funciones definidas por el usuario se deben agregar al principio del programa, antes de cualquier otra instrucción que las invoque. De esta manera, nos aseguramos que la función esté definida antes de ser llamada, así como también nos mantiene el código más organizado y fácil de leer.

Y como ejemplo final habíamos visto el siguiente código:

Python
1
2
3
4
5
6
7
8
# Definiciones de funciones de usuario
def formatear_saludo(nombre="Mundo"):
    return f"Hola, {nombre}!"


# Código principal
nombre = input("¿Cuál es tu nombre? ")
print(formatear_saludo(nombre))

En nuestro código, la función formatear_saludo() se define antes de ser invocada en el código principal.

Una lógica principal, muchas funciones definidas por el usuario

Siguiendo el ejemplo anterior, si tuviéramos más funciones definidas por el usuario, también deberíamos colocarlas al principio del programa. Y esto nos causaría algunos problemas de organización en nuestro código, ya que tendríamos que definir todas las funciones al principio del archivo, antes de poder usarlas, relegando el código principal a la parte inferior del archivo.

Hacer esto puede ser un problema si tenemos un archivo muy grande con muchas funciones definidas por el usuario. O incluso si tenemos que estar constantemente definiendo funciones antes de poder usarlas, la lógica de nuestro algoritmo podría verse afectada seriamente.

Nuestro código, ¿con la lógica al revés?

Al estar colocando las definiciones de las funciones de usuario antes que el código principal que las llama para su ejecución, entramos en la sensación de que escribimos la lógica de nuestro código al revés, de abajo hacia arriba, cuando en líneas generales querremos escribir el cuerpo principal del código en la parte superior de nuestro archivo y desarrollar la lógica de nuestro algoritmo desde arriba hacia abajo.

La función principal del programa: main()

Entonces, ¿cómo podemos hacer para que el cuerpo principal del programa se encuentre ubicado arriba de todo en el archivo y que las funciones definidas por el usuario estén abajo, a continuación de este?

Para resolver este contratiempo de manera simple y estandarizada, podemos definir una función principal en nuestro programa, llamada main(), donde escribiremos la lógica principal de nuestro algoritmo que controlará el flujo de ejecución del programa. Este nombre, aunque no es obligatorio, está definido en la "convención de datos"1 de Python, le indica a quien lee el programa que esta es la parte principal y nosotros vamos a adoptarlo de ahora en adelante.

A continuación de la función main() podemos definir todas las funciones de usuario que necesitemos, en cualquier parte del archivo donde consideremos conveniente, para que la función main() se encargue de llamarlas en el orden lógico correcto.

De esta manera, el flujo de ejecución del programa será más fácil de seguir y de entender.

Ejemplo de definición de la función principal en Python

En Python, esta función principal también se define utilizando la función def y será llamada al final del programa, luego de su definición y del resto de las definiciones de las funciones de usuario. Entonces, nuestro programa se vería de la siguiente manera:

Python
# Definición de la función principal del programa
def main():
    nombre = input("¿Cuál es tu nombre? ")
    print(formatear_saludo(nombre))

# Definiciones de funciones de usuario
def formatear_saludo(nombre="Mundo"):
    return f"Hola, {nombre}!"

# Llamada a la función principal
main()

En este código, la función main() se define al principio del programa y se invoca al final del mismo. De esta manera, el flujo de ejecución del programa se inicia en la función main(), que a su vez invoca a la función formatear_saludo() para formatear el saludo con el nombre ingresado por el usuario.

Si analizamos la estructura de nuestro código, lo primero que definimos es la función principal main() que controla el flujo de ejecución del programa. A continuación, definimos una función de usuario llamada formatear_saludo() que se encarga de formatear el saludo con el nombre ingresado por el usuario. Finalmente, llamamos a la función main() para iniciar la ejecución del programa.

Es importante recalcar que la definición de la función main() no implica su ejecución inmediata ni garantiza su ejecución. La función main() se ejecutará solo si es invocada explícitamente en el código, como en el caso de la llamada main() al final del programa.

Ahora si, con nuestra función principal main() definida, podemos escribir el cuerpo principal de nuestro programa en la parte superior del archivo, y las funciones definidas por el usuario en la parte inferior, lo que facilita la lectura y comprensión del código. Y al final del archivo, llamamos a la función main() para iniciar la ejecución del programa, resolviendo el problema de que Python no sabe lo que está pasando cuando se llama a una función antes de que esta sea definida.

Referencias:


  1. La convención de datos en Python se refiere a un conjunto de normas y prácticas recomendadas para escribir código de manera clara, consistente y legible. Estas convenciones ayudan a los desarrolladores a entender y mantener el código más fácilmente.
    Puedes consultarlas la guía de estilo de Python en PEP 8 - Style Guide for Python Code