web-dev-qa-db-ja.com

C#開発は、実際に使用するIDEと切り離せませんか?

私はPythonプログラマーであり、C#を学習しているプログラマーです。C#を心配するのをやめ、Pythonと常に比較するのではなく、C#が好きなだけです。

私は1つの点に追いついています。これは Stack Overflowの質問 で詳しく説明されているように、物事がどこで定義されているかについての明示性の欠如です。つまり、C#では、using foofooのどの名前が使用可能になるかを通知しません。これは、Pythonのfrom foo import *に類似しています) -Pythonコーディングカルチャー内では推奨されない形式であり、from foo import barのより明示的なアプローチではなく、暗黙的であるためです。

私はC#プログラマーからのこの点に対するスタックオーバーフローの回答にかなり衝撃を受けました。実際には、この明示性の欠如は実際には問題ではないため、IDE(おそらくVisual Studio)では名前の上にマウスを置くだけで、その名前がどこから来たのかシステムに通知されます。例:

理論的には、これはテキストエディターで見ているときに、C#で型がどこから来たのかわからないことを理解しています。しかし、実際には、それが問題になることはありません。実際にコードを見て、Visual Studioを使用できない頻度はどれくらいですか?

これは私にとって啓示です。多くのPythonプログラマーは、Sublime Text 2やvimのようなものを使用して、コーディングにテキストエディターのアプローチを好んでいます。コードはすべてコードに加えて、コマンドラインツールとフォルダーおよびファイルへの直接アクセスと操作です。 IDEこのような基本的なレベルでコードを理解するために依存しているという考えは異端のようです。C#の文化はこの点で根本的に異なっているようです。そして、私は単に受け入れて受け入れる必要があるのでしょうかC#の学習の一環として。

ここで私の質問につながります:C#の開発は、IDE使用するものと効果的に切り離せませんか?

41
Ghopper21

Visual Studioは非常に便利なため、しばらく使用すると、別のIDEを使用することが困難になります。たくさんの便利なツールとたくさんのプラグインが利用できるので、実際には必要なすべての機能を備えています。

一方、学習する言語が何であれ、最初からコマンドラインを使用することをお勧めします。これにより、言語がどのように機能するかをよりよく理解できます。 C#も例外ではありません。

c#開発は、IDEを使用することと効果的に切り離せませんか?

理論的にはありませんが、実際にはあります。テキストエディターとコマンドラインを使用してC#で記述することは可能ですが、Visual Studioを使用している場合は、これを行うことはありません。実際、コマンドラインからC#コードを実行したプログラマーはほとんどいません。

ところでusing fooに不便を感じる場合は、型を使用するときにパス全体を使用できます。

26
superM

このような基本的なレベルでコードを理解するためにIDE=に依存しているという考えは、嫌悪感のようです。

理解コードの問題ではありません。十分な時間が与えられれば、基本的なテキストエディターを使用して、またはプリントアウトでさえ、常に適切な変数を見つけることができます。コードを理解する限り、IDE依存関係は絶対に存在しません。

参照を効率的に見つけることは、まったく別のテーマです。C#とC++の両方で、Visual Studioで宣言ポイントを見つけるのと同じくらい、EclipseでJava変数の使用法を見つけることができることを気に入っています。宣言ポイントを手動で探すのではなく、コーディングに時間をかけることを好みます。これは、計算を行うのと似ています。紙の上に複数桁の数値を掛けることができますが、電卓を使用して1〜2分節約できます。

コードの特定の「クリティカルサイズ」から始めて、優れたIDEはプログラミング言語に関係なく非常に役立ちます。サイズは言語によって異なる場合がありますが、数千行を超えると、 IDEは、言語に関係なく役立ちます。これは、特定のプログラミング言語よりも人間の心の制限に関係しています。ある時点で、短期記憶は「オーバーフロー」にバインドされます。

