M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

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

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

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

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

ソースファイル

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)につづく──