Введение

И снова здравствуйте! В прошлый раз мы рассмотрели объявления переменных, начали работу с некоторыми структурами данных и рассмотрели основные типы данных. Сегодня мы продолжаем и завершаем наши две статьи о фундаментальных концепциях программирования.

Давайте начнем!

Функции

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

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

Каждая функция определяется с помощью ключевого слова fn, за которым следует имя функции и набор скобок. Фигурные скобки в Rust сообщают компилятору, где начинается и заканчивается тело функции.

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

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

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

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

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

Насколько это актуально для нас? Что ж, функции, которые мы рассматривали до сих пор, имели характер оператора, они не возвращали значения. Однако мы можем указать функции вернуть значение, используя силу выражения.

Если мы посмотрим выше, мы увидим, как вернуть значение из функции, выполняющей операцию над входом. Мы передаем значение 5 через нашу объявленную переменную x в нашу функцию. Обратите внимание, что в объявлении функции у нас есть две новые характеристики:

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

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

Поток управления — это просто возможность запускать некоторый код в зависимости от того, истинно условие или нет.

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

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

Ключевое слово break является важным инструментом для этой цели, и его использование в цикле сообщит программе о прекращении выполнения цикла. Двоюродным братом ключевого слова break является ключевое слово continue, которое, в отличие от первого, не полностью выходит из цикла, а запускает следующую итерацию кода цикла, пропуская любые невыполненный код в текущей итерации цикла.

Другой тип цикла — цикл while. Оператор, который продолжает повторять код до тех пор, пока не будет выполнено условие, что означает, что нам больше не требуется ключевое слово break, т. е. меньше синтаксиса, о котором нам нужно беспокоиться.

Наконец, мы подходим к циклу for , который отлично подходит для работы с предопределенными структурами данных, такими как массивы, или когда мы хотим сгенерировать собственные данные:

Заключение

Классная вещь! Теперь мы знаем достаточно основ, чтобы приступить к созданию некоторых базовых алгоритмов в следующем уроке. Надеюсь, вы с нетерпением ждете!

об авторе

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