8-1.Dartで簡単なコンソールアプリケーションの作成: Todoリスト

1. プロジェクトの概要

このプロジェクトでは、Dartを使用して簡単なコンソールベースのTodoリストアプリケーションを作成します。このアプリケーションは、ユーザーがタスクを追加、表示、削除できる機能を提供します。

2. 基本的なプロジェクト構成

ファイル構成

プロジェクトの基本的なファイル構成は以下のようになります。

Dart
my_todo_app/
  ├── bin/
  │   └── main.dart
  ├── pubspec.yaml

pubspec.yaml

pubspec.yamlファイルは、プロジェクトの依存関係を管理するためのファイルです。ここでは特に追加のパッケージは必要ありませんが、以下のように記述します。

Dart
name: my_todo_app
description: A simple console-based Todo list application in Dart.
version: 0.0.1
environment:
  sdk: '>=2.12.0 <3.0.0'

3. main.dartの実装

Todoクラスの定義

まず、タスクを表すTodoクラスを定義します。このクラスには、タスクのタイトルと完了状態を持つプロパティがあります。

Dart
class Todo {
  String title;
  bool isCompleted;

  Todo(this.title, {this.isCompleted = false});

  @override
  String toString() {
    return '[${isCompleted ? 'x' : ' '}] $title';
  }
}

Todoリストの管理

次に、Todoリストを管理するための機能を追加します。タスクの追加、表示、削除を行うメソッドを実装します。

Dart
import 'dart:io';

class TodoApp {
  List<Todo> todos = [];

  void addTodo() {
    stdout.write('Enter a task: ');
    String title = stdin.readLineSync() ?? '';
    todos.add(Todo(title));
    print('Task added: $title');
  }

  void displayTodos() {
    if (todos.isEmpty) {
      print('No tasks available.');
    } else {
      print('Todo List:');
      for (int i = 0; i < todos.length; i++) {
        print('${i + 1}. ${todos[i]}');
      }
    }
  }

  void removeTodo() {
    displayTodos();
    if (todos.isNotEmpty) {
      stdout.write('Enter the number of the task to remove: ');
      int index = int.parse(stdin.readLineSync() ?? '0') - 1;
      if (index >= 0 && index < todos.length) {
        print('Task removed: ${todos[index].title}');
        todos.removeAt(index);
      } else {
        print('Invalid task number.');
      }
    }
  }

  void markTodoAsCompleted() {
    displayTodos();
    if (todos.isNotEmpty) {
      stdout.write('Enter the number of the task to mark as completed: ');
      int index = int.parse(stdin.readLineSync() ?? '0') - 1;
      if (index >= 0 && index < todos.length) {
        todos[index].isCompleted = true;
        print('Task marked as completed: ${todos[index].title}');
      } else {
        print('Invalid task number.');
      }
    }
  }
}

メインメニューの実装

ユーザーが操作できるメニューを作成します。ユーザーはタスクの追加、表示、削除、完了を選択できます。

Dart
void main() {
  TodoApp app = TodoApp();
  bool isRunning = true;

  while (isRunning) {
    print('''
1. Add a task
2. Display all tasks
3. Remove a task
4. Mark a task as completed
5. Exit
    ''');

    stdout.write('Choose an option: ');
    String? choice = stdin.readLineSync();

    switch (choice) {
      case '1':
        app.addTodo();
        break;
      case '2':
        app.displayTodos();
        break;
      case '3':
        app.removeTodo();
        break;
      case '4':
        app.markTodoAsCompleted();
        break;
      case '5':
        isRunning = false;
        print('Exiting the Todo app.');
        break;
      default:
        print('Invalid choice. Please try again.');
    }
  }
}

4. アプリケーションの実行

プロジェクトディレクトリに移動し、以下のコマンドを実行してアプリケーションを起動します。

Dart
dart run bin/main.dart

5. まとめ

この教科書では、Dartを使用して簡単なコンソールベースのTodoリストアプリケーションを作成する方法を学びました。主要な機能として、タスクの追加、表示、削除、および完了を実装しました。実際にコードを書いてみることで、Dartの基本的な構文や非同期プログラミングの概念を理解できるでしょう。

コメントを残す