IDEが役立つ場合に重要なサイズを増やすためのトリックがあります。たとえば、命名規則に従うことができます(ハンガリーの名前は、ある時点でC++の世界で大きくなり、特にWindowsの実践者の間で) )別の一般的なトリックは、インスタンス変数をthis.で修飾することです(そのような修飾が必要ないコンテキストでも)。

これらのトリックにはトレードオフが伴います。ほとんどの場合、名前を覆い隠したり、カプセル化によって非表示にすることを目的とした明示的な参照を挿入したりすることにより、プログラムが読みにくくなります。選択に直面して、私はきれいに見えるコードに加えてIDEをIDEを差し引いたものよりもきれいに見えます。しかし、他の人の選択は私のものとは異なる場合があることを十分に認識しています。

33
dasblinkenlight

多くのPythonプログラマーは、Sublime Text 2やvimのようなものを使用して、コーディングにテキストエディターのアプローチを好んでいます。コードはすべてコードに加えて、コマンドラインツールとフォルダーおよびファイルへの直接アクセスと操作です。

それは素晴らしいことですが、VS IDEの要点を逃しています。 IDEのようなVSのポイントは、リファクタリングやインテリセンスなどの強力なコードツールによる迅速な開発サポートです。VSはC#コードにとって非常に優れたveryエディタです。

C#では、IDEに大きく依存するスタイルでコーディングできます(varキーワードなどを多数使用できます)。明示的。たとえば、クラスが属する名前空間を明確にするために名前空間エイリアスを使用する(import in JavaまたはPython)。これは、コーディングスタイルの選択よりも言語の特徴。

C#は静的に型付けされているため(v4のようにいくつかの動的な拡張機能があります)、どの型が参照されているかを見つけるのは常にかなり簡単です-それらが間違っている場合、コードはコンパイルされず、VSだけではありません= IDE C#インテリセンスをサポートします。ただし、おそらくそれが最善です。

強力なIDE(VSのような)なしでC#を開発することは、すでに範囲の上限のネイルガンを持っている場合、手で釘を打ち込むようなものです-実行する必要がある場合があります。しかし、専門家はその仕事に適したツールを使用します。

Javaについても同じことが言えると思います。強力なIDEがIntelliSenseとコードリファクタリングツールを備えている場合は、おそらくそれを使用する必要があります。 。

ただし、逆に見てください。インテリセンスが不要な場合は、コンパイル時のコードチェックとコード分析/リファクタリングを行うと、肥大化したIDEは使えません。静的に型付けされた言語です。私はそれが逆だと思います:

コーディングにテキストエディターのアプローチを好む多くのプログラマーは、静的に型付けされた言語(C#やJavaなど)からそれほど多くを得ないため、Python and JavaScript。

おもう:

  • 動的言語は軽量ツールに適しています(重量のあるIDEはここではあまりメリットがありません)
  • 静的言語は強力なIDEに適しています(ツールは柔軟性を犠牲にしてコードを支援できます)
8
Keith

あなたの質問に答えてください。それはゆっくりと変化していますが、Microsoftの開発環境は主に 単一文化 でした。

このアプローチには多くの長所と短所がありますが(たとえば、PCとXboxのようなオープンプラットフォームとクローズドプラットフォームの長所と短所を検討してください)、結局のところ、Microsoftのツールが最も重要です人々が使用します。同社はまた、彼らの意思決定は多くの場合、「実際の妥協点を常に模索しており、ほとんどのユーザーに最大の価値を与える」プロセスの一種であることも示しています(直近では TypeScript を検討してください)。したがって、基本的に、C#の開発がツール(VS)を念頭に置いて行われていたことを知って驚くことはありません。

5
Daniel B

誰もがここで方法を読んでわざわざ?

要約すると、非常に複雑なIDE機能は不可欠であり、いつかはZen of Sublime VimNessに進化するはずです(あるべきです)。

私たちのソフトウェアは、約2M LOCの129プロジェクトです。 .NETフレームワークの巨大さを追加します。これを考えると、IDEが不可欠であり、このスレッドの質問の動機を超越しています。

コードベースの洞察

限目。私たちが話している機能の種類はご存じでしょう。ただし、その便利さは、扱うコードベースの種類によって不可欠で不可欠になります。

IDEのため、私はより良いコードを書いています。簡単、高速、正確であるため、Nunitテストには常にカスタムメッセージを追加します。主にインテリセンスのため、文字列より列挙を優先します。私は説明的な/長い命名をためらうことはありません-複数行のステートメントは速くてきれいに構成されています。

しかし、このスマートさでさえ時々多すぎる。古き良き「ファイルを探す」テキスト検索をよく使用します。

コーディングヘルプ

ここで私はよく「十分!」と泣きます。十数色の大部分がobscureattaで画面いっぱいに表示され、特定の変数がどこでもハイライト表示され、ブレースがハイライト表示されてブレースが実際に何であるかが不明瞭になっているとします。クリックするだけです!その後、ほとんどの場合は無視してください)、画面の2/3にまたがる署名ヘルプポップアップ、垂直にいくつかのオーバーロードを表示、ポップアップはマウスカーソルを離れた場所にあるため...私が取り組んでいるコードの&^!%行*s*さえ見られません!

