English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Переменные, базовые типы, функции, комментарии и управление потоком, это几乎 те же программные концепции, которые имеют каждый язык программирования.
Эти базовые концепции будут существовать в каждом Rust-программе, и раннее изучение их поможет вам最快 освоить Rust.
Прежде всего, нужно отметить, что Rust является сильнотипным языком, но обладает способностью автоматически определять тип переменных. Это может привести к混淆 с языками с слабыми типами.
Чтобы объявить переменную, нужно использовать ключевое слово let. Например:
let a = 123;
Разработчики, которые изучали только JavaScript, очень чувствительны к этой фразе, а разработчики, которые изучали только C, не понимают её.
После этой объявления переменной следующие три строки кода запрещены:
a = "abc"; a = 4.56; a = 456;
Ошибка в первом ряду заключается в том, что после объявления a как 123, a确定为 целое число, и к нему нельзя присвоить значение типа строки.
Ошибка во втором ряду заключается в том, что автоматическая конверсия точности данных теряется, Rust не позволяет автоматической конверсии данных с потерей точности.
Ошибка в третьем ряду заключается в том, что a не является изменяемой переменной.
Первые две ошибки легко понять, но что означает третья? Разве a не переменная?
Это связано с тем, что Rust был спроектирован для обеспечения безопасности высоконконкурентного выполнения: как можно меньше изменений значения переменных на уровне языка. Поэтому значение a не может изменяться. Но это не означает, что a не является "переменной" (в английском языке variable), официальная документация называет такие переменные "неизменяемыми переменными".
Если часть нашего кода работает на основе предположения, что значение никогда не изменится, а другая часть кода изменяет это значение, то первая часть кода может не работать так, как было задумано. Из-за этой причины ошибки трудно найти после их возникновения. Это и есть одна из причин, почему Rust был спроектирован с таким механизмом.
Конечно, чтобы сделать переменную "изменяемой" (mutable), нужно всего лишь использовать ключевое слово mut.
let mut a = 123; a = 456;
Этот программа правильна.
Если переменная не может изменяться, то это не constante? Почему её называют переменной?
Переменные и константы все же различаются. В Rust следующий код является legal:
let a = 123; let a = 456;
Но если a является константой, это будет неlegal:
const a: i32 = 123; let a = 456;
Значение переменной может быть "переопределено", но до этого оно не может быть изменено самостоятельно, что гарантирует, что после каждого "переопределения" компилятор может полностью анализировать логику программы. Хотя Rust имеет функцию автоматического определения типов, в некоторых случаях указание типа более удобно:
let a: u64 = 123;
Здесь переменная a объявлена как беззнаковый 64-битовый целочисленный тип. Если тип не указан, переменная a автоматически будет оценена как знаковый 32-битовый целочисленный тип, что может значительно повлиять на диапазон значений a.
Концепция дублирования отличается от "переопределения" (Override) или "перегрузки" (Overload) в других языках oriented object. Дублирование — это то, что мы называем "переопределением", и мы используем кавычки, чтобы заменить это понятие, не介绍ая его.
Дублирование — это механизм, который позволяет повторно использовать имена переменных:
fn main() { let x = 5; let x = x + 1; let x = x * 2; println!("Значение x: {}", x); }
Результат выполнения программы:
Значение x: 12
Дублирование и присвоение переменных с изменяемыми свойствами — это не одно и то же. Дублирование означает, что имя переменной может быть использовано для повторного представления другого объекта переменной, который может изменяться по типу, свойствам и значению. Но присвоение переменной может изменяться только значением.
let mut s = "123"; s = s.len();
Эта программа будет ошибаться: нельзя присвоить целочисленное значение строковому переменной.