Цели

Узнайте разницу между операторами и выражениями в 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. Если у вас есть какие-либо вопросы, не стесняйтесь оставлять комментарии ниже. Спасибо за чтение!

Ознакомьтесь со всеми сообщениями в моем блоге



Ресурсы