この回は新しい構文を暗記する回ではありません。第19回までの知識を使い、要求を整理して改修し、結果を検証します。
卒業課題
タスク管理CLIへ期限と絞り込みを追加してください。期限は任意の年月日、期限なしも認めます。未完了だけ、期限切れだけの一覧を表示できるようにします。「期限切れ」は、指定した基準日より期限が前で、かつ未完了のものと定義します。当日を含めない点が境界です。
古いTSVファイルも読めるようにします。期限列を足しただけで旧データが壊れないよう、バージョン付き形式への移行か、旧形式からの明示的な変換を設計してください。いきなり本物のデータで試さず、複製した教材データで検証します。
解答へ至る設計例
Taskに期限を表す値を加え、LocalDateで扱います。現在日時を業務ロジックの中で直接取得せず、基準日を引数で渡します。期限切れ判定はファイル操作のない関数にします。CLIは文字列を日付へ変換し、不正な日付を利用者向けエラーへ変えます。保存形式の変換はモデルの業務ルールと分けます。
テストには、期限なし、前日、当日、翌日、完了済み、うるう日、不正な日付を含めます。基準日を固定すれば、実行する日によって結果が変わりません。旧形式を読み込んだ結果と、変換後に再読込した結果の意味が同じことも確認します。
自分で判定する合格基準
次の六項目を、コードと説明で示してください。
- 空入力と境界値を含む仕様を文章にできる。
- List、Set、Mapの選択理由と大まかな計算量を説明できる。
- 例外を握りつぶさず、失敗した更新で元データを壊さない。
- 入出力から業務判断を分け、ネットワークなしでテストできる。
- 再現手順、テスト、ビルド手順を別の人が実行できる。
- 同時更新や耐久性など、今の実装が保証していない範囲を説明できる。
すべてを暗記する必要はありません。資料を調べながらこの六項目を満たせれば、小さなアプリの変更を自力で進める土台があります。記事を読んだだけで到達を保証するものではないため、実際の改修を学習の仕上げにしてください。
次に深める方向
サーバー開発ならHTTP API、認証と認可、DBマイグレーション、トランザクションを学びます。性能ならJVM、GC、JFR、JMHへ進みます。チーム開発ならGitの差分、レビュー、CI、依存の更新を扱います。フレームワークへ進むときも、今回作った境界がどこへ移るのかを対応させると理解できます。
公式資料
Java学習の全体目次を、必要な分野へ進む入口にしてください。