Это список тем, которые помогут вам быстро понять Rust, если вы разработчик JavaScript. Есть много учебников, которые начинаются с нуля. Но если вы уже знаете что-то еще, почему бы не сравнить их?

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

Отказ от ответственности!

Я очень далек от того, чтобы хорошо разбираться в Rust. Вот как я их интерпретирую и не более того. Документация по Rust обширна, поэтому, если вам нужны подробности, поищите их в Google. Книга также является хорошей отправной точкой для изучения ржавчины. Моя цель — перечислить важные вещи, чтобы вы (и я в будущем) могли пропустить общие концепции программирования и сосредоточиться на различиях, основанных на уже известных вам знаниях.

Типы

Rust — типизированный язык, поэтому он ближе к TypeScript. У вас будет гораздо лучший опыт, если вы уже знаете TS.

По большей части синтаксис похож ( имя_переменной: Тип) ура!

змея_кейс

Ага, не обойти.

Что это за символ?

1. Вопросительный знак (?)

Вы можете увидеть ? после вызова функции, например: my_function()?;.

Нет, это не необязательная цепочка. Это магия обработки ошибок для асинхронных функций. Подробнее об этом позже.

"Документация"

2. Восклицательный знак на функциях (!)

Пример: println!("{:?}", my_variable);

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

3. Символ &

Пример: &your_variable

Чтобы получить ссылку. Вы узнаете это, если использовали языки низкого уровня, такие как C. Подробнее позже.

Синтаксис

  1. Точка с запятой (;) в конце каждой строки обязательна.
  2. Исключение: точка с запятой (;) не является обязательной в последней строке функции. В данном случае это ярлык для возврата этой строки.
  3. Синтаксис функции немного отличается. Не ахти какое дело.
fn foo(num: i32) -> i32 {
  3 // See no.2
  // or
  // return 3;
}

Что это за ключевые слова?

структура

Это объект JSON. (Хорошо, может быть, сложнее, но см. документы для этого)

type Person = { 
  firstName: string;
  lastName: string;
};
struct Person { 
  first_name: String,
  last_name: String,
}

черта

Интерфейс

импл

Реализация признака. Итак, класс (?). Я не использовал его

перечисление

В некотором смысле очень похоже на перечисления Typescript. Но вы можете хранить в нем данные. Это довольно изящная и довольно важная концепция для понимания асинхронности.

Console.log

Не так просто, к сожалению. Больше похоже на printf с других языков.

println!("{:?}", my_variable);

Библиотека/зависимости

Используйте Cargo.toml вместо package.json. Вы захотите добавить их вручную (вместо использования команды типа yarn add)

"Документация"

Пример:

[dependencies] 
chrono = "0.4" 
egg-mode = "0.16.0"

Импорт

В Rust есть модули. Он сильно отличается от JS, но в основном:

Это что-то вроде пространств имен. Вот разбивка по импорту зависимости:

use rocket::serde::{json::Json, Deserialize, Serialize};

rocket - это имя пакета

:: - доступ к модулю

serde - имя модуля

{json::Json, Deserialize, Serialize} - вещи, которые нужно импортировать

Еще немного синтаксиса:

use chrono::prelude::*;

use rusqlite::Result;

Импорт из локальных файлов

Лучшее объяснение: https://doc.rust-lang.org/rust-by-example/mod/split.html

Используйте mod для пути/файла, который вы хотите импортировать, чтобы компилятор включил модуль.

Затем use, чтобы импортировать его. Примечание: mod также автоматически импортирует его. В этом случае вам понадобится префикс crate.

Пример:

use crate::your_file_or_module;

Примечание. mod.rs — это специальное имя файла, которое действует как index.js.

См. ссылку выше для примеров.

Const против пусть

В JavaScript чаще всего используется const, потому что он неизменяем.

В Rust лучше использовать let. Это неизменно по умолчанию. Если вы хотите, чтобы он был изменяемым, используйте ключевое слово mut. const зарезервированы для фактических констант (поэтому вы не можете вычислить значение из другой переменной)

let immutable_variable = ...; 
let mut mutable_variable = ...; 
const MY_CONSTANT = "CONSTANT";

Библиотечная документация

Если в репозитории Github нет ссылки на страницу документации, вы, вероятно, можете перейти к ней следующим образом:

Асинхронный

На сегодняшний день две самые запутанные темы — это будущее и собственность. Я бы порекомендовал прочитать более полную документацию для них. Сначала поговорим о фьючерсах.

Future похож на Promise. В отличие от JS, в Rust есть тип результата обещания/будущего, который называется Result. Он также принимает тип ошибки в дженериках (хотелось бы, чтобы JS имел это).

Исполнение (или «потребление») Future

Стандартная библиотека довольно скудная, поэтому вам нужно будет импортировать что-то еще (например, bluebird для JS). Вам нужен исполнитель для запуска future. Я рекомендую использовать https://github.com/tokio-rs/tokio и читать их документацию.

.await для ожидания функции

async_function().await; Интересный синтаксис, да? На самом деле довольно приятно, так как вам не нужно оборачивать его скобками, как в JS.

Результат обработки

Это еще один важный момент. Rust безопасен, поэтому вам нужно со всем справиться. Да, все случаи ошибок в отличие от JS!

В перечислении Result есть Ok и Err. Если будущее успешно, оно возвращает Ok, иначе Err.

Наиболее полный способ обработки обоих случаев:

let f = File::open("hello.txt");
let mut f = match f {
  Ok(file) => file,
  Err(e) => return Err(e),
};

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

Это довольно многословно, поэтому есть 2 распространенных способа сократить его:

  1. Использование .unwrap()

Пример: let my_value = async_function().await.unwrap();

Это получает значение успеха и паникует, если Err

Используйте это, когда вы уверены, что это не приведет к ошибке.

2. Использование синтаксиса ?

Это передает ошибку вверх. Таким образом, ваша функция также должна возвращать ошибку (либо Result, либо Option).

Посмотрите это, например, и его эквивалент

Право собственности и ссылки

Слышали о кредитной чекер? Здесь мне особо нечего сказать. Это самая сложная вещь в этом списке, поскольку она уникальна для ржавчины. И если вы никогда раньше не работали со ссылками, эта тема может быть немного сложной.

К счастью, книга о ржавчине снова спасает положение.

В основном: прочитать части 4.1, 4.2 и 4.3

Вот и все!

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

Видите ошибку или есть предложения? Дайте мне знать!

Первоначально опубликовано на https://michaelsalim.co.uk.