¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Encontrar tu camino en un código ajeno

Después de esta lección: Puedo encontrar dónde vive una función en un código que no he escrito yo.

Lección de 45 minSin comandos

Tu primer encargo en el equipo

Empiezas en una tienda online de aceite de Jaén. El primer día, tu jefa te escribe: "Queremos el envío gratis desde 40 euros, no desde 50. ¿Lo cambias tú?"

El proyecto tiene 300 archivos. Ninguno lo escribiste tú. No hace falta leerlos todos. Hace falta saber dónde mirar.

Al final de esta lección

Nota

Puedo encontrar dónde vive una función en un código que no he escrito yo.

Palabras clave

PalabraQué significaEjemplo
Repositoriola carpeta con todo el código de un proyecto
Funciónun bloque de código con nombre que hace una tareashipping_cost
Llamadala línea que pone una función en marchashipping_cost(4300)
Punto de entradael lugar donde empieza a ejecutarse el programa
grepuna orden que busca un texto dentro de archivosgrep -rn "envio" .

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Las carpetas son el mapa

Antes de abrir ningún archivo, mira cómo están organizadas las carpetas. Casi siempre se agrupan por tema: pedidos, pagos, envíos, usuarios.

Busca también un archivo README. Suele explicar qué hace el proyecto y cómo se arranca.

Tu encargo habla de envíos. Así que empiezas por la carpeta que se llama así.

Ejemplo: el repositorio de la tienda

CarpetaQué hay dentro¿Mirar para el encargo?
pedidos/el carrito, el total y la compraSí, llama a los envíos
envios/lo que cuesta mandar un paqueteSí, primero aquí
pagos/tarjeta y BizumNo
usuarios/altas, contraseñas y direccionesNo
README.mdcómo arrancar el proyectoSí, cinco minutos

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Busca la palabra en todo el proyecto

Las carpetas te acercan. La búsqueda te lleva a la línea exacta.

La orden grep -rn "texto" carpeta mira dentro de todos los archivos. La r entra en las subcarpetas. La n muestra el número de línea.

Cada resultado dice el archivo, la línea y lo que pone. Ejecuta el bloque siguiente y lee los dos resultados.

Prueba: busca una función

Código: bash
# Creamos una copia pequeña del proyecto de la tienda.
mkdir -p tienda/pedidos tienda/envios
printf 'def checkout(cart):\n    return order_total(cart)\n' > tienda/pedidos/checkout.py
printf 'def order_total(cart):\n    return sum(cart) + shipping_cost(sum(cart))\n' > tienda/pedidos/total.py
printf 'FREE_FROM = 5000\ndef shipping_cost(total):\n    return 0 if total >= FREE_FROM else 495\n' > tienda/envios/coste.py

# Buscamos la palabra en todos los archivos, con el número de línea.
grep -rn "shipping_cost" tienda

Un error frecuente

Advertencia

Mucha gente cree que debe leer todo el código antes de tocar nada. En un proyecto real eso lleva semanas. Busca la palabra del encargo y lee solo lo que está cerca. Lo demás lo aprendes poco a poco, cuando lo necesites.

Sigue la llamada desde el principio

Ya sabes dónde está shipping_cost. Ahora falta saber quién la usa.

Empieza en el punto de entrada: aquí es checkout, lo que pasa al pulsar Comprar. Lee esa función hasta encontrar una llamada. Salta a la función llamada y repite.

Así ves el camino entero: checkout llama a order_total, y order_total llama a shipping_cost.

Practica: cambia el envío gratis

Código: python
# Archivo envios/coste.py
FREE_FROM = 5000  # céntimos: 50 euros

def shipping_cost(total):
    if total >= FREE_FROM:
        return 0
    return 495


# Archivo pedidos/total.py
def order_total(cart):
    goods = sum(cart)
    return goods + shipping_cost(goods)


# Archivo pedidos/checkout.py: aquí empieza todo
def checkout(cart):
    total = order_total(cart)
    print("Total a pagar:", total, "céntimos")


checkout([1800, 2500])  # 43 euros de aceite y miel

# Tu jefa quiere el envío gratis desde 40 euros.
# Cambia una sola línea y pulsa Ejecutar otra vez.

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.