Vis.Stud。ミニマリズムを採用する必要があるので、コーディングに集中できできる数百(すべてのカラーコーディング設定とすべてのそれらのプラグイン)正気を取り戻すための負けた戦いの設定の。 " Pareto "キーは素晴らしいでしょう。

4
radarbob

まず、C#はPythonではありません。さまざまな設計方法があります。

さて、あなたの質問に答えるために、Python風のusingステートメントを使用することは完全に可能です。

using FooBar=MyName.Foo.FooBar; 

それほど簡単ではないので、それは間違いなく標準ではありません。ただし、各クラスが正確にどこから来ているのかを正確に知ることについては、それほど心配する必要はないと思います。 Pythonでも、この方法でそれを行うことの全体的なポイントを理解していません。

また、C#は、IDEを使用して簡単にするのに非常に適している言語です。 Intellisenseは、特にRubyやPythonなどの動的言語と比較して)実装が驚くほど簡単です。ただし、IDEにこだわる必要はありません。Eclipseを使用している人はいると聞きました。もちろん、MonoDevelop(かなり頻繁に使用します)もあり、コマンドラインからでも作業できます。サーバーでは、C#ファイルをviで編集し、次にxbuildで再構築します... IDEを使用すると、通常の場合のコマンドラインに比べて、はるかに簡単になります。

4
Earlz

c#開発は、IDEを使用することと効果的に切り離せませんか?

もちろん違います。名前空間全体をインポートしないのはなぜですか?統合されたIDEまたはテキストエディターを使用するという選択は、それとは関係ありません。名前空間全体をインポートしても、コードの読み取りや使用が難しくなることはありません。

C#は型付き言語です。同じクラスを持つ複数の名前空間をインポートすると、コンパイルエラーが発生します。

個人的には、どちらの方法でも型宣言をあまり使用しません。代わりに、ここで説明する理由により、代わりにvarキーワードを使用します。 http://blog.gauffin.org/2012/08/to-var-or-not-to-var- is-that-really-the-question /

3
jgauffin

私の理解は、Pythonでは「すべてが公開されている」またはその影響の何かだということでした。 C#では、モジュールの設計者がパブリックなものとパブリックでないものを決定するため、importを実行すると、とにかくパブリックAPIしか取得できません。それがあなたが説明している違いの理由かもしれません。

1
Scott Whitlock

c#開発は、IDEを使用することと効果的に切り離せませんか?

