Цели
Узнайте разницу между операторами и выражениями в Rust.
Фон
Недавно я изучаю Rust и читаю документацию по Rust. Я нашел эту страницу о высказываниях и выражениях. Я думаю, что было бы неплохо написать об этом в блоге.
Заявления против. Выражения
Суммируя
- Операторы – это инструкции, которые выполняют какое-то действие и не возвращают значение.
- Выражения возвращают результирующее значение.
В ржавчине
Давайте посмотрим на функцию в Rust
Тело функции состоит из серии операторов, которые могут заканчиваться выражением.
В приведенном выше примере let x: i32 = 69;
заканчивается точкой с запятой, поэтому это оператор. Он присваивает значение 69
переменной x
.
Определения функций
Определения функций также являются операторами; весь приведенный выше пример сам по себе является утверждением.
Операторы не возвращают значения. Следовательно, вы не можете присвоить оператор let другой переменной. Например, следующий код не будет компилироваться:
Однако на другом языке, например Python, вы можете это сделать. Присваивание возвращает значение присвоения. Вы можете написать x = y = 69
, чтобы x и y имели значение 69.
Как насчет выражений?
Выражения не включают завершающие точки с запятой. Если вы добавите точку с запятой в конец выражения, вы превратите его в оператор, и тогда оно не будет возвращать значение. В следующем примере j + 1
— это выражение, поэтому оно возвращает значение и присваивает его i
.
Функция с возвращаемым значением
Вы можете вернуться из функции раньше, используя ключевое слово return
и указав значение, но большинство функций возвращают последнее выражение неявно. В данном случае x + 1
— это выражение, которое мы хотим вернуть.
Если мы поставим точку с запятой в конце строки, содержащей x + 1
, это превратит ее из выражения в оператор. Этот код не скомпилируется:
Вместо этого вы получите сообщение об ошибке несоответствующий тип, подобное этому:
implicitly returns `()` as its body has no tail or `return` expression
В этом блоге мы не будем рассказывать о типе юнита ()
. Если вам интересно, вы можете прочитать документацию Rust об этом здесь.
Заключение
Подводя итог, можно сказать, что не операторы, а выражения возвращают значения. Если вы добавите точку с запятой в конце выражения, вы превратите его в оператор, который затем не будет возвращать значение. Помните об этом при написании кода на Rust. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять комментарии ниже. Спасибо за чтение!