Rust - Básico - 02 - Tipos de datos

Tipos de datos

Comprensión

El número de bits de isize y usize depende de si el sistema usa una arquitectura de 32 o 64 bits. En modo debug, el desbordamiento de enteros provoca un panic; en modo release no.

  • wrapping_* envuelve el valor incluso en modo debug.
  • checked_* devuelve None cuando hay desbordamiento.
  • overflowing_* devuelve el valor y un booleano que indica si hubo desbordamiento.
  • saturating_* limita el valor al mínimo o al máximo.

Tuplas

let tup: (i32, f64, u8) = (500, 6.4, 1);
let tup = (500, 6.4, 1);
let (x, y, z) = tup;  // asignación por desestructuración
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;

Arrays

let a = [1, 2, 3, 4, 5];
let a: [i32; 5] = [1, 2, 3, 4, 5];
let a = [0; 5];  // inicialización rápida
let a = [[0, 5]; 20];  // array bidimensional

Fuente

https://doc.rust-lang.org/book/ch03-02-data-types.html

Tipos escalares

…

Tipos enteros

Los tipos isize y usize dependen del ordenador: tienen 64 bits en una arquitectura de 64 bits y 32 bits en una de 32 bits.

Desbordamiento de enteros

Si un u8, que admite valores de 0 a 255, recibe el valor 256, ocurre un desbordamiento. En debug Rust comprueba el desbordamiento y provoca un panic. En release, con --release, aplica aritmética de complemento a dos: 256 se convierte en 0, 257 en 1, etc. El programa no falla, pero el resultado puede no ser el esperado. Para tratarlo explícitamente, la biblioteca estándar ofrece los métodos wrapping_*, checked_*, overflowing_* y saturating_*.