見出し画像

Rustで可変個引数を使う方法と注意点について

今回はRustで可変個引数を使う方法について紹介していきます。

Rustには他の多くの言語に見られる可変個引数のサポートが標準では含まれていません。

これはRustが安全性とパフォーマンスを非常に重視しているため、直接的な可変個引数の使用を避ける設計がされています。しかし、Rustでは可変個引数のような機能を他の方法で模倣することができます。


可変個引数を使う方法

可変個引数の機能を実現する一般的な方法は、スライスやベクターを引数として使うことです。

また、マクロを使用して可変個引数をエミュレートする方法もあります。

スライスを使用する方法

関数が任意の数の引数を受け取るようにするには、スライスを引数に使用します。

fn print_numbers(numbers: &[i32]) {
    for &number in numbers {
        println!("{}", number);
    }
}

fn main() {
    print_numbers(&[1, 2, 3, 4, 5]);
}

print_numbers関数は整数のスライスを引数として受け取り、そのすべての要素を出力します。


マクロを使用する方法

マクロmacro_rules!を用いて可変個引数をエミュレートすることもできます。マクロはコンパイル時に展開されるため、任意の数の引数を効果的に扱うことが可能です。

macro_rules! print_values {
    ( $( $x:expr ),* ) => {
        {
            $( println!("{}", $x); )*
        }
    };
}

fn main() {
    print_values!(1, 2, 3, 4, "hello", 3.14);
}

マクロprint_valuesは異なる型の任意の数の引数を受け取り、それぞれを出力します。


注意点

型安全性の欠如

Rustは型安全な言語ですが、マクロを使って可変個引数をエミュレートする場合、型安全性を保証するための追加のチェックが必要になることがあります。

パフォーマンスの問題

可変個引数のエミュレーションには通常、ベクターなどのコンテナを使うことが多く、これには追加のヒープ割り当てが伴うことがあります。これはパフォーマンスに影響を与える可能性があります。


Rustをもっと詳しくなりたい方に

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!

個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。
プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。
内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。
プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。

Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。


基礎から学ぶRustプログラミング入門

本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

#この経験に学べ

53,067件

この記事が気に入ったらサポートをしてみませんか?