7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

アトリビュート(Rustの基本構文-9-)

Last updated at Posted at 2019-12-12

#はじめに
Rustの基本的な文法についてまとめてみた。第9回。
今回のテーマは「アトリビュート」について.

###目的
Rustにおける基本的な構文の理解をする。

#Rustの基本構文シリーズ
第4回⇒Rustの基本構文(4)  URL: https://qiita.com/jin237/items/42249f984746711be0e2
第5回⇒Rustの基本構文(5)  URL:https://qiita.com/jin237/items/3fc3341effb3670e5865
第6回⇒Rustの基本構文(6)  URL:https://qiita.com/jin237/items/903e33226f93e7a4e5a0
第7回⇒Rustの基本構文(7)  URL:https://qiita.com/jin237/items/fcb5a05fb902dee1fc4d
第8回⇒Rustの基本構文(8)  URL:https://qiita.com/jin237/items/d544edcdfc7a08fa6998

#アトリビュート(attribute)
日本語にすると、「属性、特性」の意味を持つ。ただ、Rust上では、アイテム宣言にメタデータを付けるためのもの。
2つの書き方がある。
・対象となるものより先に書く
・対象の中に書く

この書き方によってそれぞれ形も変わってくる。

//対象となるものより先に書く
#[attribute]
//例(対象となるものより先に書く)
#[test]
fn test1(){
   本体
}

//対象の中に書く
#![attribute]
//例(対象の中に書く)
fn test2(){
   #![test]
   //本体
}

のようにして書く。__testアトリビュートは関数につけることのできるアトリビュートで、この関数はRustのコンパイラに--testというオプションを渡したときにだけ、コンパイルされる仕組み__になっている。

ここで様々アトリビュートに関することを説明していく。
##様々なアトリビュート
今回使用率の高いものを紹介していく。以下のもの。
・testアトリビュート(上記紹介より省略)
・cfgアトリビュート
・deriveアトリビュート
・allowアトリビュート
・denyアトリビュート

###cfgアトリビュート
条件によって、コンパイルするかどうかを決めることができる。

例を引用してくる。(from 実践Rust入門 言語仕様から開発手法まで P.245)

//ターゲットのOSがUnix系の場合にだけコンパイルする。
#[cfg(unix)]
fn something_for_unix(){
   //本体は省略
}

//ターゲットのOSがWindowsの場合にだけコンパイルする。
#[cfg(windows)]
fn something_for_windows(){
   //本体は省略
}

--testオプションのように、--cfgオプションでコンフィグレーションオプションをRustコンパイラに渡すこともできる。
###deriveアトリビュート
__deriveアトリビュートに対応したトレイトの実装を自動的に構造体や列挙型に実装__してもらえる。

//Point構造体にDebugトレイトが自動的に実装される
#[derive(Debug)]
struct Point{
    x: i32,
    y: i32,
    z: i32,
}

fn main(){
    let some_point = Point {x: 10, y: 20, z: 0};
    //Debugトレイトのfmt関数が自動的に実装されているので、:?フォーマット文字列をつかうことができる。
    println!("Debug: {:?}", some_point);
}

結果

[Running] cd "c:\Users\[username]\rust\project1\" && rustc derive_attribute.rs && "c:\Users\[username]\rust\project1\"derive_attribute
Debug: Point { x: 10, y: 20, z: 0 }

[Done] exited with code=0 in _.___ seconds

これより正常に動いた。詳細については別記事にて説明。

###allowアトリビュートとdenyアトリビュート
リントチェックを制御するためのアトリビュートである。
allowで指定されたリントチェックは無視されるようになる。
denyで指定されたリントチェックはエラーとして扱いを受ける。

#さいごに
アトリビュートについては、わからない人も多いと思うが、これから使っていける機会があれば積極的に使えるようにソースコードに混ぜるなどしていきたい。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?