C#の長所と短所を客観的に評価する

4277 ワード

C#に対して、coderの中で2種類に分けることができます:1種類はC#の死忠で、それに対して極点まで賞賛します;もう一つの類はちょうど反対で、それに対して極度に反発している.
本文は全面的で客観的な方法でこの言語、特に文法の面を評価する.
 
実は多くの人が一つの言語が感情的な色彩を持っていると評価しています.一部の人がC#を支持しているのは、彼がC#しかできないからか、マイクロソフトの古いユーザーだからだ.しかし、より多くの人がC#を支持しているのは、C#が他の言語よりも優れていることを比較することで発見したからだ.C#とC++を比較するとjavaが比較されます.複数の事実は、文法的にC#が確かにC++やJavaよりよくできていることを証明している.以下、どこがいいか詳しく分析します.C#とpython、jsなどの言語を比較すると、C#は非常に煩雑で、本当にプラットフォームをまたぐことができません.だから多くの人はC#が優秀な言語ではないと思っています.これは間違っています.C#とpythonがしたことは違いますから、それらを比較するのは意味がありません.メールとメールを比較するように、メールの方が使いやすいのは間違いありませんが、機能が異なり、メールが便利だからといって、メールを完全に否定することはできません.
 
C#利点1:javaよりも先進的な文法体系がある
C#は後生であるため、多くの文法は他の言語の改善である.ビジネス製品として、C++ユーザーはC#の最も重要な目標であるため、C++ユーザーの習慣を十分に配慮しています.全体的に見ると、C#文法はjavaよりも優雅です.ここでjavaファンが立ち上がるかもしれませんが、javaにも良いところがあると言っています.はい、C#はどこでもjavaより優れているとは言っていません.局部的な反例を挙げないでください.
C#チームは、単純な技術的な紙上の談兵ではなく、文法を設計する際によく見られるビジネスニーズに十分配慮しています.そこで、C#はイベント、依頼、属性、Linqなどの一連の業務開発をより簡単にする機能をサポートします.
C#メリット2:パワフルな周辺
C#のIDE機能は非常に強く、C#のドキュメントには中国語を含む多言語があり、C#に必要な実行プラットフォームはユーザー数の大きいwindowsに内蔵されています.すべてのすべては私たちに話しています.C#には強いお父さんがいます.同時に、C#は言語だけでなく、職人心のある製品であることも説明しています.だから、ユーザーはこの製品の各機能--アフターサービスを含むことを享受することができます.
以上の2つの利点がC#のすべての利点です.いずれのCファンもCが優秀であることを証明したいと思っています.上の2つの理由にほかならないと思います.次に、その欠点をもっと研究しましょう.
 
C#欠点1:製品です
マイクロソフトの製品として、競合他社のオペレーティングシステムを支援することはできません.マイクロソフトの製品として、エラーが発生しないように、安定性と厳格さを追求しなければなりません.
C#チームの実力は確かに非常に強く、C#に低級なエラーは発生しません.if(a=false)のようなコードでも警告が表示されます.C#の文法、下位ライブラリも常に1つの理念を証明しています:私たちは製品をして、私たちは製品が私たちの望む仕事に基づいて、いかなる間違いが発生することを許さないことを保証しなければなりません.
これは長所であり、欠点でもある.
私たちのニーズが製品設計者の期待と一致すると、非常に楽になります.しかし、需要と期待が異なると、面倒なことが次々と訪れる.例えば、switchがcaseを貫くことを望むと、製品設計者がユーザーに直接そんなことを許さない--彼には適切な理由があり、この機能を実現する代替方法も提供されているが、ユーザーは彼の言うとおりにしなければならない.このような状況が他の製品設計者が考慮していない需要に発生した場合、このトラブルはさらに大きくなります.たとえば、>>を再ロードしてC++コードをシミュレートしたい場合、これは不可能なタスクであることがわかります.
多くの人がこのような感じで、IDEが持っている機能を直接使って開発して、とても楽です.しかし、自主的な考えがあると、ソフトウェアのテーマを修正するなど、実現するのは難しい.
 
C#欠点2:符号量を考慮していない
このような問題が発生したのは、マイクロソフトの人が多いからだ.C#では、ドキュメントアノテーションはxmlを書く必要がありますが、ドキュメントアノテーションは継承できません.ユーザーは、各関数とリロードに手動でアノテーションを追加する必要があります.C#の多くのよく使われるツール類は、その使用の限界(菜鳥が使うとエラー)のため公開されていない.典型的な例は次のとおりです.
public string GetValue(int index) {
   if(index < 0) throw new ArgumentOutOfromRangeException();
   if(index > this.Count) throw new ArgumentOutOfromRangeException();
   return GetValueInternal(index);
}

internal string GetValueInternal(int index) {
   //...
}

C#ユーザーをバカにする---GeetValueは不正なindexを伝え、自分でより効率的なGetValue Internalを使用します.C#システムライブラリの設計はindexを検出することによって、意味に合った異常が投げ出されることを確保する.
ユーザーはどうしますか?プロジェクトでindexが正当かどうかを検出しないと、厳密ではなくコードの品質が低くなります(indexをチェックしないと、indexエラーが発生した場合、ArgumentOutOfRangeExceptionではなく、IndexOfRangeExceptionが発生します.これにより、サードパーティのユーザーは、どの異常をキャプチャすべきかを迷うことになります).検出はコード量を浪費しており,1つの関数はまだそうであり,1つの項目には斑が見られる.
また、ユーザーは機能を実現するためにクラスを使用する必要があることが多いが、実際にはシステムライブラリに存在するが、内部で使用される機能モジュールであるためpublicではない.この時、ユーザーは別のかまどを作るしかなかった.これはBuffer.Copyという方法があるのに、システム内部ではBuffer.CopyInternal(publicではない)だけが呼び出され、Buffer.Copyではなく、Buffer.CopyInternalはユーザーが本当に必要とする関数であることを説明するのに難しくない.
 
全体的に見ると、C#はプロジェクトに向いていない.さまざまな方法でユーザーの時間を消費するため、大きな穴です.特に完璧を追求する人は、マイクロソフトのリズムに合わせて完璧を創造したいと思っています.それはまるで冗談です.プロジェクトをやり終えたいだけの人には、簡単なことをこんなに複雑にしなければならないのに、やればやるほどうんざりします.
それでもC#は結局一つの言語、一つのツールにすぎない.客観的にツールの良し悪しを評価するのは実際の意味がなく、ユーザーが上手に使用できるかどうかにかかっており、長所を伸ばして短所を避けることができる.最高の言語はありませんが、自分に最適な言語があります.