English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Variable, tipos básicos, funciones, comentarios y flujo de control, estos son conceptos de programación que prácticamente todos los lenguajes de programación tienen.
Estos conceptos básicos existirán en cada programa de Rust, aprenderlos a tiempo lo ayudará a aprender el uso de Rust lo más rápido posible.
Primero debe entenderse que Rust es un lenguaje de tipo fuerte, pero tiene la capacidad de determinar automáticamente el tipo de variable. Esto es fácil de confundir con lenguajes de tipo débil.
Para declarar una variable, se necesita usar la palabra clave let. Por ejemplo:
let a = 123;
Los desarrolladores que solo han estudiado JavaScript son muy sensibles a esta frase, mientras que los desarrolladores que solo han estudiado el lenguaje C no la entienden.
Después de esta declaración de declaración, las siguientes tres líneas de código están prohibidas:
a = "abc"; a = 4.56; a = 456;
El error en la primera línea radica en que se declaró a como 123 A partir de ahora, a se determina como un número entero, no se puede asignar a él un valor de tipo cadena.
El error en la segunda línea radica en la pérdida de precisión en la conversión automática de números, Rust no permite la conversión automática de tipos de datos que pierden precisión.
El error en la tercera línea radica en que a no es una variable mutable.
Las dos primeras errores son fáciles de entender, pero ¿qué significa el tercero? ¿No es a una variable?
Esto involucra el diseño que Rust realiza para la seguridad de alta concurrencia: en la capa del lenguaje, permite que el valor de las variables cambie lo menos posible. Por lo tanto, el valor de a es inmutable. Sin embargo, esto no significa que a no sea una "variable" (en inglés, variable), la documentación oficial llama a este tipo de variable "variable inmutable".
Si una parte de nuestro programa se ejecuta bajo la hipótesis de que un valor nunca cambiará, mientras que otra parte del código cambia ese valor, la primera parte del código puede no funcionar según el diseño previsto. Debido a esta razón, los errores causados son difíciles de encontrar después del hecho. Esta es la razón por la que Rust diseño este mecanismo.
Claro, para hacer que una variable sea "mutable", solo se necesita una palabra clave mut.
let mut a = 123; a = 456;
Este programa es correcto.
Dado que las variables inmutables son inmutables, ¿no son constantes? ¿Por qué se llama variable?
Las variables y las constantes aún tienen diferencias. En Rust, el siguiente programa es válido:
let a = 123; let a = 456;
Pero si a es una constante, no es válido:
const a: i32 = 123; let a = 456;
El valor de la variable puede ser "rebindeado", pero no puede ser cambiado por su propia cuenta antes de "rebindear", lo que asegura que el compilador pueda razonar lógicamente plenamente en la región después de cada "bindeo". Aunque Rust tiene la función de juicio automático de tipo, en algunos casos, declarar el tipo es más conveniente:
let a: u64 = 123;
Aquí se declara a como unsigned 64 Variable de entero de bits, si no se declara el tipo, a se considerará automáticamente como signed 32 Variable de entero de bits, lo que tiene un gran impacto en el rango de valores de a.
El concepto de sombra es diferente de "sobreescritura" (Override) o "sobre carga" (Overload) en otros lenguajes orientados a objetos. La sombra es lo que se conoce como "rebindeo", se usa comillas para reemplazar este concepto sin haberlo introducido.
La sombra es el mecanismo por el cual el nombre de la variable puede ser reutilizado:
fn main() { let x = 5; let x = x + 1; let x = x * 2; println!("El valor de x es: {}", x); }
El resultado de ejecución de este programa es:
El valor de x es: 12
La sombra y la asignación de variables mutables no son conceptos iguales, la sombra es el uso de un nombre para representar otro ente de variable, su tipo, atributo mutable y valor pueden cambiar. Pero la asignación de variables mutables solo puede ocurrir cambios en el valor.
let mut s = "123"; s = s.len();
Este programa tendrá errores: No se puede asignar un valor entero a una variable de cadena.