コンテンツにスキップ

Vala

出典: フリー教科書『ウィキブックス(Wikibooks)』

Valaは、GNOMEプロジェクト向けに開発された、C言語へのコンパイルを特徴とする高水準プログラミング言語です。本ハンドブックでは、Valaの基本文法から、GObjectの利用方法、GNOMEアプリケーション開発の基礎までを解説します。

対象読者

[編集]
  • プログラミング経験のある初学者
  • GNOMEアプリケーション開発に興味があるプログラマー
  • GObjectやGLibを活用した効率的なプログラム開発に関心がある方

目次

[編集]
  1. Valaとは
  2. Valaの環境構築
  3. 基本文法
  4. GObjectとクラスの作成
  5. GTKを用いたGUI開発
  6. 非同期プログラミング
  7. 演習問題
  8. 参考文献

Valaとは

[編集]

Valaは、以下の特徴を持つプログラミング言語です:

  • 高水準な文法: C#やJavaに似たシンプルな文法
  • GObjectを基盤: オブジェクト指向プログラミングを完全サポート
  • C言語へのコンパイル: 高速かつ軽量なバイナリを生成
  • GTKサポート: GUIアプリケーション開発に適したツール

Valaの環境構築

[編集]

Valaを使用するには、以下のツールをインストールする必要があります:

必要なソフトウェア

[編集]
  • Valaコンパイラ (valac)
  • GLibおよびGTKライブラリ

インストール手順

[編集]

Ubuntuの場合

[編集]
# apt update
# apt install valac libglib2.0-dev libgtk-3-dev

FreeBSDの場合

[編集]
# pkg install vala glib gtk3

基本文法

[編集]

Hello, World

[編集]

以下は、Valaで「Hello, World」を表示する最小限のプログラムです:

void main() {
    print("Hello, World\n");
}

コンパイルと実行:

$ valac hello.vala
$ ./hello

データ型

[編集]

Valaには以下の主要なデータ型があります:

  • int (整数)
  • double (浮動小数点)
  • string (文字列)
  • bool (真偽値)

例:

int number = 42;
double pi = 3.14;
string message = "Valaは楽しい!";
bool is_valid = true;

条件分岐とループ

[編集]

条件分岐とループ構文は以下のように記述します:

// 条件分岐
if (number > 10) {
    print("10より大きい\n");
} else {
    print("10以下\n");
}

// ループ
for (int i = 0; i < 5; i++) {
    print("i = %d\n", i);
}

GObjectとクラスの作成

[編集]

クラスの定義

[編集]

以下はGObjectを利用したクラスの定義例です:

class MyClass : Object {
    public string name { get; set; }

    public MyClass(string name) {
        this.name = name;
    }

    public void greet() {
        print("こんにちは、%sさん!\n", name);
    }
}

void main() {
    var obj = new MyClass("Vala");
    obj.greet();
}

GTKを用いたGUI開発

[編集]

最小限のGTKアプリ

[編集]

以下は、GTKを使用した最小限のGUIアプリケーションです:

using Gtk;

void main(string[] args) {
    Gtk.init(ref args);

    var window = new Window();
    window.title = "Vala GTKアプリ";
    window.border_width = 10;
    window.set_default_size(400, 300);

    window.destroy.connect(Gtk.main_quit);

    window.show_all();
    Gtk.main();
}

コンパイル:

$ valac --pkg gtk+-3.0 gtk_app.vala
$ ./gtk_app

非同期プログラミング

[編集]

Valaでは、非同期処理を簡単に記述できます。以下は非同期関数の例です:

async void do_task() {
    print("タスク開始\n");
    yield GLib.Timeout.add_seconds(2, () => {
        print("タスク完了\n");
        return false;
    });
}

void main() {
    do_task.begin();
    print("メイン関数内の処理\n");
    Gtk.main();
}

演習問題

[編集]

問題1: クラスを作成

[編集]

「名前」と「年齢」を保持するクラスを作成し、自己紹介を出力するメソッドを追加してください。

問題2: GTKでボタンを追加

[編集]

GTKアプリケーションにボタンを追加し、クリック時に「ボタンがクリックされました」と出力してください。

参考文献

[編集]