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