以前の仕事では、ほとんどの場合、vimを使用してC#、JavaScript、Powershell、Perl、C++などの言語でコーディングしており、かなりの数の開発者が同様のことを行っていました。プロジェクトはVisual Studioには大きすぎました。

とはいえ、ほとんどのC#開発者ははるかに小さなプロジェクトを扱っており、VSを使用して非常に満足しています。

1

歴史的には答えはかなり大きいと思います。C#開発をVisual Studio、Xamarin、またはSharpDevelopの外部で効果的に実行することは、あまりにも不愉快な経験でした。

しかし最近、それを簡単にする多くのプロジェクトが現れました、例えば:

OmniSharp は、vim、emacs、atom、およびsublimeプラグインとともに、インテリセンスとリファクタリングの基盤を提供します。実際に使ったことはないので、どれだけ上手くいくのかはわかりませんが、期待できそうです。

Yeoman ASP.NET MVCジェネレータ 、ヘルプbootstrap新しいMVCプロジェクト(他のジェネレータが存在する可能性があります)。

paket 、コマンドラインから実際にNuGetパッケージをプロジェクトに追加し、.csprojファイルを更新することができるNuGetの代替(実際に使用するプロジェクトを更新するNuGetコマンドラインツールがありましたが)パッケージはIDE統合の一部であり、コマンドラインツールではありませんでした)。

Paketは、ソースコードを使用するようにソースコードを調整する必要があるという意味を持っています。そのため、チームの1人のメンバーとして座って、コーディングにテキストエディターを使用したい場合、他の全員がVisual Studioを使用する場合は、全員に説得する必要があります。他にあなたのニーズにソリューションを適応させる:(

したがって、起動して実行できるはずですが、ツールチェーンを効率的に起動して実行するためにやるべきことは比較的多くあります。

0
Pete

これは、C#開発に関する興味深い見解です。 IDEについて質問している場合は、C#の範囲を超えています。

あなたが言うように、Pythonでは、さまざまなエディターを使用してコードを記述できます。 .NETフレームワークでもそれを行うことができます。 SharpDevelopなど、使用できる他のIDEツールもあります。VisualStudioは.NETフレームワークと非常に緊密に共同開発されており、比較的高価です。SharpDevelopや "Express"バージョンなどのツールより多くの開発者に.NETを使用するように促すためにVSが存在します。本質的にすべてのIDEが行うことは、組織化された環境を提供することです。結局、コンパイラに渡すのが非常に怖いコマンドラインになる可能性があります。同じことがJavaにも当てはまります。Eclipseなどのツールは、組織と生産性の強化を提供するだけです。内部的には、ビルドするか、プロジェクトをコンパイルすると、その点が尊重されます。すべてのIDEは、不親切なコンパイラーにかなり直面しています。

C#で「using」ステートメントについて話し、それをPythonと比較する場合、それは実際に行われていることとは実際には同じではありません。 usingステートメントは、C#コードをMSILに変換する作業を支援するためにコンパイラによって使用されます。 MSILには、「この名前空間からこれらすべてのクラスをインポートする」ディレクティブはありません。コードがMSILレベルになるまでに、すべてのクラスは完全修飾名でタグ付けされています。これらの「使用」および「インポート」ステートメントは、人間が読みやすくするためのものです。これらはコンパイラ最適化コマンドではありません。この最初の「完全修飾名のタグ付け」がすべて終わった後、FQNに対する一種の低レベルの「縮小」が行われる可能性がありますが、これはコンパイラ/インタープリタがより高速に実行できるようにするためです。これは最適化です。ただし、独自のカスタムバージョンのコンパイラを作成しない限り、開発者に提供される制御はありません。

ここで説明するこれらすべての言語の最後の基本的な違いは、一部はVMによって解釈され、一部はJITスタイルで解釈され、一部は完全にコンパイルされることです。これらのusingディレクティブがこれらのコンパイラーおよびインタープリター全体でどのように実装されるかは、大きく異なります。

HTH。

0
Lee James