この質問の例は Visual Basic.NET と Java のものですが、このトピックは型推論を実装する他の言語にも適用される可能性があります。
これまで、VB.NET で LINQ を使用する場合にのみ型推論を使用してきました。ただし、以下に示すように、型推論が言語の他の部分で使用できることは承知しています。
Dim i = 1 'i is inferred to be an Integer
Dim s = "Hoi" 's is inferred to be a string
Dim Temperatures(10) as Double
For T In Temperatures 'T is inferred to be a Double
'Do something
Next
Temperatures(10)
型の推論によって、コードの一部を記述するために必要なタイピングの量が減り、基本変数 (上記のような) の型を変更する必要がないため、その型をより迅速に変更できることがわかります。それにアクセスする他のすべての変数 ( などT
)。ただし、変数の型がすぐにはわからない可能性があるため、型の明示的な宣言がないため、たとえばコード検査中にコードが読みにくくなる可能性があることを懸念していました。たとえば、上記の For ループだけを見ると、T
が何らかの浮動小数点値であると正しく推測できるかもしれませんが、 の宣言を振り返らなければ、それが単精度か倍精度かを判断することはできませんTemperatures
。コードの書き方によっては、Temperatures
はるかに早く宣言することができるため、読者は戻って宣言を見つけてから読み直す必要があります。確かに、優れた IDE を使用している場合、変数名の上にマウス カーソルをすばやく移動すると型が表示されるため、これはそれほど問題ではありません。
また、状況によっては型推論を使用すると、コードを変更しようとしたときにバグが発生する可能性があると思います。A
クラスとB
がまったく異なることを行うと仮定して、次の (明らかに不自然な) 例を考えてみましょう。
Class A
Public Sub DoSomething()
End Sub
End Class
Class B
Public Sub DoSomething()
End Sub
End Class
Dim ObjectList(10) As A
For item In ObjectList
item.DoSomething()
End For
ObjectList
fromの型を to に変更A
するB
と、コードはコンパイルされますが、機能が異なり、コードの他の部分でバグとして現れる可能性があります。
型推論の例をいくつか挙げると、ほとんどの人は、型推論を使用しても可読性や保守性に悪影響を及ぼさないことに同意するだろうと想像できます。たとえば、Java 7 では、以下を使用できます。
ArrayList<String> a = new ArrayList<>(); // The constructor type is inferred from the declaration.
それ以外の
ArrayList<String> a = new ArrayList<String>();
私は、この問題について人々がどのような考えを持っているか、また、型推論をどの程度広範囲に使用すべきかについての推奨事項があるかどうかを知りたいと思っていました。
アムル