Java言語はオブジェクト指向言語としてサン・マイクロシステムズ(現オラクル)が開発したプログラミング言語です。一方、.NETに対応したVisual Studioでは、以下のプログラミング言語がサポートされています。
ほかにも.NET Frameworkでは、プレゼンテーションプラットフォームのWPFのUI要素や、Silverlightで画面に表示する図や画像などのUI情報は「XAML」と呼ばれるXMLベースのマークアップ言語が用いられています。
本稿では、Javaと比較する言語として.NETプラットフォーム向けに、新たに開発されたオブジェクト指向言語である「C#」をメインに取り上げます。まずは、それぞれの言語で「Hello World」プログラムを実装してみます。
上記ソースから以下のような特徴が挙げられます。
実際には、クラス以外にもinterfaceやenumなどのトップレベル概念がありますが、JavaもC#も基本はクラスがプログラム構成のメインです。
JavaもC#も「{ }」でクラスやメソッドの始まりと終わりを示し、「;」(セミコロンを文の区切りに使用します。メソッドの呼び出しは「オブジェクト.メソッド名(引数)」で行っています。これらの基本構文は同じです。
JavaもC#も宣言と実装が同じファイルです。ただしC#の場合は、partial修飾子を付与したパーシャルクラスを使用することで複数ファイルに分割可能です。さらに、パーシャルクラス内限定で同様にpartial修飾子をメソッドに宣言することでメソッドの宣言と定義の分割も可能です。
実行の開始はクラスの大文字/小文字の違いはあれ、JavaもC#もmain/Mainメソッドから開始されます。
以下は、C#の修飾子とJavaの修飾子です。
表3 C#とJavaの修飾子 | |||||||||||||||||||||
|
JavaでもC#でも、違いがないのは、public修飾子とprivate修飾子のみです。
C#の変数の型は「値型」「参照型」の2つに分類されます。
C#には、decimal型という値型があります。10進数で28けたを正確に保持できます。ほかにもC#は値型と参照型はすべて「object」と呼ばれるクラスから派生しています。そのため、intのリテラルもそのままコレクションに入れることができます。
Javaの場合も、JDK 5.0からボクシング・アンボクシング機能が追加され同様のことができます。
C#もJavaと同様に、完全修飾名を指定すると名前空間(Javaでいうパッケージ)のusing参照を使わずに、.NET Framework内のクラスにもユーザー定義の名前空間のクラスにもアクセスできます。完全修飾名は非常に長くなることがありますが、そのような場合にC#では、「usingディレクティブ」というものが用意されています。usingを使用すると最初の「HelloWorld.cs」は以下のように実装できます。
using System; public class HelloWorld { public static void Main() { Console.WriteLine("Hello World"); } }
これにより、名前空間内にあるクラスを修飾名なしで使用できます。usingを使用して短い名前(エイリアス)も指定もできます。
using Project = Sample.Test.Project;
public struct Point { public int x, y; }
C#独自の型でJavaには存在しません。構造体(struct)は値型として扱われます。そのため、classを使うよりもメモリ効率が良く、特に大量のオブジェクトを生成する場合などに利用されます。
Javaではsynchronizedを使用しますが、C#ではlockキーワードで同様の機能を実現しています。C#では.NET Framework 4から追加されたTask Parallel LibraryやParallel LINQの並列処理拡張を使用した並列プログラミングも可能です。
C#では、C言語などの既存のプログラミング言語との相互運用のために「unsafe」キーワードを使用して、制限されているポインタなどの低レベル機能を利用できます。Javaではネイティブコードを呼び出す場合、JNI(Java Native Interface)やJNAを使う必要があります。
ほかにもJava独自の機能、C#独自機能があります。C#は後発の言語だけにJavaの周辺仕様をうまく取り入れた言語といえます。2001年以降はバージョンアップする中で多くの機能が共通になってきました。ジェネリック、foreachループ、列挙、ボックス化、可変長パラメータリスト、メタデータ注釈など該当します。
しかし、近年のC#は、独自の機能がどんどん増えています。C# 3.0では、データベースやXML操作を行うための記述をプログラミング言語に埋め込めるLINQ(Language Integrated Query:言語統合クエリ)や、関数型言語で使用されているラムダ式が追加されました。C# 4.0では、動的言語ランタイム(DLR)によって動的プログラミングがサポートされました。
Copyright © ITmedia, Inc. All Rights Reserved.