Todo アプリケーション
NagiScript で Todo アプリケーションを開発するチュートリアルです。
現行仕様(v0.2.0)
この例は現行仕様の構文(print / println、string 型、-> と明示 return、while、裸の列挙バリアントの match)で書かれており、文法としては現行コンパイラー v0.2.0 で動作する形です。import / std:args / std:fs は使えないため、ここではメモリ上だけの簡易ロジックとして構成しています。
概要
このチュートリアルでは、NagiScript で簡単な Todo アプリケーションを作成します。
- Todo の追加、削除、一覧表示
- 単一ファイル・単一構造体による表現
- 固定長配列
[Todo; N]によるリスト表現
実装(単一ファイル)
main.ngs
struct Todo {
id: i32
title: string
completed: bool
}
struct TodoList {
items: [Todo; 100]
count: i32
}
fn new_list() -> TodoList {
return TodoList {
items: [Todo { id: 0, title: "", completed: false }; 100],
count: 0
}
}
fn add_todo(list: &TodoList, title: string) {
if list.count < 100 {
list.items[list.count] = Todo { id: list.count + 1, title: title, completed: false }
list.count = list.count + 1
}
}
fn list_todos(list: &TodoList) {
var i = 0
while i < list.count {
val t = list.items[i]
var line = ""
if t.completed {
line = "[x] "
} else {
line = "[ ] "
}
println(line)
println(t.title)
i = i + 1
}
}
ロードマップ
上記の可変参照 &TodoList による書き換えは、現行では参照の変更が不安定な場合があります。より確実なのは値渡しで構造体を返す「純関数」スタイルです(下記の main 例はその方針)。
main.ngs — メインプログラム
main.ngs
struct Todo {
id: i32
title: string
completed: bool
}
fn main() {
// 値渡し・純関数スタイル(現行で確実な方法)
val t1 = Todo { id: 1, title: "Buy groceries", completed: false }
val t2 = Todo { id: 2, title: "Write docs", completed: true }
println(t1.title)
println(t2.title)
var found = false
if t1.id == 2 {
found = true
} else {
found = false
}
println(found)
}
ロードマップ
コマンドライン引数(--command 等)の取得、ファイル保存(std:fs)、動的な List は現行では未実装です。完全な対話型 Todo ツールは将来仕様となります。
実行例
bash
# ビルドと実行
nagiscript build main.ngs -o todo
./todo
# 出力例
Buy groceries
Write docs
false
学べること
- 構造体: 複数のフィールドをまとめて表現
- 固定長配列:
[Todo; N]によるデータの保持 - 制御構文:
if/whileの使用 - 明示 return:
->型注釈とreturn
