Tipos básicos

Rust trae una amplia colección de tipos primitivos (Primitives), divididos en dos grandes grupos: tipos escalares y tipos compuestos.

(I) Tipos escalares (Scalar Types)

Representan un único valor independiente, existen 6 variedades:

  • Enteros con signo : i8, i16, i32, i64, i128, isize (tamaño adaptado al puntero del sistema)
  • Enteros sin signo : u8, u16, u32, u64, u128, usize (tamaño adaptado al puntero del sistema)
  • Punto flotante : f32, f64
  • Carácter char : almacena valores escalares Unicode (ej: 'a', 'α', '∞'), cada carácter ocupa 4 bytes
  • Booleano bool : solo dos valores posibles true, false
  • Tipo unidad () : su único valor es la tupla vacía (). Aunque tiene forma de tupla, solo guarda un valor único, por lo que no se considera tipo compuesto.

(II) Tipos compuestos (Compound Types) (se estudiarán al final)

Formados por la combinación de varios valores:

  1. Arreglo : ejemplo [1, 2, 3]
  2. Tupla : ejemplo (1, true)

1) Formas de anotar el tipo de variable

Todas las variables pueden recibir un tipo manualmente. Los tipos numéricos soportan además los sufijos de tipo; si no hay anotación se usa un tipo por defecto:

  • Entero por defecto: i32
  • Flotante por defecto: f64

Rust también puede deducir el tipo automáticamente según el contexto del código.

2) Tipos de variable

1. Anotación explícita de tipo

Especifica directamente el tipo después del nombre de variable con : tipo, válido para todas las variables.

fn main() {
    let isOpen: bool = true;
    let price: f64 = 1.0;
}Lenguaje del código: JavaScript (javascript)

En el ejemplo anterior, isOpen y price son variables; el fragmento : nombre_tipo después del nombre declara explícitamente el tipo de la variable.

2. Anotación por sufijo numérico

Añade un sufijo de tipo tras el valor numérico para definir su tipo, solo se usa con números.

fn main() {
    let an_integer = 5i32;
}Lenguaje del código: JavaScript (javascript)

Aquí no se indica el tipo con :, sino que se marca como entero de 32 bits con el sufijo i32 en el número asignado.

3. Reglas de tipo por defecto

Sin ninguna anotación ni sufijo, el compilador usa un tipo predeterminado:

  • Literal entero → por defecto i32
  • Literal flotante → por defecto f64
fn main() {
    let default_float = 3.0;  // automáticamente f64
    let default_integer = 7; // automáticamente i32
}Lenguaje del código: JavaScript (javascript)

4. Deducción contextual de tipos

El compilador puede inferir automáticamente el tipo real de la variable a partir del código posterior, sin anotación manual.

fn main() {
    let mut inferred_type = 12;
    inferred_type = 4294967296i64; // esta línea deduce que el tipo es i64
}Lenguaje del código: JavaScript (javascript)

Variables mutables & características de las variables

1 Variable mutable

Variable modificada con la palabra clave mut, su valor se puede cambiar.

fn main() {
    let mut mutable = 12;
    mutable = 21; // permitido, modificación del valor
}Lenguaje del código: JavaScript (javascript)

2 Tipo inmutable

Una vez definido el tipo de una variable, este no puede cambiar en toda la ejecución; asignar un valor de otro tipo causa error de compilación inmediato.

fn main() {
    let mut mutable = 12;
    mutable = 21; // permitido, modificación del valor
    mutable = true; // error: tipo original i32, no se puede asignar un bool
}Lenguaje del código: JavaScript (javascript)
C:\Users\Jack\Desktop\rustdemo>rustc hello.rs
error[E0308]: mismatched types
 --> hello.rs:5:12
  |
3 |     let mut mutable = 12;
  |                       -- expected due to this value
4 |     mutable = 21; // permitido, modificación del valor
5 |     mutable = true; // error: tipo original i32, no se puede asignar un bool
  |               ^^^^ expected integer, found `bool`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0308`.Lenguaje del código: JavaScript (javascript)

Nota

En Rust, el valor de las variables es inmutable por defecto. Si quieres modificarlo, debes agregar la palabra clave mut; esto es distinto de otros lenguajes.

Por ejemplo, el siguiente código es común en otros lenguajes pero genera error en Rust

fn main() {
    let mutable:i32 = 12;
    mutable = 21; // permitido, modificación del valor
}Lenguaje del código: JavaScript (javascript)

Error de compilación

C:\Users\Jack\Desktop\rustdemo>rustc hello.rs
error[E0384]: cannot assign twice to immutable variable `mutable`
 --> hello.rs:4:2
  |
3 |     let mutable:i32 = 12;
  |         ------- first assignment to `mutable`
4 |     mutable = 21; // permitido, modificación del valor
  |     ^^^^^^^^^^^^ cannot assign twice to immutable variable
  |
help: consider making this binding mutable
  |
3 |     let mut mutable:i32 = 12;
  |         +++

warning: variable `mutable` is assigned to, but never used
 --> hello.rs:3:6
  |
3 |     let mutable:i32 = 12;
  |         ^^^^^^^
  |
  = note: consider using `_mutable` instead
  = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default

warning: value assigned to `mutable` is never read
 --> hello.rs:4:2
  |
4 |     mutable = 21; // permitido, modificación del valor
  |     ^^^^^^^^^^^^
  |
  = help: maybe it is overwritten before being read?
  = note: `#[warn(unused_assignments)]` (part of `#[warn(unused)]`) on by default

error: aborting due to 1 previous error; 2 warnings emitted

For more information about this error, try `rustc --explain E0384`.Lenguaje del código: JavaScript (javascript)

3 Sombreado de variables (Shadowing)

Volver a declarar una variable con el mismo nombre usando let sombra la variable antigua; son dos variables independientes que pueden tener tipos distintos.

fn main() {
    let mutable = 12;
    let mutable = true; // sombrea la variable i32 anterior, la nueva es de tipo bool
}Lenguaje del código: JavaScript (javascript)

Tipos compuestos: Arreglo & Tupla

1. Arreglo

  • Sintaxis: [tipo_elemento; longitud], tipo y longitud fijos, todos los elementos deben ser del mismo tipo.
let my_array: [i32; 5] = [1, 2, 3, 4, 5];Lenguaje del código: JavaScript (javascript)

2. Tupla

  • Delimitada con (), puede almacenar varios valores de tipos diferentes.
let my_tuple = (5u32, 1u8, true, -5.04f32);Lenguaje del código: JavaScript (javascript)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *