Вывод первый:

  • Rust — это язык, основанный на выражениях, который отличается от языка операторов.
  • «Ты бросишь мне персик, я подарю тебе белый нефрит за дружбу». (Древняя китайская пословица, объясняющая взаимность). В языке, основанном на выражениях, различные операторы всегда возвращают результаты выполнения.
  • Преимущество языка на основе выражений состоит в том, что его можно комбинировать и на нем легко писать сложную логику.

Что такое язык, основанный на выражениях?

Rust — это язык, основанный на выражениях. Как понять «на основе выражений»?

Подумайте о том, когда мы говорим с другими в нашей жизни. Всегда есть две ситуации.

Одна ситуация — отдать властный приказ, который невозможно опровергнуть: «Командир 2-го батальона! Где твой чертов итальянский пистолет? Потяни меня!»

В этом случае вы хотите выполнить команду не задумываясь, без обратной связи с другой стороной, а результат выполнения независимо оценивается и контролируется инициатором команды.

Воплощенный в компьютерном языке, это язык, основанный на операторах. Например, язык Go — это язык, основанный на операторах.

Ниже приведен фрагмент кода «если» на языке го. Очевидно, что когда выполняется команда «если», это безжалостное утверждение. После того, как оператор «if» будет выполнен, он завершится, и возвращаемого результата не будет.

var x int
if someCondition {
    x = 5
} else {
    x = 6
}

Другая сцена, соответствующая властному командованию, сентиментальна и протяжна. Например, вы спрашиваете возлюбленного своей мечты: «Что ты делаешь?» Что вы ожидаете? Нет ответа? ты, наверное, ворочаешься всю ночь.

Это причина для языков, основанных на выражениях. Почти все операторы будут иметь возвращаемые значения, включая операторы «если».

В следующем rust после выполнения блока кода if будет возвращено значение 5 или 6, которое можно присвоить переменной x.

let x = if some_condition {
    5
} else {
    6
};

Может ли оператор «if» также возвращать результат? Я думаю, что многие друзья, перешедшие с C, Golang, Java и других языков, не могут поверить своим глазам.

И это природа языков, основанных на выражениях. Не похоже ли это на упомянутую выше пословицу «Ты мне персик брось, я тебе за дружбу белый нефрит»? Пока вы вызываете оператор, будет возвращаемое значение.

В языке, основанном на выражениях, почти все языковые конструкции являются выражениями, включая операторы присваивания, условные операторы, операторы цикла и т. д., которые можно рассматривать как значение выражения. Выражение — это вычислительная единица, состоящая из операторов, операндов, вызовов функций и т. д., и эти выражения могут быть вложены и объединены для формирования более сложных выражений и, наконец, формирования логической структуры программы.

В отличие от языков, основанных на операторах, каждый оператор в языке, основанном на выражениях, имеет возвращаемое значение, которое может быть присвоено переменной или использовано при вычислении других выражений. Поскольку все операторы являются выражениями, этот язык обычно лаконичен, понятен, компонуем, эффективен и т. д., что упрощает понимание и сопровождение кода.

Такие языки программирования, как Rust, Kotlin, Scala и F#, являются языками на основе выражений, а такие языки программирования, как C, C++ и Java, — это языки на основе операторов.

Преимущество языков на основе выражений

Каковы преимущества языка, основанного на выражениях? Я думаю, что основное преимущество заключается в том, что несколько выражений могут быть объединены для реализации сложной логики, такой как следующий код:

let x = vec![1, 2, 3, 4, 5];
let y = x.iter()
         .filter(|&n| n % 2 == 0)
         .map(|n| n * n)
         .collect::<Vec<_>>();

Одна строка кода может легко объединить несколько выражений фильтрации, отображения и сбора. Выглядит просто и эффективно. казаться. . дружелюбнее к математикам?

Выражения в Rust

Хотя rust — это язык, основанный на выражениях, операторы также важны в грамматике. В конце концов, не все инструкции требуют возвращаемых значений, например операторы присваивания, которые являются чистыми операторами. Как отличить оператор от выражения в rust? Проще говоря, оператор заканчивается точкой с запятой, а выражение точкой с запятой не заканчивается. например:

let x = 3;//statement
3+4;//statement
3+4 //expression

Выражения часто используются в конце сегмента кода, то есть в конце фигурных скобок, чтобы указать возвращаемое значение сегмента кода, например следующий сегмент кода в фигурных скобках, который возвращает 44.

{
  println!("hello");
  println!("world");
  44    
};

На самом деле, в конце блока кода, заключенного в фигурные скобки, даже если вы не добавите выражение-выражение, rust автоматически вернет вам пустой кортеж: ()

Например,

fn main(){
  println!("hello world");
}

эквивалентно:

fn main(){
  println!("hello world");
  ()
}

«Я дарю тебе белый нефрит за дружбу», — это выражение в Rust.