Rust y sus tipos de datos.
Como en todo lenguaje se tienen los tipos de datos básicos, “enteros, cadenas, carácter, arreglos, boleanos y decimales”, sin embargo rust muestra ciertas peculiaridades a la hora de tratar con los tipos de datos, se muestran a continuación:
Tipo de dato escalar
Un tipo escalar representa un valor único. Por ejemplo, 10,3.14, ‘c’. Se tiene cuatro tipos:
- Integer.
- Floating-point.
- Booleans.
- Characters.
Enteros
Un número entero es un número sin componente fraccionario. Es decir, el tipo de datos entero se utiliza para representar números enteros. Los enteros se pueden clasificar además como firmados y no firmados. Los enteros con signo pueden almacenar valores tanto negativos como positivos. Los enteros sin signo solo pueden almacenar valores positivos. A continuación, se ofrece una descripción detallada de los tipos de enteros:
Talla | Firmado | No firmado |
8 bits | i8 | u8 |
16 bits | i16 | u16 |
32 bits | i32 | u32 |
64 bits | i64 | u64 |
128 bits | i128 | u128 |
Arco | isize | usar |
El tamaño de un número entero puede ser arco . Esto significa que el tamaño del tipo de datos se derivará de la arquitectura de la máquina. Un número entero cuyo tamaño sea arch será de 32 bits en una máquina x86 y de 64 bits en una máquina x64. Un entero de arco se usa principalmente cuando se indexa algún tipo de colección.
Rango de enteros
Cada variante con signo puede almacenar números de – (2 ^ (n-1) a 2 ^ (n-1) -1 , donde n es el número de bits que usa la variante. Por ejemplo, i8 puede almacenar números de – (2 ^ 7) a 2 ^ 7 -1 – aquí reemplazamos n con 8. Cada variante sin firmar puede almacenar números del 0 al (2 ^ n) -1 . Por ejemplo, u8 puede almacenar números de 0 a 2 ^ 7 , que es igual a 0 a 255.
Desbordamiento de enteros
Un desbordamiento de enteros ocurre cuando el valor asignado a una variable de entero excede el rango definido por Rust para el tipo de datos. El rango válido de la variable u8 sin signo es de 0 a 255. Si a una variable se le asignan valores superiores a 255 (límite superior para una variable entera en Rust). Al ejecutar, el compilador devolverá una advertencia: warning − literal out of range for u8 para la variable que se le asigno y el tipo de dato u8 y fue excedido. Los valores de desbordamiento después de 255 comenzarán desde 0, 1, 2, etc.
Flotantes en rust
El tipo de datos flotantes en Rust se puede clasificar como f32 y f64. El tipo f32 es un flotador de precisión simple y el f64 tiene doble precisión. El tipo predeterminado es f64.
Casting automático.
Si se asigna un valor entero a una variable o constante de tipo flotante marcará un error de: mismatched types error. Esto es debido a que se ha inferido que la variable es de tipo flotante por lo que espera un dato de ese tipo y no un entero, es decir, que no es lo mismo asignar el valor 8.00 que asignar el valor 8 el primero se toma como decimal y el segundo como entero.
Separador de números
Para facilitar la lectura de números grandes, se puede hacer uso de un separador visual (_ )guión bajo para separar dígitos. Eso es 50,000 se puede escribir como 50_000.
Boleanos
Los tipos booleanos tienen dos valores posibles: verdadero o falso . Utilizar el bool palabra clave para declarar una variable booleana.
Caracter.
El tipo de datos caracter en Rust admite números, alfabetos, Unicode y caracteres especiales. Utiliza la palabra reservada char para declarar una variable de tipo de datos de caracteres. El tipo char de Rust representa un valor escalar Unicode, lo que significa que puede representar mucho más que solo ASCII. Los valores escalares Unicode van desdeU+0000 a U+D7FF y U+E000 a U+10FFFF inclusivo.
Cadena / string
El tipo de datos cadena en Rust se puede clasificar en lo siguiente:
- Cadena literal(&str).
- Objeto de cadena(String).
Cadena literal (&str)
Los literales de cadena (& str) se utilizan cuando se conoce el valor de una cadena en tiempo de compilación. Los literales de cadena son un conjunto de caracteres, que están codificados en una variable. Por ejemplo, cadena = “rust y sus tipos de datos” . Los literales de cadena se encuentran en el módulo std :: str. Los literales de cadena también se conocen como segmentos de cadena.
Los literales de cadena son estáticos de forma predeterminada. Esto significa que se garantiza que los literales de cadena sean válidos durante todo el programa. También se puede especificar explícitamente la variable como estática.
Objeto de cadena
El tipo de objeto String se proporciona en la biblioteca estándar. A diferencia del literal de cadena, el tipo de objeto de cadena no es parte del lenguaje principal. Se define como estructura pública en la cadena de estructura de publicación de biblioteca estándar . String es una colección que se puede cultivar. Es de tipo mutable y codificado en UTF-8. Los String se puede utilizar para representar valores de cadena que se proporcionan en tiempo de ejecución. El objeto de cadena se asigna en el montón.
Sintaxis
Para crear un objeto String, podemos usar cualquiera de la siguiente sintaxis:
String::new()
La sintaxis anterior crea una cadena vacía
String::from()
Esto crea una cadena con algún valor predeterminado pasado como parámetro al from() método.
Métodos comunes: objeto de cadena
Método | Firma | Descripción |
nuevo() | pub const fn new () → Cadena | Crea una nueva cadena vacía. |
Encadenar() | fn to_string (& self) → Cadena | Convierte el valor dado en una cadena. |
reemplazar() | pub fn reemplazar <‘a, P> (&’ a self, de: P, a: & str) → Cadena | Reemplaza todas las coincidencias de un patrón con otra cuerda. |
as_str () | pub fn as_str (& self) → & str | Extrae un segmento de cadena que contiene toda la cadena. |
empujar() | pub fn push (& mut self, ch: char) | Agrega el carácter dado al final de esta Cadena. |
push_str () | pub fn push_str (& mut self, string: & str) | Agrega un segmento de cadena determinado al final de esta cadena. |
len () | pub fn len (& self) → usar | Devuelve la longitud de esta cadena, en bytes. |
podar() | pub fn recortar (& self) → & str | Devuelve un segmento de cadena con los espacios en blanco iniciales y finales eliminados. |
split_whitespace () | pub fn split_whitespace (& self) → SplitWhitespace | Divide un segmento de cadena por espacios en blanco y devuelve un iterador. |
división() | pub fn split <‘a, P> (&’ a self, pat: P) → Split <‘a, P>, donde P es el patrón puede ser & str, char o un cierre que determina la división. | Devuelve un iterador sobre subcadenas de este segmento de cadena, separadas por caracteres que coinciden con un patrón. |
caracteres () | pub fn chars (& self) → Chars | Devuelve un iterador sobre los caracteres de un segmento de cadena. |
Hasta aquí los tipos de datos en rust. Como se puede observar hay un par de cositas nuevas que maneja este amado lenguaje de programación, en la próxima entrada se vera las variables y sus conceptos para así dar paso a la solución de algunos ejercicios básicos.