C#は最近人気があるようです。構文的にはJavaとほぼ同じだと聞きました。JavaとC ++は長い間存在していました。JavaやC ++よりもC#を選択する理由は何ですか?
C#は最近人気があるようです。構文的にはJavaとほぼ同じだと聞きました。JavaとC ++は長い間存在していました。JavaやC ++よりもC#を選択する理由は何ですか?
回答:
質問は「どの言語が現代の典型的なアプリケーション開発により適しているか」でなければなりません。
編集:以下のコメントのいくつかに対処しました。ちょっとした発言:イディオムとしてネイティブにたくさんのものがあるとき、それを毎回自分で実装またはダウンロードして使用するよりも大きな違いだと考えてください。ほとんどすべての言語でこれらの言語を実装できます。問題は、言語がネイティブに提供するものです。
だから私の頭の上(いくつかの引数は両方の言語に適用されます)...
this
ポインター引数を無視する)ことができるため、クラス間のより動的で柔軟な関係を作成できます。これが何を意味するのかわからない場合は編集してから、void (*ptr)()
変数にvoidを返し、voidを受け入れるメンバーメソッドを割り当ててみてください。C#デリゲートはthis
ポインターを持ちますが、ユーザーは常にそれを気にする必要はありません。void()
クラスのメソッドを他のvoid()
デリゲートに割り当てることができます。using
ステートメント)をサポートします。Java 7もこれをサポートしますが、C#はずっと長い間サポートしていました。yield
ステートメントを使用した列挙サポートの改善。this
ポインタでフィールドにアクセスし、それを行うメソッドをジェネリック関数ポインタ(つまり、同じクラスにない)にバインドする必要がある場合、ネイティブな方法はありません。C#では、無料で入手できます。あなたはそれがどのように機能するかを知る必要さえありません。this
。メンバーメソッドには「秘密」にポインターが必要だからです。using
ステートメントは、明らかにIDisposableラッパーと共に、RAIIの優れた例です。このリンクを参照してください。GCを持っているので、C ++ほどCIIではRAIIを必要としないことを考慮してください。必要な特定の時間に、明示的にusing
ステートメントを使用できます。もう1つの注意点:メモリの解放は高価な手順です。GCには、多くの場合(特にメモリが多い場合)にパフォーマンス上の利点があります。メモリがリークすることはなく、割り当て解除に多くの時間を費やすこともありません。さらに、メモリは毎回割り当てられるわけではなく、たまにしか割り当てられないため、割り当ても高速になります。呼び出し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 Serverを使用するWindows中心の環境を使用している可能性があります。このような環境では、C#および.NET Frameworkで作成されたソリューションを統合および展開するのは簡単です。
個人的には、私はJava開発者であり、C#開発者ではありませんが、Webを使用しています。Windowsネットワーク用のネットワークアプリケーションを開発している場合は、C#に切り替えます。しかし、LinuxベースのWebサーバーにはJavaが好きです。組み込みシステムにC ++を選択するのは、あまり依存関係がないからです。
はい、C#はC ++やJavaよりも最新の機能を備えた優れた言語ですが、それはC#を選択するための最も重要なものではありません。
C#を選択するには、ソフトウェアの環境が最も重要です。Windowsクライアント、Windowsサーバー、Active Directory、IIS、およびおそらくSQL Serverを使用する環境で作業している場合、C#は.NET Frameworkで最も優れた言語です。
WebサービスなどのUnix環境で作業している場合、Javaが私の選択です。また、組み込みシステムを使用する場合、またはハードウェアデバイスと統合する必要がある場合は、C ++が適しています。
C#とJava
C#は、次の場合に非常に優れた言語です。
言語としてのC#は、さまざまな点でJavaより優れています(プロパティ、値の型、具体化されたジェネリックなどの構文が優れています)。私はJavaの言語として C#を好みますが、物事の大まかなスキームでは、C#は類似の言語であり、類似のアプリケーションに適しています。
一方、Javaにはいくつかの大きな利点もあります。
したがって、Java対C#は非常に密接な関係にあり、Microsoftキャンプに参加するか、オープンソース/クロスプラットフォームキャンプに参加するかによって決まります。
個人的に、私はJavaが好きです:
C / C ++
C / C ++は基本的にまったく別の獣です。私は考えていない次のような理由で、最近の汎用アプリケーション開発のためにそれをお勧めします。
ただし、特定の限られた数の特別なドメインでは間違いなく素晴らしい選択肢です。特に:
したがって、基本的に、C / C ++は、特に適しているドメインの1つに焦点を合わせている場合にのみ、素晴らしい選択です。
I heard that syntactically they are almost the same.
構文的に?誰がシンタックスについて空飛ぶ猿を与えますか?構文が唯一良いのは、構文的に類似した言語からより高速に移行できることです。それでおしまい。
C#はJavaよりもはるかに優れています。それらの汎用プログラミングおよび機能プログラミングのサポートを検討してください。C#はJavaよりもはるかに優れています。演算子のオーバーロード、およびその他の優れた機能は言うまでもありません。C#の方がはるかに優れています。JavaがC#よりも優れていると考えられる方法はありません。
C ++とC#はコンテストのようなものです。C ++には、非常に迷惑な古風なコンパイルモデルとCからの多くのレガシー疾患がありますが、テンプレートはジェネリックよりもはるかに強力であり、リソース管理アプローチは一般にusing
、完全な失敗と同様にはるかに柔軟で強力であり、実行されますもっと早く。
まあ、デリゲートのC#
ようないくつかの素晴らしい組み込み機能がLINQ
あります。これは、両方の世界から最高を得ている- Java
とC++
。完全な比較についてはこちらをご覧ください。
しかし、私はJava
世界のほうが好きです-オープンソースのフレームワークがはるかに多く、すべてのプラットフォームで動作します。そして、私に言わないでくださいMono
-それは信頼できるオプションではありません。
いくつかの情報源(例えば、http://www.indeed.com/jobtrendsを参照)によると、C#はまだJavaよりも人気が低く、C ++と同じくらい人気があります。
C#は、Javaにはない機能を提供します。たとえば、プロパティ、関数型プログラミングスタイルなどの特定のプログラミングイディオムを直接サポートします。C#の抽象化レベルはC ++よりも高いため、プログラム速度よりも開発時間が重要な場合に有利です。
個人的には、私はまだJava / C ++の世界を好みます。Petar Minchevが言ったように、Javaにはオープンソースのフレームワークとアプリケーションが多くあり、どこでも実行でき、特定のベンダーやオペレーティングシステムにあまり縛られていません。C ++には同様の利点がありますが、コードはしばしば1つのプラットフォームから別のプラットフォームへの適応を必要とします。私はLinuxでの開発を好み、私の知る限り、LinuxでC#を本格的に使用することはできないので、プログラミングのニーズはC、C ++、Java、Scalaでカバーされているため、C#に興味を持ちませんでした。
一方、多くの開発者にとって、特定のベンダーに縛られていることは問題ではありません。Microsoftはオペレーティングシステム市場で支配的な地位を占めており、C#は多くの雇用機会を提供します。したがって、IMOの多くの開発者はC#を採用しています。これは、機能が豊富な言語であるだけでなく、優れた投資でもあるためです。
「プログラミング言語を含むソフトウェア開発フレームワーク」の方が良いでしょうか?
作業する「環境」など、他のものを含めるのを忘れました。
Windows OSのみで動作しますが、低レベルである必要はなく、多くのメモリやその他のリソースがありますか?
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言語のいくつかの欠点を回避しました。Javaの進歩は、その利害関係者間の衝突によりかなりの期間ブロックされましたが、C#は(Microsoftが多くのコントロールを持っているので)多くの進歩を遂げました。
まだ言及されていないいくつかのこと:
次の理由により、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ライブラリには、別の大きな利点があります。私がジュニア開発者向けにC#をトレーニングしていたとき、そのほとんどがクラス、メンバー、名前空間の論理的な命名規則が好きだと言っていました。メソッドの機能を見つけることはSDK全体で論理的であり、Visual Basic 5には重大な欠陥がありました。これは、彼らが図書館を採用するのに非常に役立ちました。言語の構文を学習した後、新しいライブラリを学習することは、SDKを十分に理解する上で重要です。車輪の再発明からあなたを救います。