C#は最近人気があるようです。構文的にはJavaとほとんど同じだと聞いた。 JavaおよびC++は長い間存在していました。どのような理由でC#よりもC#を選択すべきですかJavaおよびC++?
問題は、「どの言語が現代の一般的なアプリケーション開発に適しているか」です。
編集:以下のコメントの一部に対処しました。小さな発言:イディオムとしてネイティブに多くのものを持っている場合、それを毎回実装またはダウンロードして使用するよりも大きな違いがあると考えてください。ほとんどすべてがこれらの言語のいずれかで実装できます。問題は、言語がネイティブで提供するものです。
だから頭の上から(いくつかの議論は両方の言語に当てはまります)...
this
ポインタ引数を無視する)ことができるため、クラス間にさらに動的で柔軟な関係を作成できます。 editこれが何を意味するかわからない場合は、voidを返すメンバーメソッドを割り当て、void (*ptr)()
変数にvoidを受け入れてみてください。 C#デリゲートはthis
ポインターを持ち運びますが、ユーザーは常にそれを気にする必要はありません。クラスのvoid()
メソッドを他のvoid()
デリゲートに割り当てるだけです。using
ステートメント)をサポートしています。 Java 7もこれをサポートする予定ですが、C#はずっと長い間それを持っています。yield
ステートメントを使用した列挙サポートの改善。this
ポインターによってフィールドにアクセスし、それを行うメソッドを汎用関数ポインター(つまり、同じクラス内ではない)にバインドする必要がある場合、それを行うネイティブの方法はありません。 。 C#では、無料で入手できます。あなたはそれがどのように機能するかを知る必要さえありません。this
ポインターを必要とするためです。using
ステートメントは、明らかにIDisposableラッパーと共に、RAIIの良い例です。 このリンク を参照してください。 GCを持っているので、C++の場合ほどRAIIは必要ないことを考慮してください。特定の時間に必要な場合は、using
ステートメントを明示的に使用できます。もう1つ注意が必要なのは、メモリの解放はコストのかかる手順です。多くの場合(特にメモリが多い場合)、GCにはパフォーマンス上の利点があります。メモリがリークされることはなく、割り当て解除に多くの時間を費やすこともありません。さらに、毎回1回だけメモリを割り当てるわけではないため、割り当ても速くなります。 new
を呼び出すと、単に最後のオブジェクトポインタがインクリメントされます。new
およびdelete
を使用してメモリを手動で管理します。これは、経験的に常にあちこちでエラーを引き起こすか、または(C++ 11を使用)自動ポインターをネイティブで使用できますが、コードにロットと多くのノイズが追加されることに注意してください。したがって、GCにはまだエッジがあります。クライアントコンピュータでは、Windowsが主要なオペレーティングシステムです。 Windowsアプリケーションに最適なGUIフレームワークは、WinformsとWPFと。NET Frameworkを組み合わせたものです。 。NET FrameworkおよびそのAPIで使用するのに最適なプログラミング言語はC#です。 Javaはこれに代わるものではありません。また、C++は自動メモリ管理のない古い言語です。 C#はC++に似ていますが、自動メモリ管理を備えており、ポインタを操作する必要がないため、生産性が向上します。 C++は、場合によっては依然として最良のオプションですが、ビジネスで一般的なフォーム集約型のデータベースアプリケーションには適していません。
Windows環境とC#での作業に慣れている場合は、サーバープログラミングのIISと基本的な管理のWindows Serverを学ぶために最小限の投資が必要になります。
会社のネットワークに展開されるソフトウェアを開発している場合、Active Directoryを備えたWindowsサーバーを使用するWindows中心の環境を使用している可能性があります。このような環境では、C#および。NET Frameworkで作成されたソリューションを統合して展開するのが簡単です。
個人的に、私はC#開発者ではなくJava開発者ですが、Webを使用しています。 Windowsネットワーク用のネットワークアプリケーションを開発している場合は、C#に切り替えます。しかし、私はLinuxベースのWebサーバーにはJavaを好みます。依存関係があまりないのであれば、組み込みシステムにはC++を選択します。
はい、C#はC++やJavaよりも最新の機能を備えた優れた言語ですが、それはnotC#を選択する上で最も重要なことです。
ソフトウェアの環境は、C#を選択する上で最も重要です。 Windowsクライアント、Windowsサーバー、Active Directory、IIS、そしておそらくSQL Serverがある環境で作業する場合、C#が最も優れた言語です。NET Framework。
Unix環境で作業している場合Webサービス、Javaが私の選択です。また、組み込みシステムで作業する場合、またはハードウェアデバイスと統合する必要がある場合は、C++が適しています。
C#およびJava
次の場合、C#は非常に優れた言語です。
言語としてのC#はJavaよりも優れています(プロパティ、値の型、具体化されたジェネリックなどの構文が優れています)。言語としてC#を好みます) からJavaまでですが、大まかに言えば、かなり類似した言語であり、類似したアプリケーションに適しています。
一方、Javaには、いくつかの大きな利点もあります。
つまり、Java vs. C#は非常に緊密な関係にあり、Microsoftキャンプに参加するか、オープンソース/クロスプラットフォームキャンプに参加したいかによります。
個人的に、私はJavaを好む:
C/C++
C/C++は基本的にまったく別の獣です。私はではありません今日、次の理由により、汎用アプリケーション開発に推奨します:
ただし、特定の限られた数の特別なドメイン、特に次の場合には、間違いなくすばらしい選択です。
したがって、基本的に、C/C++は、特に適しているドメインの1つに集中している場合にのみ、優れた選択肢です。
I heard that syntactically they are almost the same.
構文的に?だれが構文について空飛ぶサルを与えるのですか?構文が良いのは1つだけです。構文的に類似した言語からの移行を高速化できます。それでおしまい。
C#はJavaよりもはるかに優れています。汎用的で機能的なプログラミングサポートを検討してください。C#はJavaよりもはるかに優れています。演算子のオーバーロードはもちろんのこと、その他の優れた機能-C#のほうがはるかに優れています。 JavaがC#よりも優れていると考えられる可能性はありません。
C++とC#はもっとコンテストです。 C++には、非常に迷惑な古風なコンパイルモデルとCのレガシーdiseasesの束がありますが、テンプレートはジェネリックよりもはるかに強力であり、リソース管理アプローチは、using
のように、一般にはるかに柔軟で強力です。完全な失敗であり、より速く実行されます。
C#
には、LINQ
やデリゲートなどのいくつかのNice組み込み機能があります。 Java
とC++
の両方の世界で最高のものになっています。完全な比較については ここ を参照してください。
しかし、私はJava
の世界のほうが好きです-より多くのオープンソースフレームワークがあり、すべてのプラットフォームで動作します。そして、Mono
について私に言わないでください-これは信頼できるオプションではありません。
一部の情報源によると(例 http://www.indeed.com/jobtrends を参照)、C#はJavaよりも人気が低く、C++ほど人気があります。
C#は、Javaにない機能を提供します。たとえば、プロパティや関数型プログラミングスタイルなどの特定のプログラミングイディオムを直接サポートします。C#はC++よりも高いレベルの抽象化を備えています。これは、開発時間はプログラムの速度よりも重要です。
個人的には、私は今でもJava/C++の世界を好みます。PetarMinchevが言ったように、Javaにはオープンソースのフレームワークとアプリケーションが多く、どこでも実行され、少ないです特定のベンダーとオペレーティングシステムに関連付けられています。C++には同様の利点があります。ただし、コードがあるプラットフォームから別のプラットフォームに移行する必要がある場合がよくあります。私はLinuxで開発することを好むので、私の知る限り、LinuxでC#を本格的に開発することはできません。私のプログラミングのニーズはC、C++、Java、Scalaでカバーされているため、C#に本当の関心を得たことはありません。
一方、多くの開発者にとって、特定のベンダーに縛られることは問題ではありません。Microsoftはオペレーティングシステム市場で支配的な地位を占めており、C#は多くの仕事の機会を与えます。したがって、IMOの多くの開発者はC#を採用しています。これは、機能が豊富な言語であるだけでなく、投資にも適しているためです。
「プログラミング言語を含む、どのソフトウェア開発フレームワーク」についてはどうですか?
作業する「環境」など、他のものを含めるのを忘れました。
Windows O.S.のみで作業する予定ですが、低レベルである必要はなく、メモリやその他のリソースが大量にある必要はありませんか?
Windows上のフレームワークとして.NETを選択し、C#を使用します。
あなたはWindowsだけで作業するつもりですが、低レベルである必要はありませんが、リソースが多くありませんか?
Delphiフレームワーク(およびObject Pascal Delphiプログラミング言語またはLazarus Object Pascalプログラミング言語)を選択します
あなたのアプリです。さまざまな携帯電話でゲームなどのいくつかのプラットフォームをサポートする必要がありますか?
Javaフレームワーク、およびJavaプログラミング言語を選択します。
それはグラフィックインターフェースとしてKDEを備えたLinuxですか?
C++でQTフレームワークを選択する
Gnomeをグラフィックインターフェイスとして備えたLinuxですか?
C++でGObject/GLibフレームワークを選択する
ドライバーの開発など、多くの低レベルの操作を行う予定ですか?
プレーンCまたはC++は、いくつかのオペレーティングシステムで使用され、標準ライブラリをフレームワークとして使用します。
ちょうど私の2セント。
検索を行うと、トップのプログラミング言語に関する議論に出くわす可能性があります。これは検索結果の1つです- http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html -Javaまだ最も人気のある言語のようです。
JavaはC++の欠点のいくつかを取り除こうとしました(そして、非リアルタイムで重要ではないアプリケーションのプログラマーの生活をシンプルにしました)。 C#はパーティーの後半に来て、Java言語のいくつかの欠点を回避しました。C#は(Microsoftが多くの制御を行っているため)多くの進歩を遂げ、= Javaは、利害関係者間の対立のため、かなりの期間ブロックされました。
まだ言及されていないいくつかのこと:
次の理由により、C#はC++よりも優れています。
ヘッダーファイルがなくなるため、非常にシンプルになります。
C#はJavaより優れています。
これは、参照型(クラス)と値型(構造体)の両方のユーザー定義型をサポートします。これは、何をしているのかがわかっている場合に、パフォーマンスを大幅に向上させることができます。
単一メソッドインターフェイスのようなデリゲートをサポートしているため、単一メソッドオブジェクトを含む頻繁に発生する構造のコーディングを大幅に簡略化します。
予想される環境と専門知識に最適な言語を選択する必要があります。
Microsoftのみの環境で作業している場合は、C#を選択します。 C#はISO/IEC 23270:2003で標準化されていますが、Microsoftのバージョンが唯一の完全な実装のままです。言語のいくつかの重要な部分は標準でカバーされていないため、Microsoftの特許の対象となっています。他のシステム用に完全に互換性のあるバージョンの言語を他の人が実装することはないため、実際には、その言語を使用している限り、ベンダーはMicrosoft Windowsおよび.Netにロックされています。モバイル市場で使用するスキルを探している場合は、別の言語を探すのが最善です。
Javaは機能しますが、一部にはガベージコレクションなどの機能が原因で、かなりのオーバーヘッドがあります。 JavaもISO/IECで標準化されていないため、Javaのプラットフォームとバージョンを切り替えるかどうかは保証されません。Sun/ Oracleの最善の意図のみです。最終的にAndroidでの作業を計画している場合は、 Androidのプログラミングは基本的にJavaで、いくつかの変更点があります。
C++は標準化されており、ほとんどすべてのコンパイラは国際標準に準拠しているため、動作は保証されていますが、言語によって保護されるわけではありません。自分でクリーンアップとオーバーフローのチェックを実行する必要があります。これは難しいことではありません。 C/C++プログラマーは長年これらを行ってきました。 AppleはすべてにObjective Cを使用しているため、Appleを目指す場合は、代わりにこれを試すことをお勧めします。
ある時点でWindowsを置き去りにしているのに気づいたら、C/C++とJava-どちらも現時点では市場に出回っている)の両方を学ぶことをお勧めします。
C++とC#の比較(Javaで十分ではないため)では、Windowsで低レベルのものにアクセスする機能がありません。たとえば、C#では(まだ)ネイティブディスプレイドライバーを開発できませんが、C++では開発できます。これはC++をより良くするものではありません。 C++対C#は、アセンブリ対Cと見なされます。
実際に機能を実装するのにかかる時間を見ると、C#の方がはるかに効率的です。 .Netランタイムのパフォーマンスの低下は、開発されたアプリケーションの99%では無視できます。タイトなループを実行している場合、それは重要な場合があります。必ずそうですが、ほとんどの場合、アプリケーションはアイドル状態で、あらゆる種類の入力、信号、または割り込み(ディスクIO、ボタンのクリック、ネットワーク、アニメーションの完了)を待機しています。 。
彼のすべての機能を備えたCLRライブラリには、もう1つの大きな利点があります。ジュニア開発者にC#をトレーニングしていたとき、ほとんどの開発者は、クラス、メンバー、名前空間の論理的な命名規則が好きだと言っていました。メソッドの機能を見つけることはSDK全体で論理的であり、Visual Basic 5には深刻な欠陥がありました。これは彼らがライブラリを採用するのに非常に役立ちました。言語の構文を学習した後、新しいライブラリを学習することは、SDKをよく理解するために重要です。それはあなたが車輪を再発明することからあなたを救います。