Пишем функции на Rust

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы узнаем, как писать функции на Rust. Функции объявляются с использованием ключевого слова fn, а их аргументы аннотируются типом. Возвращаемый тип, если он есть, указывается после стрелки ->. Последнее выражение в функции служит значением возврата, но можно использовать оператор return, чтобы вернуть значение раньше. В практическом занятии приводится пример переписания программы FizzBuzz с использованием функций, демонстрирующий использование функций, возвращающих логические значения, функций, возвращающих тип () и функций без указанного возвращаемого типа.

Примечание: Если практическое занятие не задает имя файла, вы можете использовать любое имя, которое хотите. Например, вы можете использовать main.rs, скомпилировать и запустить его с помощью rustc main.rs &&./main.

Функции

Функции объявляются с использованием ключевого слова fn. Их аргументы аннотируются типом, точно так же, как и переменные, и, если функция возвращает значение, возвращаемый тип должен быть указан после стрелки ->.

Последнее выражение в функции будет использоваться в качестве значения возврата. Альтернативно, оператор return можно использовать, чтобы вернуть значение раньше изнутри функции, даже изнутри циклов или if-условий.

Перепишем FizzBuzz с использованием функций!

// В отличие от C/C++, не существует ограничений на порядок определения функций
fn main() {
    // Мы можем использовать эту функцию здесь и определить ее позже
    fizzbuzz_to(100);
}

// Функция, возвращающая логическое значение
fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
    // Граничный случай, ранний возврат
    if rhs == 0 {
        return false;
    }

    // Это выражение, ключевое слово `return` здесь не обязательно
    lhs % rhs == 0
}

// Функции, которые "не" возвращают значение, на самом деле возвращают тип `()`
fn fizzbuzz(n: u32) -> () {
    if is_divisible_by(n, 15) {
        println!("fizzbuzz");
    } else if is_divisible_by(n, 3) {
        println!("fizz");
    } else if is_divisible_by(n, 5) {
        println!("buzz");
    } else {
        println!("{}", n);
    }
}

// Когда функция возвращает `()`, возвращаемый тип можно опустить из
// сигнатуры
fn fizzbuzz_to(n: u32) {
    for n in 1..=n {
        fizzbuzz(n);
    }
}

Резюме

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