Мы исследуем переменные, изменчивость и типы данных.

Эта статья является частью серии, начинающейся с Изучение Rust путем сравнения с TypeScript: Часть 1.

Код для этой статьи доступен для загрузки; Rust скачать и TypeScript скачать.

Приложение 11/5/19: добавлен раздел Control Flow с отдельным R ust download и TypeScript скачать.

Переменные и изменчивость

Давайте пройдемся по примерам в разделе Rust Book Переменные и изменчивость и сравним их с TypeScript.

В Rust переменная, установленная с помощью let, как показано, является неизменной.

В TypeScript эквивалентом является переменная, установленная с помощью const.

примечание: и в Rust, и в TypeScript типы переменных выводятся с правой стороны; таким образом, явная типизация не требуется.

В Rust переменная, установленная с помощью let mut, как показано, является изменяемой.

В TypeScript эквивалентом является переменная, установленная с помощью let.

В Rust переменная, установленная с помощью let и let mut, может быть установлена ​​во время выполнения:

То же самое для TypeScript для переменных, установленных с помощью как const, так и let:

Rust имеет другой неизменяемый тип переменной; const. Однако, в отличие от let, const не может быть установлен во время выполнения (устанавливается только во время компиляции). Имена переменных const в верхнем регистре используются по соглашению.

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

Rust позволяет переопределить или затенять переменную типа let:

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

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

Типы данных

Теперь пройдемся по примерам в разделе Rust Book Типы данных; начиная со скалярных типов Rust.

Давайте рассмотрим эквиваленты (называемые примитивами) в TypeScript:

Одно большое отличие состоит в том, что в JavaScript (и, следовательно, TypeScript) все числа представляют собой 64-битные числа с плавающей запятой, тогда как в Rust есть несколько целочисленные и плавающие типы.

Другое отличие состоит в том, что JavaScript (и, следовательно, TypeScript) имеет примитивный тип string, который может содержать произвольное количество символов; не просто один персонаж.

Rust имеет два составных типа; кортеж и массив. Кортеж - это упорядоченный список фиксированной длины различных типов. Массив, представляющий собой упорядоченный список фиксированной длины одного типа.

В TypeScript кортеж по сути такой же, как в Rust. Однако массив имеет произвольную длину, например, мы можем добавить значение.

Боковая панель в объект или ссылку

До сих пор Rust и TypeScript были относительно похожи; однако в составных типах таится большая разница. Разница в том, как каждый из них хранит составные типы в переменных.

В Rust значением переменной составного типа является сам объект.

Наблюдения:

  • Мы должны использовать let mut для tup2, чтобы позже изменить значение
  • Назначение tup2 на tup3 (копирование их значения) создает полностью новый кортеж
  • В результате изменение tup2 не имеет отношения к tup3
  • Некоторая логика применима к массивам

С другой стороны, в TypeScript значение составного типа является ссылкой на объект.

примечание: в TypeScript примитивные типы (логическое, число, строка) работают как Rust со значением переменной, являющимся самим объектом.

Наблюдения:

  • Мы можем использовать const для tup2, потому что мы изменяем объект, а не ссылку
  • Назначение tup2 для tup3 (копирование их значения) копирует ссылку на тот же объект кортежа
  • В результате изменение tup2 действительно изменяет общий объект кортежа, на который ссылаются как tup2, так и tup3
  • Та же логика применяется к массивам

Я уже вижу, что мне нужно немного привыкнуть к этому, поскольку у меня в голове врезался шаблон TypeScript.

Приложение 11/8/19. Написав еще пару статей, я пришел к выводу (думаю, это тоже было похоронено в книге Rust), что составные типы Кортеж и массив, вероятно, будут использоваться только как константы, например, дни недели, и поэтому разница между Rust и TypeScript не имеет значения. В частности, мы, скорее всего, будем использовать тип Rust Vec как эквивалент массивов TypeScript.

Поток управления

Основные концепции потока управления в Rust и TypeScript практически идентичны; подтвердив это, пройдя через примеры в разделе Rust Book Control Flow.

То же, что реализовано в TypeScript:

Наблюдения:

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

Дальнейшие действия

Мы углубимся в сложности владения в следующей статье: Изучение Rust путем сравнения с TypeScript: Часть 3.