マクロを使う上でのアドバイス
from 項目28:分別をもってマクロを使おう
「コードを 抽象化 できる唯一の方法である場合はマクロを使おう」
関数や ジェネリクス ではまとめられないような「ボイラーテンプレート にはマクロを使おう」
可読性 を損なわないために、通常のコードに近い見た目にするか、全く異なる見た目にしよう
具体的には、
「暗黙的に参照を挿入することは避けよう」
my_macro!(list) よりも my_macro!(&list) の方が Rust のコードスタイルに合っている
「マクロの中に閉じない制御フローをマクロで使うのは避けよう」
e.g. break や return
また、「構造体の各フィールドや enum のバリアントに対してコードを生成する場合、derive マクロ を使おう」
型全体を生成する 手続き的マクロ(マクロを使うべきケース#6790c23e75d04f000066972f)で書くよりも、コードが読みやすくなるため
ただし、derive マクロを追加する場合でも、「外部クレートが同じ機能のマクロを提供していないか探そう」
e.g. 整数値を C の enum のバリアントに変換するクレート
C の enum のバリアント
code:c
enum Color {
Red = 0,
Green = 1,
Blue = 2
};
code:rs
#repr(u8)
enum Color {
Red = 0,
Green = 1,
Blue = 2,
}
enumn::N
num_enum::TryFromPrimitive
num_derive::FromPrimitive
strum::FromRepr
#Rust #Effective_Rust_―_Rustコードを改善し、エコシステムを最大限に活用するための35項目