web-dev-qa-db-ja.com

マイクロソフトはC#での「var」の使用を推奨していませんか? (VS2017)

次の Visual Studio 2017 を見ています。

Boosted Productivityというタイトルのセクションの下に、Visual Studioの画像を使用して、すべてのvarを明示的なタイプに置き換えています。

boosted productivity VS2017

コードには、Visual Studioが「修正が必要」と認識しているいくつかの問題があるようです。

C#でのvarの使用についての理解を再確認したかったので、2011年のEric LippertによるUses andという記事を読みました暗黙の型付けの誤用

エリックさんのコメント:

  • 必要な場合はvarを使用してください。匿名型を使用している場合。
  • 特にオブジェクトの作成である場合は、宣言の型が初期化子から明らかな場合はvarを使用します。これにより、冗長性が排除されます。
  • コードが変数のセマンティックな「ビジネス上の目的」を強調し、そのストレージの「機械的な」詳細を軽視する場合は、varの使用を検討してください。
  • コードを正しく理解して維持するために必要な場合は、明示的な型を使用してください。
  • 「var」を使用するかどうかに関係なく、説明的な変数名を使用します。変数名は、そのストレージの詳細ではなく、変数のセマンティクスを表す必要があります。 「decimalRate」は悪いです。 「interestRate」は良いです。

コードでのvarの使用法のほとんどはおそらく問題ないと思います。読み取るビットにvarを使用しなくても大丈夫だと思います...

var tweetReady = workouts [ ... ]

...たぶんそれが100%のタイプであるとは限らないかもしれませんが、それでもbooleanであることがすぐにわかります。

varこの部分の使用法...

var listOfTweets = new List<string>();

...次のようにするのは冗長だと思うので、varの適切な使用法とまったく同じように見えます。

List<string> listOfTweets = new List<string>();

エリックによると、変数はlistOfTweetsではなくtweetsになるはずです。

ここですべてのvarの使用を変更する理由は何ですか?このコードに何か問題があるのでしょうか?

16
Rowan Freeman

TL; DR:いいえ、マイクロソフトはC#での「var」の使用を推奨していません。画像は、不平を言う理由を説明するコンテキストが欠けているだけです。

VS2017 RCをインストールして[オプション]パネルを開き、Text Editor -> C#、新しいセクションが表示されます:Code Style。これは、ReSharperがしばらくの間提供してきたものに似ています。コーディングスタイルの構成可能なルールのセットです。

変数の型が明らかで「他の場所」である場合の組み込み型のvarの使用に関する3つのオプションが含まれています。いずれの場合も、「明示的なタイプを優先する」または「変数を優先する」を指定して、通知レベルを「なし」、「提案」、「警告」または「エラー」に設定できます。

enter image description here

27
David Arno

読みすぎていると思います。したがって、暗黙の型指定の使用を明示的な型注釈で置き換えることができる機能があり、その結果、暗黙の型指定は推奨されません。 C♯をCILバイトコードにコンパイルする機能もありますが、C♯は推奨されないので、代わりにCILバイトコードをすべて作成する必要があると結論付けられますか?おそらく違います。

マイクロソフトは、IDEがコードを理解していることを深く理解しているだけです。タイプする必要がなくても、タイプを記述できます。それだけです。

これは、IDEのコード理解機能を披露する良い例にすぎません。これは小さく、自己完結型であり(大きなリファクタリングを示すのとは異なり)、すべてのエディションで利用可能であり、すべての開発者に適用できます(Ultimateでのみ利用可能で、重要な部分には適用できない、非常に印象的なアーキテクチャ視覚化機能の一部とは異なります) VSの潜在的なユーザーのうち、それほど大きなプロジェクトは決してありません)、そして非常にシンプルです(文字通りまったく同じことをしていますcsc.exevarが導入されて以来ずっと続いています)、特に暗黙の型付けと型推論を本当に理解していない人(または「型推論」をグーグルしようとして圧倒される人にとっては、確かに印象的です。 Hindley-Milner、統一、バックトラックなどの用語は、実際にはC♯のローカルのみの推論は非常に単純明快です)。

つまり、簡単に言うと、IDE機能を自慢するための派手な方法です。

6
Jörg W Mittag