ブルーノのC#プログラミング & unity勉強日記

プログラミング素人、ブルーノの自主勉強ノートです。他のプログラミングを勉強したい方の助けになれば幸いです。その他趣味の雑記もしていきたいです

プリプロセッサとConditional属性について

f:id:covory10101101276:20180205212547j:plain

キャピラノ吊り橋

 

みなさんこんにちは🌚

ついに今日最後のテストを終えましたがその最後のテストだけができなくて意気消沈してるブルーノです😩最後の最後が一番ダメだと後味悪すぎるううう(T ^ T)

さて、そんな時はプログラミングの勉強だ!!というわけで今回はプリプロセッサについてやっていきたいと思います!!

 

プリプロセッサ

プリ(pre)は英語で「前の」とかそういう意味ですね。プロセッサはその名の通りプロセスを実行するもので、この二つを合わせたものがプリプロセッサ、つまり本番前に実行できるプロセッサということになります。プログラムの作成途中でここまで実行したい!とか、この箇所は飛ばしたい!という時にIF文に似た形で定義することで実行する箇所を指定できます。単純なコメントアウトと違うところは、シンボルを決めておくことで条件によって実行する箇所を変えられるところでしょうか。シンボルは以下のようにプログラムの冒頭で定義します。

#define シンボル

そして次に

#if シンボル

コード...;

#endif

 

とすると、「シンボル部分が定義されているので#if ~ #endif までを実行します」という意味になるのです。ちなみにこの「コード...;」の部分はプリプロセッサディレクティブと言います。シンボルが定義されていない場合は #if ~ #endif は実行されないわけですね。この #if の後のシンボルには物理演算子を使うこともでき、例えば

#define シンボル1

#define シンボル2

 

#if (シンボル1 && シンボル2)

コード...;

#endif

 

とした場合「シンボル1とシンボル2が定義されているのでコードを実行します」という風に認識されます。これが単純なコメントアウトよりも便利に指定できる理由ですね。

では、実際に見てみましょう

f:id:covory10101101276:20180205221303p:plain

f:id:covory10101101276:20180205221310p:plain

一通り試してみましたね。MARS関係のプリプロセッサディレクティブは書き込む段階でもうすでに認識されなくて予測されず白字部分を全部打ち込まなくてはいけなかったので大変でした🤔

 

Conditional属性

先ほどやった #if ~ #endif の動きに似たものにConditional属性というものがあります。戻り値がvoidでオーバーライドされていないメソッドに対して使うことができ、そのメソッドを実行するか決めることができます。Conditional属性をつけられたメソッドは条件付きメソッドと呼ばれます。Conditional属性は下のように定義します

[Conditional ("シンボル")]

またシンボルが出てきましたね。そう、これもプログラムの冒頭で定義しなければなりません。さらにもう一つ、Conditional属性はSystem.Diagnostics名前空間に用意されているのでこれも宣言しましょう。下に例を書きます

f:id:covory10101101276:20180205223600p:plain

f:id:covory10101101276:20180205223607p:plain

あれ、何も実行されていませんね。というのも当然で、まあVsual Studio Community君は優秀なのでコードの色を見れば一発で分かるのですがシンボル "BRUNO"が定義されていないので薄い字の部分は全て省略されました。先ほどの #if ~ #endif と何が違うのかということですが、#if ~ #endif を使ってこの記述をすると実はエラーになります。なぜかというと、21行目で省略されているメソッドを呼び出していますね。Conditional属性は「省略」なのでShowメソッドの存在を認知した上で飛ばしているのですが、#if ~ #endif は存在そのものを認知しないので存在しないメソッドを呼び出そうとしたことになりエラーとなってしまいます。今回はここまでにしておきます。

 

最近バーチャルユーチューバーが流行っていますよね。興味を持って試しにのぞいてみたら衝撃を受けました。匿名性のリスクが不安なユーチューバーの欠点をカバーし、なおかつバーチャルなので演出やキャラ設定も自由自在なんて最強ですね!!これもできるようになりたいなあ。ちなみに私が好きなのは富士葵ちゃんです😬