私はC/C++とPythonを使用してきましたが、今では多くの新しいプログラミング本でJavaまたはC#を例として使用しています。
とりあえずJavaまたはC#を使用するつもりはありませんが、言語の1つ(または両方)を読んで理解するには、本。
一度にいくつかの質問をしています。個別に対処させてください。
JavaとC#?
C#とJavaは、C/C++(およびObjective C、およびその他)から構文を定義するために作成されました。両方とも中間言語にコンパイルされます。
この共通のOriginは、多くのレベルで言語lookを類似させており、初心者がどちらかの言語のコードを他の言語と混同する可能性があります。また、ランタイム環境を多少比較可能にします。ただし、両方の設計原則と各言語の進化方法にはかなりの違いがあり、それぞれがまったく異なるものになります。最も顕著なものは次のとおりです。
構文レベルでは、JavaはSmalltalkの影響を受けましたが、C#はC/C++に近づこうとしました(例:Javaのextends
およびimplements
とC#の比較:
表記法)そして、VB= C/C++にマッピングできなかった概念に基づいてvagueインスピレーションを受けました。 (例:プロパティの構文)。
機能レベルでは、C#1は間違いなくJavaに近かった。それらのわずかな違いの中で、「安全でない」コード(ポインターを含む)およびデリゲートに対するC#のサポートを強調します。そして、Javaの物議を醸すthrows
。これは理にかなっています。C#の目標の1つはJavaの代替になることでした。
多くの言語機能は、実装の詳細が大きく異なります。たとえば、列挙型はC#では非常にC'ishですが、Javaでは完全なオブジェクトです。またはジェネリックはC#のILレベルで実装されますが、Javaは型消去を介して処理されます(どちらも構文以外はC++のテンプレートに実際に近いものではありません)。
APIレベルでは、それらは別々の世界です。 C#は、MicrosoftのVisual Studioファミリ製品の経験に基づいて構築された(したがって、大幅にWindows指向である).Net Frameworkに依存していますが、JavaのクラスライブラリはIIRCをゼロから構築し、時間の経過とともに大きく進化しました(このSwingの時代、誰もがAWTを覚えていますか?.
最後に、各言語には独自のイディオムと、その背後にある支持者のコミュニティがあることに言及する価値があります。
Javaを学習する場合、C#の学習はほぼ無料ですか?またはその逆?
どちらでもない。重要な類似点は基本的な構文(セミコロン、中括弧、配列のインデックス付け、大文字と小文字の区別など)であり、すでにC/C++から取得しています。
2つの言語のうち1つだけを選択する必要がある場合、どちらが良いでしょうか?
簡単な答え:コインを投げます。長い答え:コーディングスタイルと、言語のどの側面を最も重視するかに依存します。言語の1つが他の言語よりもあなたを強く引き付けると感じるまで、両方を学ぶことから始めることをお勧めします。
または、 http://en.wikipedia.org/wiki/Comparison_of_Java_and_C_Sharp をご覧ください。
プログラミング言語の観点でより広い範囲をカバーしているのはどれですか?
あなたが言語の組み込み機能を意味するなら、私はC#が狭いマージンで勝つと言うでしょう。 C#のほとんどの機能とJavaの欠如は構文シュガーです(これらは一緒になって、学習曲線と言語の使用方法に大きな違いをもたらします)。私は本当に高いC#の演算子を大切にしています)また、LINQは非常に興味深い概念ですが、本質的にはループの宣言構文です。
お役に立てれば。
詳細な比較があります:
イギリスのコンピューターサイエンスの学位を取得したばかりで、JavaではなくC#を教える大学を選択しました.........理由があるので、ソフトウェア開発者として高い給料の仕事に簡単に足を踏み入れることができました「新しい」テクノロジーを知っている人だけが必要な会社に。
これらは、投資銀行、新興企業、ITコンサルティング会社などの企業です。
最終目標について考えてみてください.....それが現金であり、最新の知識であれば... C#に従ってください。
....そしてそれが何か他のものなら、C#に従ってください
追伸Javaはひどい-私はそれを言わなければならなかった。
ライブラリは非常に異なり、ドキュメント化のアプローチは非常に異なります。私はC#のアプローチが簡単だと感じています。
私の言いたいことを説明するために、どちらの言語でも、「オブジェクト」から「汎用オブジェクト」から「特定のオブジェクト」に継承することで、処理したいオブジェクトを実装できます。 Javaでは、「ジェネリックオブジェクト」のプロパティを調べるには、そのドキュメントに移動する必要がありますが、C#ドキュメントでは、「特定のオブジェクト」のすべてのプロパティが一覧表示されます。
少なくともそれは、数年前に私がJavaをやったときのことです。
C#1.0以降の1:1マッピングではありません。 C#には、Javaに類似していないもの(LINQ、クロージャなど)が多数追加されています。