Rust実践講座 20:卒業課題・借用と失敗を説明して改修する
この回では、既存のCLIへ新しい要求を実装し、型、所有権、テストの選択を説明します。前提は第19回までです。 卒業課題 タスク管理CLIへ検索と並び替えを追加してください。検索は題名の部分一致とし、大文字・小文字を区別する仕様から始めます。未完了だけを表示でき、表示順をID順または題名順で選べるようにします。存在するタスクの所有権を不要に奪わず、表示用の選択
12 件の記事
この回では、既存のCLIへ新しい要求を実装し、型、所有権、テストの選択を説明します。前提は第19回までです。 卒業課題 タスク管理CLIへ検索と並び替えを追加してください。検索は題名の部分一致とし、大文字・小文字を区別する仕様から始めます。未完了だけを表示でき、表示順をID順または題名順で選べるようにします。存在するタスクの所有権を不要に奪わず、表示用の選択
到達点は、保存を含む振る舞いを繰り返し検証し、実行物を渡せることです。前提は第17・18回です。 実際の保存境界を通す 次をsrc/main.rsの末尾へ追加します。既存のmainを置き換えず、テスト用モジュールを足してください。 コードブロック。 cargo testで二つのテストが成功します。tempdirでテストごとに別の領域を作り、終了時に片付けます
第17回のプロジェクトのCargo.tomlを次にします。tempfileは一時ファイルを安全に作り、保存先へ置き換えるために使います。 コードブロック。 src/main.rsを次にします。src/task.rsは前回のものを使います。 コードブロック。 cargo run -- tasks.json add "Rustを復習"、cargo run --
ここから保存できるタスク管理CLIを作ります。前提は第01〜16回です。Java・Python編と同じadd、list、doneを、RustのResultと所有権で実装します。 契約を先に決める IDは正のu64、題名は前後の空白を除いた1〜200 Unicodeスカラー値、完了状態はboolです。改行とタブは認めません。未完了を完了にし、すでに完了でも成功
この回では、動くコードへ要求を追加し、壊していないことを証明します。前提は第19回までです。 卒業課題 タスクにカテゴリを追加し、カテゴリ別の未完了件数を表示するstatsコマンドを作ってください。カテゴリの未指定はgeneralとします。空の一覧でもエラーにせず、件数が0であることが伝わる出力にします。旧バージョン1のJSONも読み、カテゴリを補って新形式
到達点は、別の環境でもインストールと検証ができる状態にすることです。前提は第17・18回です。 利用者のデータを使わず検証する 同じフォルダへtesttasks.pyを保存します。 コードブロック。 python -m unittest -v testtasks で二つのテストが成功します。途中のエラー表示は、失敗ケースを意図的に試したものです。テスト全体の
第17回のdomain.pyと同じフォルダにtasks.pyを作ります。保存失敗を成功に見せず、破損データを空として扱わない設計を実装します。 コードブロック。 python tasks.py add "Pythonを復習"、python tasks.py done 1、python tasks.py list の順で実行すると、ID1が完了状態で表示されま
ここから第19回で、JSONへ保存できるタスク管理CLIを作ります。前提は第01〜16回です。操作はadd、list、doneです。 型注釈の先にある検証 タスクは正の整数ID、1〜200コードポイントの題名、真偽の完了状態を持ちます。題名の前後の空白を除き、改行とタブは認めません。doneを二度実行しても完了状態を保ち、存在しないIDはエラーとします。同時
この回は新しい構文を暗記する回ではありません。第19回までの知識を使い、要求を整理して改修し、結果を検証します。 卒業課題 タスク管理CLIへ期限と絞り込みを追加してください。期限は任意の年月日、期限なしも認めます。未完了だけ、期限切れだけの一覧を表示できるようにします。「期限切れ」は、指定した基準日より期限が前で、かつ未完了のものと定義します。当日を含めな
到達点は、「手元で一度動いた」を、繰り返し確かめられる状態にすることです。前提は第17・18回です。 保存を含む契約を確かめる 次のTaskAppTest.javaを同じフォルダへ保存します。外部ライブラリなしで実行できる小さなテストです。大きく育てるなら第11回のJUnitへ移します。 コードブロック。 javac -encoding UTF-8 Task
第17回のTask.javaと同じフォルダに、次のTaskApp.javaを保存します。長い例ですが、読み込み、保存、操作の三つに分けて追ってください。 コードブロック。 javac -encoding UTF-8 Task.java TaskApp.java でコンパイルします。続いて java TaskApp tasks.tsv add "Javaを復習
ここから第19回までで、保存できるタスク管理CLIを完成させます。前提は第01〜16回です。CLIはコマンドラインから操作するプログラムです。 作るものを小さく確定する 操作はadd、list、doneの三つです。タスクは正のID、空でない題名、完了状態を持ちます。完了済みを再び完了にしても成功し、存在しないIDはエラーにします。保存ファイルがなければ空から