読者です 読者をやめる 読者になる 読者になる

graphics.hatenablog.com

テクニカルアーティストの技術を書き殴るためのメモ帳

「C#のコードルールについて」に反応してみる。

【技術サロン】C#のコードルールについて(2016/12/7) – 株式会社ロジカルビート

あくまで非ゲームプログラマないち C#er として、ということでひとつ。


> #regionの利用について
C# のソースが C++ とかに比べて冗長になりやすいという認識はないんだけど、まぁそれはさておき、「ふと partial にしたくなるけどソースファイルを分割するのは嫌だなぁ」というときが #region の使いどころだという気がする。いずれにせよランタイムに影響しないディレクティブだし、気軽に使っていいと思う。
なんにせよ、partial はソースコードが分割されているということに意味があるんだろうし、#region と同じ文脈には載らないと思う。まったく別物ですよ。

> プロパティの使い道
たぶんこの人らのいう C# っていうのはつまり大半が UnityScript のことだと思うんだけど、Unity に関してだけいえば、プロパティを使う意義はほぼないんじゃないのかなぁと。「処理をフックしたいとき」は、たとえばデバッグ時にフックしたいけどリリース時は素通ししたいみたいなときに使うのであれば賛成。そうでなければ、フロントのプログラマに隠れて余計な処理を負わせることになるので、素直に Get***() みたいに関数化したほうがいいと思う。あれは「公開変数と見分けがつかない」ということにこそ意味があるので、特にパフォーマンスを気にする前提であるなら、「ふつうの変数であるかのように見せたい」という強い意思があるとき以外は使うべきではないと思ってる。
Unity 以外でという話であれば、逆に public 変数の出番が基本的にはないと思う。

> ガベージコレクションについて
つらい。

> namespaceについて
using 周りのポリシー次第なのかなと。C++er は using を使いたがらない人が多い気がしているので、そういう場合は浅めなのがよさそう。ただあまり浅くすると今度は namespace 自体の存在意義が揺らいでくるので、いずれにせよ「namespace は○階層まで!」というルールは馴染まないんだろうなぁ。個人的には、ちゃんと意義のある namespace なら多少深くなっても別に構わない派。
あとあれ、ユーザコードで System namespace を使うのはちょっとあれだけど、既存のモジュールにあえて namespace をかぶせることで、そのアセンブリの中にいるかのようなクラスをアセンブリの外から定義できるということには、それはそれで意味がある。決して濫用していいやりかたではないけど、まぁイメージ的には拡張メソッドみたいなかんじかと。

> Managed Extensibility Framework(MEF)
MEF はよいものですね。Lazy<T> とかもすきです。設定ファイルから Catalog を組んだりすると超動的に DI とかできたりするのであのゆるいカオスなかんじはぼくだいすきですね。
あとは .NET 周りだと CodeDOM がよいですね。Roslyn もいいんだけど、あれの Scripting はデバッガ使えないしなぁ。。まぁ CodeDOM も最近は C# 6 が使えるし、別に全然いいんだけど。