GUI部品で悩む

葵ですが、またまた悩んでいます。今度は、GUI部品をどう扱うようにしたら良いかということです。
なでしこ式にすると、オブジェクト指向を導入しなければなりません。葵では、オブジェクト指向は使わないというスタンスです。そして、とにかく単純にしたいというのが理想です。

先日まで関数的にオブジェクトを扱えるようにしようと思っていたのですが、イマイチです。これは、Windowsでハンドルを用いてオブジェクトを操作するのに近い感覚です。

# GUI操作のイマイチな案
Aボタンを「ボタン」として作る。
Aボタンの「X」を20に設定。
Aボタンの「Y」を10に設定。
Aボタンの「イベント」を「ボタンクリック」に設定。
●ボタンクリック
  「クリックされました」と言う。

HSPではどうなっているのか調べてみました。一見すると、実に簡潔。

  pos 20,10
  button "Aボタン", *btnclick
  stop
*btnclick
  print "click!"

次に、Tcl/Tkの場合。コマンドラインからコマンドを入力するみたいな感じ。

button .b1 -fg blue -activebackground blue \
      -text "青" -command { . configure -bg blue }

それから、Perl/Tkの場合。やっぱりGUIに関しては、オブジェクト指向の方が断然使い勝手が良い気がする。

use Tk;
$top = MainWindow->new();
$button = $top->Button( -text => 'Perl/Tk button 1' );
$button->pack();

なでしこなら以下の感じ。やはりGUI操作はオブジェクト指向の方が良いに決まってます。

Aボタンとはボタン。
AボタンのX=10
AボタンのY=10
Aボタンをクリックした時は〜
  「クリック」と言う

そこで、Perl/Tkのようにハッシュを利用してGUI操作を行う案はどうか考えてみました。しかし、記号を使うと途端に日本語に見えなくなるのが欠点です。

# --- ハッシュを使ったボタン操作案
# ハッシュに項目を設定
Aボタン={種類:ボタン, テキスト:「右移動」, X:10, Y:10, イベント:右移動処理}
Aボタンを作る
●右移動処理
  Aボタン["X"]=A["X"]+10
  Aボタンを更新。

ひまわりを作ったときには、オブジェクト指向ではなかったのですが、GUIをエレガントに扱えました。これは、いちいちオブジェクト型を定義しておいてオブジェクト型に対する操作を常にチェックしてGUI操作を実現したもので、汎用性が低いものの、それなりに機能していました。(とにかく機能の拡張を行うのが非常に大変でした。コアな部分にいくつも手を加えないといけなかったので。)

Aボタンを作る。
AボタンのX=10
AボタンのY=20
Aボタンのイベントは(
  AボタンのX=AボタンのX+10
)

もう少し考えてみます...