La documentación es una parte esencial del desarrollo de software, ya que facilita la comprensión y el uso del código tanto para los desarrolladores actuales como para los futuros. En Rust, la documentación se integra directamente en el código fuente, lo que permite mantener la documentación y el código sincronizados. En este tema, aprenderemos cómo documentar el código en Rust utilizando comentarios de documentación y herramientas como rustdoc.

  1. Comentarios de Documentación

Rust utiliza comentarios especiales para generar documentación. Estos comentarios se escriben con tres barras (///) y se colocan justo antes de la declaración del elemento que se está documentando (funciones, structs, módulos, etc.).

Ejemplo Básico

/// Esta función suma dos números y devuelve el resultado.
///
/// # Ejemplos
///
/// ```
/// let resultado = sumar(2, 3);
/// assert_eq!(resultado, 5);
/// ```
fn sumar(a: i32, b: i32) -> i32 {
    a + b
}

Explicación

  • /// indica que el comentario es parte de la documentación.
  • La descripción de la función se coloca inmediatamente después de las barras.
  • La sección # Ejemplos proporciona ejemplos de uso de la función, que se pueden ejecutar como pruebas.

  1. Secciones de Documentación

Rust permite varias secciones en los comentarios de documentación para estructurar la información de manera clara y útil.

Secciones Comunes

  • Descripción: Una breve descripción de lo que hace el elemento.
  • Parámetros: Descripción de los parámetros de la función.
  • Retorno: Descripción del valor de retorno.
  • Ejemplos: Ejemplos de uso del elemento.
  • Panics: Situaciones en las que la función puede causar un pánico.
  • Errors: Errores que pueden ser devueltos por la función.

Ejemplo Completo

/// Calcula el factorial de un número no negativo.
///
/// # Parámetros
///
/// - `n`: Un número entero no negativo.
///
/// # Retorno
///
/// El factorial de `n`.
///
/// # Panics
///
/// La función hará pánico si `n` es negativo.
///
/// # Ejemplos
///
/// ```
/// let resultado = factorial(5);
/// assert_eq!(resultado, 120);
/// ```
fn factorial(n: i32) -> i32 {
    if n < 0 {
        panic!("El número no puede ser negativo");
    }
    (1..=n).product()
}

  1. Generación de Documentación con rustdoc

Rust incluye una herramienta llamada rustdoc que genera documentación HTML a partir de los comentarios de documentación en el código fuente.

Generar Documentación

Para generar la documentación, ejecuta el siguiente comando en la terminal:

cargo doc

Este comando generará la documentación en formato HTML y la almacenará en el directorio target/doc.

Ver la Documentación

Para ver la documentación generada, abre el archivo index.html en el navegador:

open target/doc/index.html

  1. Documentación de Módulos

Además de documentar funciones y structs, también es importante documentar módulos. Los comentarios de documentación para módulos se colocan al principio del archivo del módulo o dentro de un bloque //!.

Ejemplo de Documentación de Módulo

//! Este módulo proporciona funciones matemáticas básicas.
//!
//! # Ejemplos
//!
//! ```
//! let suma = math::sumar(2, 3);
//! assert_eq!(suma, 5);
//! ```

pub mod math {
    /// Suma dos números.
    pub fn sumar(a: i32, b: i32) -> i32 {
        a + b
    }
}

  1. Ejercicio Práctico

Ejercicio

Documenta la siguiente función utilizando los conceptos aprendidos:

fn dividir(a: f64, b: f64) -> Result<f64, String> {
    if b == 0.0 {
        Err(String::from("No se puede dividir por cero"))
    } else {
        Ok(a / b)
    }
}

Solución

/// Divide dos números y devuelve el resultado.
///
/// # Parámetros
///
/// - `a`: El numerador.
/// - `b`: El denominador.
///
/// # Retorno
///
/// Un `Result` que contiene el resultado de la división si `b` no es cero, o un mensaje de error si `b` es cero.
///
/// # Ejemplos
///
/// ```
/// let resultado = dividir(10.0, 2.0).unwrap();
/// assert_eq!(resultado, 5.0);
///
/// let error = dividir(10.0, 0.0).unwrap_err();
/// assert_eq!(error, "No se puede dividir por cero");
/// ```
fn dividir(a: f64, b: f64) -> Result<f64, String> {
    if b == 0.0 {
        Err(String::from("No se puede dividir por cero"))
    } else {
        Ok(a / b)
    }
}

Conclusión

La documentación es una herramienta poderosa en Rust que ayuda a mantener el código comprensible y utilizable. Utilizando comentarios de documentación y rustdoc, puedes crear documentación clara y útil directamente desde tu código fuente. Asegúrate de documentar todas las funciones, structs y módulos para que otros desarrolladores (y tú mismo en el futuro) puedan entender y utilizar tu código de manera efectiva.

© Copyright 2024. Todos los derechos reservados