2011年3月13日日曜日

JavaプログラマーからみたVala (1) ソースコード

最近なにかの拍子にVala言語に興味を持ってしまいました。Web上のドキュメントは限られているものの、Java言語との比較など平易なドキュメントもありましたので、学習をかねて稚拙な翻訳を載せていこうと思います。

原典は、“Vala for Java Programmers”(2011年3月13日取得)です。

******************************

JavaプログラマーからみたVala (1)

ソースファイル

Javaの場合: *.java

Valaの場合: *.vala

コンパイル

Javaの場合: JVMバイトコード(.classファイル)にコンパイルされます。
$ javac SourceFile1.java SourceFile2.java 
Valaの場合: C言語ソースコードに翻訳されたのち、ネイティブコードにコンパイルされます。
$ valac source1.vala source2.vala -o program 
Vala言語における標準オブジェクトシステムはGOjectであり、コンパイルされたValaライブラリは、有効なC言語ライブラリとなります。

ライブラリの使用

Javaの場合: .jarファイルを指定します。
$ javac -classpath foo-1.0.jar;bar-3.0.jar SourceFile.java 
Valaの場合: パッケージを指定します(.vapiファイルを介してCライブラリにアクセスします)
$ valac --pkg foo-1.0 --pkg bar-3.0 source.vala

Javaの場合:
  • クラス、インターフェース、列挙型: キャメルケース(パスカルケース)。
  • メソッド、ローカル変数、フィールド: ローワーキャメルケース。
  • 定数、列挙型インスタンス(enum values): アッパーケース(アンダーバーで結合)。
Valaの場合:
  • クラス、インターフェース、構造体、列挙型、デリゲート型、名前空間: キャメルケース(パスカルケース)。
  • メソッド、ローカル変数、フィールド、プロパティ、シグナル: ローワーケース(アンダーバーで結合)。
  • 定数、列挙型インスタンス: アッパーケース(アンダーバーで結合)。
名前にASCII文字以外の文字を使用することはできません。@を接頭辞として添えることで、名前にVala言語キーワード(予約語)を使用できます。この場合、@文字はそれを添えられた名前の一部としては認識されません。

ソースコードの組織化

ソースコード・ファイルについて

Javaの場合: 1つのファイルにつき、トップレベルのクラス(toplevel class。内部クラスでなく、パブリックなもの)は1つだけです。ファイル名はクラス名と一致します。

Valaの場合: 1つのファイルには複数のクラスを記述できます。ファイル名はクラス名と一致している必要はありません。

ヒエラルキーについて

Javaの場合: パッケージ概念があります。パッケージはディレクトリ構造によりあらわされます。またドメイン名を反転させた書式で構造化されます。
import javax.swing.*;

package org.foo.bar;

// ...
Valaの場合: 名前空間(namespaces)があります。ディレクトリ構造とは関係ありません。反転ドメイン名書式もとりません。
using Gtk;

namespace Foo.Bar {
    // ...
}
Valaの名前空間内には、所属クラスのないメソッドも存在します。これらは暗黙の静的メンバー(implicitly static)です。

デフォルトで読み込まれる名前空間について

Javaの場合: java.langパッケージ配下のクラスがデフォルトで読み込まれています。

Valaの場合: Glib名前空間がデフォルトで読み込まれています。

エントリーポイント

Javaの場合: public static void main(String[] args)

Valaの場合:  static int main (string[] args)

mainメソッドは、クラス外部で定義されても、privateアクセス修飾子が添えられていても、あるいは終了コード(exit code)としてintを返してもよいのです。その上argsはオプションです。

******************************

JavaプログラマーからみたVala (2)につづく──

0 件のコメント: