Простейшая программа выглядит следующим образом:
fn main() {
}
Эта программа не делает ничего - просто работает. Обратите внимание, что мы написали. Это функция с именем 'main". Под функцией понимается набор инструкций, которые что-либо делают и этот набор имеет имя.
Разберём синтаксис. "fn" - это сокращение от английского слова "function" - функция. Далее пишем имя "main". Круглые скобки обозначают блок, который может содержать входные параметры функции. Далее следует блок фигурных скобок, в котором могут находиться операторы и выражения.
Функция "main" является главной функцией. Именно её содержимое выполняется при запуске программы.
Для проверки работы программы вам не понадобиться ничего устанавливать на компьютер.
Достаточно перейти на страничку play.rust-lang.org,
втавить в поле ввода код программы и нажать кнопку "Run". Результат работы программы
будет отображён в нижней части экрана.
Итак, напишем программу, которая печатает в терминальную строку текст.
fn main() {
println!("Привет, Rust!");
}
Перейдя по ссылке, вы перейдёте в среду разработки Rust Playground и, нажав кнопку "Run", сможете посмотреть, на результат работы программы.
А теперь разберём синкаксис этот программы шаг за шагом, символ за символом:
println
- это имя макроса стандартной библиотеки Rust. Есть такжеprint
и другие. Каждый служит определённым целям.!
- это символ-индикатор, сообщающий о том, что предшествующее имя является макросом. Без этого символа словоprint
будет обозначать имя функции. Такой функции нет в стандартной библиотеки и чтобы в этом убедиться достаточно удалить этот символ и снова выполнить программу. Будет ошибка, описание которой сообщит, что такой функции нет. Кроме того из описания вы можете узнать, как эту ошибку исправить.(
- это символ-индикатор начала списка аргументов макроса."
- это символ-индикатор начала текстовых данных.Привет, Rust!
- это содержание текстовых данных."
- это символ-индикатор конца текстовых данных.)
- это символ-индикатор конца списка аргументов макроса.;
- это символ-индикатор конца оператора.
Язык Rust различает символы верхнего и нижниго регистра и, поэтому, например, имена функций: println, printlN, printLn, prinTln, priNtln, prIntln, pRintln, Println будут именами различных функций. Запустите эту программу в среде разработки и, следуя указаниям текстовых сообщений компилятора, вы ещё многое узнаете о хорошем стиле Rust-программирования
fn println() {
println!("println");
}
fn PrintlN() {
println!("PrintlN");
}
fn pRintLn() {
println!("pRintLn");
}
fn prInTln() {
println!("prInTln");
}
fn priNtln() {
println!("priNtln");
}
fn main() {
println();
PrintlN();
pRintLn();
prInTln();
priNtln();
prInTln();
pRintLn();
PrintlN();
}
Рассмотренный нами ранее макрос println!
можно усложнить, использовав возможность
ввода входных данных. Текстовые данные могут содержать специальные конструкции,
благодаря которым текст на консоли будет заполнен данными:
fn main() {
println!("Привет, Rust!");
println!("{}{}{}{}{}", "Привет", ",", " ", "Rust", "!");
}
На консоли будет напечатано две одинаковых строчки - одна под другой. В данном примере макросу будет передано несколько входных данных. Первое значение - это шаблон, в котором парные фигурные скобки обозначают позиции, на которые будут помещены значения следующих параметров. Каждый последущий параметр будет помещён в поле шаблона один за другим.
Очень важной особенностью Rust является проверка необходимого количества входных данных для текстового шаблона. Если, например, мест для всех данных не будет хватать или входных данных будет мало или, наоборот, много - компилятор вам об этом сообщит, а программа работать не будет.
Пожалуйста, самостоятельно попробуйте сделать как можно больше ошибок в коде ранее написанной программы. Run in Rust Playground
С помощью уже полученных знаний напечатаем таблицу умножения.
2 3 4 5 6 7 8 9
------------------------------------------------------------------
2 |4 6 8 10 12 14 16 18
3 |6 9 12 15 18 21 24 27
4 |8 12 16 20 24 28 32 36
5 |10 15 20 25 30 35 40 45
6 |12 18 24 30 36 42 48 54
7 |14 21 28 35 42 49 56 63
8 |16 24 32 40 48 56 64 72
9 |18 27 36 45 54 63 72 81
fn main() {
println!("
{} {} {} {} {} {} {} {}
---------------------------------------------------------------{}
2| 4\t6 8 10 12 14 16 18
3| 6\t9 12 15 18 21 24 27
4| 8\t12 16 20 24 28 32 36
5| 10\t15 20 25 30 35 40 45
6| 12\t18 24 30 36 42 48 54
7| 14\t21 28 35 42 49 56 63
8| 16\t24 32 40 48 56 64 72
9{} 18{}27 36 45 54 63 72 81
",2,3,4,5,6,7,8,9,'-','|','\t');
}
Обратите внимание, что в данном примере в качестве входных параметров макроса
мы используем числа и символы. Всё это так называемые примитивные - т.е. самые простые
типы данных. Обратите внимание, что символами могут быть различные символы. Символ
табуляции - \t
- пример специального символа. Также в шаблонах макроса можно использовать
и другие специальные символы - например, \n
(перевод строки), \r
(возврат каретки).
Также с их помощью можно рисовать в консоли:
С помощью макроса println
можно рисовать. Например, нарисуем котика Барсика.
fn main() {
println!("
/> フ
| + +|
/`ミ _x 彡
/ |
/ ヽ ノ
/ ̄| | | |
| ( ̄ヽ__ヽ_)_)
\二つ
");
}
Кроме строк, символов и чисел есть ещё логические типы данных. Их также можно выводить на печать консоли. Также можно производить математические вычисления.
fn main() {
println!("{} + {} = {} - {}", 2, 2, 2 + 2, 2 + 2 == 4);
println!("{} + {} = {} - {}", 2, 2, 5, 2 + 2 == 5);
}
Кроме всего прочего при работе с текстовыми строками можно объединять строки в одну. Например, на консоль можно вывести длинную строку, при этом в коде программы строка будет удобной для чтения:
fn main() {
println!(
"++++++++++++++++++++++++++++++\
++++++++++++++++++++++++++++++\
++++++++++++++++++++++++++++++\
++++++++++++++++++++++++++++++\
"
);
}
Run in Rust Playground. Пожалуйста, самостоятельно придумайте пример, в котором пригодится данная опция.
Комментарии служат для внесения ясности, документации а также других задач.
В Rust комментарии могут быть однострочные и многострочные. Однострочные обозначаются
//
, многострочные обрамляются символами /*
в начале и */
в конце. Комментрации
могут быть вложенными, но для удобства не рекомендуется этого делать.
/* Это /* синтаксически верные*/
комментарии, даже /* если /* они сами содержат
комментарии*/ внутри */себя. */
fn main() {
}
Пожалуйста, с помощью чисел, символов, текста, логических символов придумайте интересную задачу или историю. Например, такую:
fn main() {
print!("
/_/
(•-•)
/つ🌷 хочешь цветочек?
/__/
(•-•)
/つ🍪 о, или печеньку?
/_/
(•-•)
/ >🐈 может кису?
/__/
(•-•)
/つ❤ хм, может... Моё сердечко?
(\\__(\\
('•֊ •')
O❤O да, думаю, то что надо.
");
}
Run in Rust Playground. Или такую:
_~^~^~_
\) / o o \ (/
'_ ¬ _'
\ '-----' /
+
+ +
+ +
+-----+
| .-. |
| | | |
+-+-+-+
/\_/\ -----
( ' ' ) / Hello \
( - ) < Junior |
| | | \ Coder!/
(__|__) -----
Или инфографику:
fn main() {
print!("
\t Мы изучали печать на консоль \n
------------------------
Числа\tСтроки\tСимволы
⚙\t⚙\t⚙\n
⚙\tRust типы данных\t⚙\n
⚙\t⚙\t⚙\n
\tБулевы
");
}