コーディングスタイル
UIngには、インターフェースを構築するための同等な2つの書き方があります。 どちらも同じコントロールを使用しており、1つのアプリケーション内で併用できます。
通常のAPI
通常のAPIは明示的で分かりやすい書き方です。このガイドでは主にこの形式を 使用します。
window = UIng::Window.new("Hello", 300, 200)
window.child = UIng::Label.new("Hello from UIng")
ブロックベースのDSL
ブロックベースのDSLでは、ネストしたレイアウトと実際のコントロール階層を 近い形で記述できます。
UIng::Window.new("Hello", 300, 200) {
child { UIng::Label.new("Hello from UIng") }
}
複雑な入れ子構造の例です。
UIng.init do
UIng::Window.new("Hello World", 300, 200) { |win|
on_closing { UIng.quit; true }
child {
UIng::Button.new("Click me") {
on_clicked {
win.msg_box("Info", "Button clicked!")
}
}
}
show
}
UIng.main
end
DSLはCrystalのwith ... yield構文を内部で使用しています。ブロック内では
コントロールのインスタンスをselfとしてメソッドを呼び出せるため、
window.child = ...のような代入の代わりにchild { ... }と書けます。
使い分け
- 通常のAPI: 構造が単純な場合や、コードの流れを明示的に追いたい場合に向きます。
- DSL: 入れ子の深いレイアウトを、実際の階層に近い形で書きたい場合に向きます。
どちらを選んでも生成されるコントロールは同じです。プロジェクト内で 統一しておけば、どちらを使っても問題ありません。