Введение
Функция даёт имя определённой операции, чтобы программа могла выполнять её при необходимости. Функции могут получать входные данные через параметры и возвращать вычисленное значение.
В этой лабораторной работе подготовленный проект Cargo уже содержит три функции преобразования и все их вызовы. На каждом шаге вы замените одно выражение-заполнитель. Благодаря этому объём ввода остаётся небольшим, а вы увидите, как связаны определения функций, параметры, возвращаемые типы, выражения и вызовы.
Возврат значения из функции
На этом шаге вы завершите функцию, которая преобразует минуты в секунды, и свяжете её определение с вызовом.
Перейдите в подготовленный проект и откройте исходный файл:
cd /home/labex/project/conversion-tool
nano src/main.rs
В начале файла следующая строка начинает определение функции:
fn minutes_to_seconds(minutes: i32) -> i32 {
fnобозначает функцию.minutes_to_seconds— имя функции.minutes: i32— параметр: входное значение с именемminutesтипаi32.-> i32указывает, что функция возвращает значение типаi32.- Фигурные скобки содержат тело функции.
Rust проверяет каждый вызов в соответствии с этой сигнатурой. Вызывающая сторона должна передать ожидаемое количество аргументов в объявленном порядке, причём тип каждого аргумента должен быть совместим с соответствующим параметром.
Замените только 0 перед комментарием Step 1 на:
minutes * 60 // Step 1: replace this placeholder expression.
Обратите внимание: после minutes * 60 нет точки с запятой. Это последнее выражение в теле функции, поэтому его значение становится возвращаемым значением функции. Если добавить точку с запятой, выражение превратится в инструкцию, которая не возвращает это значение.
Сохраните файл с помощью Ctrl+O, нажмите Enter и выйдите с помощью Ctrl+X. Проверьте код:
cargo check
В main выражение minutes_to_seconds(5) является вызовом функции. Значение 5 — это аргумент, переданный параметру minutes. Запустите программу:
cargo run --quiet
Теперь её первая строка должна выглядеть так:
5 minutes = 300 seconds
Использование параметра и возвращаемого типа с десятичными значениями
На этом шаге вы завершите вторую функцию, которая принимает и возвращает значения с плавающей точкой.
Откройте исходный файл:
nano src/main.rs
Найдите celsius_to_fahrenheit. И параметр, и возвращаемый тип этой функции — f64, поэтому вычисление может сохранять дробный результат. Временное выражение celsius * 0.0 использует параметр, но намеренно возвращает ноль. Замените это выражение целиком на:
celsius * 9.0 / 5.0 + 32.0 // Step 2: replace this placeholder expression.
Это ещё один случай возврата значения через выражение: вычисленное значение находится последним элементом тела функции и не завершается точкой с запятой. Умножение и деление выполняются перед сложением в соответствии с обычным приоритетом арифметических операций. Скобки позволяют явно указать более сложный требуемый порядок вычислений. Вызывающей стороне не нужно знать формулу: она передаёт значение температуры в градусах Цельсия и получает возвращённое значение в градусах Фаренгейта.
Сохраните файл, выйдите из редактора и запустите программу:
cargo run --quiet
Вторая строка должна выглядеть так:
20.0 C = 68.0 F
Вызов celsius_to_fahrenheit(20.0) передаёт один аргумент. Возвращённое значение сохраняется в привязке fahrenheit, после чего форматируется для вывода.
Повторное использование функции с несколькими аргументами
На этом шаге вы завершите функцию с двумя параметрами и увидите, как два вызова используют её повторно.
Подготовленная функция scale_amount получает параметры amount и factor. Параметры разделяются запятыми, и у каждого параметра есть собственный тип. Вызов должен передавать аргументы в том же порядке.
Откройте файл и найдите заполнитель Step 3:
nano src/main.rs
Временное выражение amount * factor * 0.0 намеренно возвращает ноль. Замените это выражение целиком на:
amount * factor // Step 3: replace this placeholder expression.
Сохраните файл и выйдите из редактора, затем выполните итоговую проверку:
cargo check
Запустите завершённую программу:
cargo run --quiet
Одна и та же функция вызывается один раз для муки и один раз для воды. Последние две строки должны выглядеть так:
Scaled flour: 375.0 g
Scaled water: 270.0 ml
В этом и заключается главное преимущество функции: вычисление определяется один раз, получает понятное имя и повторно используется с разными аргументами.
Итоги
Вы завершили функции с целочисленными параметрами и параметрами с плавающей точкой, научились читать стрелку возвращаемого типа, возвращать значения с помощью последних выражений, передавать аргументы при вызове функций и повторно использовать одну функцию для нескольких вычислений.



