GUIプログラミングの練習課題
以下、抜粋。
「同じ課題を複数GUIで作る → 差分を見る」は、単なる練習を超えて設計の比較実験になります。
あなたのこれまでの流れ(REPL志向・構造への関心・命名感覚)を踏まえて、
「GUIアプリの型」+「比較で見えるポイント」付きの15課題として整理しました。
🧭 比較しやすいGUI課題 15選(学習テーマ付き)
① イベント駆動の最小単位
1. Counter(ボタン + ラベル)
- 学べること
- イベントハンドリング(callback / delegate / block)
- 状態の持ち方(グローバル vs オブジェクト vs クロージャ)
- 比較ポイント
- FLTK / wxWidgets:コールバック主体
- GNUstep:target-action
- Pharo / Squeak:メッセージ送信 + イメージ状態
2. Digital Clock(タイマー)
- 学べること
- タイマー / イベントループ
- UI更新のタイミング
- 比較ポイント
- 「タイマーは誰の責務か」
- UIスレッドの扱い(意識するかしないか)
② 入力とバリデーション
3. BMI計算機(フォーム入力)
- 学べること
- 入力検証(数値変換、エラー処理)
- UIとロジックの分離
- 比較ポイント
- MVCっぽさ(特にGNUstep / Smalltalk系)
- 例外 vs Option的処理
4. Loginフォーム(ローカル認証)
- 学べること
- 状態遷移(未ログイン → ログイン済み)
- 入力フィードバック
- 比較ポイント
- 状態管理の書き方
- Viewの再構築 vs 状態更新
③ 一覧管理(CRUDの核心)
5. To-Doリスト(追加・削除・完了)
- 学べること
- リスト表示
- 状態更新
- 簡単な永続化(ファイルでもOK)
- 比較ポイント
- データ構造とUIの同期方法
- 「モデルが主かUIが主か」
6. Address Book(複数フィールド + 編集)
- 学べること
- 複雑なフォーム
- 編集・更新フロー
- 比較ポイント
- オブジェクト指向的モデリング(GNUstep強い)
- Smalltalkのライブオブジェクト操作
7. Notes + Search(検索付きメモ)
- 学べること
- フィルタリング
- 検索UI
- 比較ポイント
- 再描画の戦略
- 「状態からビューを生成する」 vs 「直接操作」
④ ドキュメント編集
8. Mini Text Editor
- 学べること
- テキスト編集
- ファイル読み書き
- Undo/Redo(簡易でもOK)
- 比較ポイント
- ウィジェットの責務の大きさ
- フレームワーク依存度
9. Log Viewer(大きいテキスト + 更新)
- 学べること
- 大量データ表示
- スクロール制御
- 比較ポイント
- パフォーマンス意識の差
- ストリーム的処理のしやすさ
⑤ ファイル・システム系
10. File Browser
- 学べること
- ディレクトリ構造
- ツリー表示
- 比較ポイント
- OSとの統合度
- 標準コンポーネントの強さ
11. Image Viewer
- 学べること
- 外部リソース表示
- スケーリング・再描画
- 比較ポイント
- 描画APIの違い
- 「ウィジェットに任せるか、自分で描くか」
⑥ 非同期・外部データ
12. Simple HTTP Client(GET表示)
- 学べること
- 非同期処理
- ローディング状態
- 比較ポイント
- イベントループとの統合
- Smalltalk系のライブ更新の自然さ
13. Dictionary(API or ローカルDB)
- 学べること
- 検索 + 結果表示
- キャッシュ
- 比較ポイント
- データフロー設計
- UI更新タイミング
⑦ 時間と状態の複合
14. Pomodoro Timer(複数状態)
- 学べること
- 状態機械(作業・休憩)
- タイマー + UI
- 比較ポイント
- 状態遷移の表現方法
- オブジェクト vs 関数的状態
⑧ 描画・ゲームループ
15. Snake(ゲームループ)
- 学べること
- 継続更新
- 入力 + 描画
- 比較ポイント
- GUIフレームワークでの「ゲームっぽさ」の限界
- 再描画戦略
🧪 使い方(ここが一番重要)
このリストは「全部作る」よりもこう使うのがおすすめです:
▶ 同じ課題を横断する
例:
- Counter → 全環境で作る
- To-Do → 全環境で作る
- Text Editor → 全環境で作る
👉 差分を見る
▶ 比較メモを取る(かなり効きます)
各課題ごとに:
- イベントの書き方
- 状態の持ち方
- UI更新の方法
- 「どこが気持ちいいか / 気持ち悪いか」
これを残すと、かなり深い理解になります。
▶ あなた向けの視点(かなり重要)
これ、かなりハマると思うのですが:
- Pharo / Squeak
- 状態 = イメージそのもの
- REPL的
- GNUstep
- Smalltalk思想の「静的化」
- FLTK / wxWidgets
- 明示的イベント駆動
- C++的構造
👉 つまり
同じ「Counter」でも
「世界の見え方」が違う