# Guia de estilo de programación

Como parte de la evaluación de las practicas, se valorará el seguimiento de buenas prácticas de programación en Python, para garantizar que sois **capaces de generar código limpio, claro y legible.** Esto es esencial, especialmente si trabajas en equipo.&#x20;

En concreto, nos basaremos en la [Python Enhancement Proposal (PEP) 8: "Style Guide for Python Code"](https://peps.python.org/pep-0008/), adoptada en 2001, que establece una **guía de estilo de código Python**, a fin de garantizar la legibilidad y la mantenibilidad del código Python creado por la comunidad.&#x20;

Como esta es una asignatura de primer curso, nos centraremos únicamente en los aspectos más básicos y sencillos de esta convención, y que detallamos a continuación.

## 1. Nombres (Naming Conventions)

La forma en que nombras tus variables y funciones es clave para que otros entiendan qué hace tu programa sin leer cada línea.

| **Elemento** | **Estilo**                                | **Ejemplo**                |
| ------------ | ----------------------------------------- | -------------------------- |
| Variables    | `snake_case` (minúsculas y guiones bajos) | `puntuacion_maxima = 100`  |
| Funciones    | `snake_case`                              | `def calcular_promedio():` |
| Constantes   | `UPPER_CASE` (todo mayúsculas)            | `PI = 3.14159`             |
| Clases       | `CamelCase` (primera letra mayúscula)     | `class UsuarioActivo:`     |

{% hint style="info" %}
**Regla de oro:** Usa nombres descriptivos. Evita variables como `a`, `b` o `x` a menos que sean para iteradores simples (como en un `for i in range`).
{% endhint %}

***

## 2. Sangría, longitud de línea y espaciado

Python usa la sangría para definir bloques de código. Si fallas aquí, el programa no funcionará.

* **Sangrado:**&#x20;
  * Usa siempre **4 espacios** por nivel de sangría.&#x20;
  * **No uses tabuladores (`Tab`)**, ya que pueden variar según el editor.
* **Longitud de línea:**&#x20;
  * Intenta que tus líneas no superen los 79 caracteres.&#x20;
  * Si una línea es muy larga, divídela.
  * Motivación: poder tener abiertos y visibles en pantalla varios ficheros de código fuente en paralelo con división vertical.
* **Líneas en blanco:**&#x20;
  * Rodear (separar) funciones y clases de nivel superior con 2 líneas en blanco.
  * Rodear (separar) métodos dentro de una clase con 1 línea en blanco.
  * Dentro de funciones, separar secciones lógicas con una línea en blanco (con moderación!).

***

## 3. Espacios en Blanco

El "aire" en el código ayuda a la lectura visual.

#### Alrededor de operadores

Usa un espacio antes y después de los operadores de asignación y comparación:

* Bien: `x = y + 5`
* Mal: `x=y+5`

#### En listas y funciones

No pongas espacios inmediatamente dentro de paréntesis, corchetes o llaves. Debes ponerlos únicamente después de las comas.&#x20;

* Bien: `lista = [1, 2, 3]`
* Mal: `lista = [ 1, 2, 3 ]`

***

## 4. Comentarios

Escribe **comentarios que expliquen el porqué, no el qué.**

* **Comentarios de bloque:** Se usan para explicar secciones de código y van a la misma sangría que el código.
* **Comentarios en línea:** Úsalos con moderación al final de una sentencia.

```python
resultado = precio * 1.21  # Aplicamos el IVA del 21%
```

***

## 5. Otros aspectos

* Usar siempre el nombre `self` para el primer argumento en los métodos de instancia.
* Usar siempre el nombre `cls` para el primer argumento en los métodos de clase (`@classmethods`).
* Usar codificación UTF-8 o ASCII para los ficheros de código fuente.
