C# (dotnetcore) 暗黙的な型指定(var)を利用する際の指針
参考書籍
参考書籍に、「暗黙的な型指定(var)」の使い所が書かれていたので、自分なりに調べてまとめておく。
Q:結局のところ、暗黙的な型指定(var)と明示的な型(2.3.3 項)と、いずれを利用すべきなので しょうか。使い分けのルールなどがあれば、教えてください。
A:マイクロソフトのドキュメントでは、以下のような指針が示されています。
[1] 変数の型が右辺から明らかである場合、または厳密な型が重要でない場合は、暗黙の型指定を使用します。
[2] 右辺から型が明らかではない場合、var を使用しないでください。
[3] 型を指定する際に変数名に頼らないでください。変数名が正しくない場合があります。
[4] dynamic(11.3 節)の代わりに var を使用しないでください。
[5] for / foreach(4.2.3 項)のカウンター変数では、暗黙の型指定を使用します。
マイクロソフトのドキュメントを探す。
ドキュメントみっけ。
以下ドキュメントの引用と、参考書籍の番号を合わせてみる。
[1] 変数の型が割り当ての右側から明らかである場合、または厳密な型が重要でない場合は、ローカル変数の暗黙の型指定を使用します。
[2] 割り当ての右側から型が明らかではない場合、var を使用しないでください。
[3] 変数の型を指定するときに変数名に頼らないでください。 変数名が正しくない場合があります。
[4] dynamic の代わりに var を使用しないようにしてください。
[5] for ループでループ変数の型を決定するときは、暗黙の型指定が使用されます。
[5] foreach ループでループ変数の型を決定するときは、暗黙の型指定は使用されません。
[5]が少し怪しいが、ほぼほぼこのことを仰られているのでしょう。
英語のドキュメントをGoogle翻訳にかけてみる。
「Do not use implicit typing to determine the type of the loop variable in foreach loops.」
というわけで、この指針がvarの使い所。
dynamic に対するサンプルコードが無いので書いてみる。
Microsoftのドキュメントには、dynamicに関するサンプルがなかったので、 参考書籍のp.557にあるIronPythonを参考にメモっておく。
このコードの実行には、NuGetでIronPythonを追加する必要がある。
static void Main(string[] args) { var py = IronPython.Hosting.Python.CreateRuntime(); using(var sw = new System.IO.StreamWriter("test.py")) { sw.Write($@" class ExampleClass: def greet(self, name): return ""Hello "" + name + "" !"" "); } dynamic script = py.UseFile("test.py"); dynamic example = script.ExampleClass(); Console.WriteLine(example.greet("mitsugeek")); }
結果
Hello mitsugeek !