2017年3月24日 (金)PCにもプログラムを書かせよう
日中は少しずつ暖かい日が増えてきました。
日本の春は三寒四温を繰り返しながら暖かくなると言いますが、
4日も暖かい日が続いている気がしないですね。
おはようございます、本日のブログ当番M.Iです。
皆さんはプログラムで同じようなコードを書く時、どういう風に書きますか?
例えばC++ならマクロやテンプレートといった技術を使うかもしれません。
これらの技術だとソースは短くなる代わりに、
複雑なマクロを定義するとどんな展開のされ方をするのかがわからなくなりがちです。
VisualStudioでもマクロを展開した後のコードを出す、
ということができるらしいのですが、ここでは置いておきます。
今回紹介するのはT4テンプレートというコード生成機能です。
VisualStudio2010から標準で実装されています。
さっそくコード例を紹介します。
なお、生成するファイルの拡張子を指定するコードなども必要なのですが、
このエントリでは省略しています。
あらかじめご了承ください。
<# for (int i = 0; i < 3; i++){ #> |
このようにすれば
i = 0;
i = 1;
i = 2;
といった文字列を生成することができます。
<#と#>で囲まれた部分はC#のコードとして無視され、
<#=と#>で囲まれた部分を評価した値が出力されます。
<#+と#>で囲まれた個所にクラスやenumが作れます。
囲まれていない部分はそのまま出力されます。
この場合iが0~2なので、iを評価した値が出力されています。
forで似たようなプログラムを連続して出力ができるわけです。
ただ、同じようなコードが出力されるため、冗長なコードになります。
また、色分けやインテリセンスも効かないので、
それらを使用できるようにする拡張機能を導入したほうが捗るかと思います。
現在個人的に使用しているのが上の拡張機能です。
できることはprintfなどでコンソールに吐き出したものをリダイレクトするのと変わりませんが、
こちらだと変更後保存すればすぐに出力先ファイルに反映されます。
実用例として、例えばUE4だとUE4で管理できるクラスや構造体を宣言する場合
クラスならUCLASS、構造体ならFSTRUCTという文言をクラス宣言の前に書くという風に決まっており、
命名もクラスならUHogeHoge、構造体ならFHogeHogeという風にしないといけません。
こういったテンプレートを作っておくとクラスから構造体に変えたいといった時に変更しやすくなります。
どう定義するのか忘れた場合の備忘録、タイプミスで起こる分かりにくいエラーを防ぐこともできます。
タイプ量も節約できます。
<# |
と入れると
UCLASS(BlueprintType) |
と出力されます。
var type = UTypes.Class;
を
var type = UTypes.Struct;
に変えればclass部分がstructになり、名前もFHogeDataになるかと思います。
リフレクションも使えるので、.netアセンブリ内にあるクラスを列挙し、
クラス内のメソッド情報をとり、コードを書く、といったことも可能です。
自動生成で作れるものならこういった技術を使えば生産性を上げていけるかもしれません。
| 固定リンク | コメント (0) | トラックバック (0)
« 柔軟に | トップページ | 姿勢には気を使うべし »
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。
コメント