Skip to content
ccckmit edited this page Dec 4, 2024 · 1 revision

以下是 第13章:綜合實例:從零構建函數式項目 的內容草稿:


第13章:綜合實例:從零構建函數式項目

在本章中,我們將綜合應用之前所學的函數式編程概念,從需求分析開始,逐步構建一個完整的函數式項目。這個過程將幫助讀者理解如何將函數式編程的原則應用到實際開發中,並實現一個可用的應用程式。

13.1 需求分析

我們將構建一個簡單的任務管理應用,該應用允許用戶創建、查看和完成任務。這個應用的主要功能包括:

  • 創建任務:用戶可以添加新任務。
  • 查看任務:用戶可以查看所有任務及其狀態(待完成、已完成)。
  • 完成任務:用戶可以標記任務為已完成。

為了更好地實現這些功能,我們將使用函數式編程的概念來設計代碼結構。

13.2 設計數據結構

首先,我們需要設計一個數據結構來存儲任務。每個任務可以表示為一個字典,包含任務的名稱和狀態(待完成或已完成)。我們將使用不可變數據結構來確保任務數據的安全性。

from typing import NamedTuple, List

class Task(NamedTuple):
    name: str
    completed: bool

tasks: List[Task] = []

13.3 實現功能

接下來,我們將逐步實現各個功能。每個功能都將使用純函數來處理數據,確保沒有副作用。

13.3.1 創建任務

創建任務的功能將接收任務名稱並返回一個新的任務列表,將新任務添加到現有任務中。

def create_task(task_name: str, tasks: List[Task]) -> List[Task]:
    new_task = Task(name=task_name, completed=False)
    return tasks + [new_task]
13.3.2 查看任務

查看任務的功能將返回所有任務的列表,並根據任務的狀態進行顯示。

def view_tasks(tasks: List[Task]) -> None:
    for task in tasks:
        status = "✔️" if task.completed else "❌"
        print(f"{task.name} - {status}")
13.3.3 完成任務

完成任務的功能將根據任務名稱更新任務狀態。這裡我們將使用高階函數來更新任務列表。

def complete_task(task_name: str, tasks: List[Task]) -> List[Task]:
    return [
        task._replace(completed=True) if task.name == task_name else task
        for task in tasks
    ]

13.4 主程序

現在我們已經實現了所有必要的功能,接下來我們將編寫一個簡單的主程序,讓用戶可以互動式地使用這個任務管理應用。

def main():
    global tasks
    while True:
        action = input("請選擇操作(創建/查看/完成/退出):")
        
        if action == "創建":
            task_name = input("請輸入任務名稱:")
            tasks = create_task(task_name, tasks)
        
        elif action == "查看":
            view_tasks(tasks)
        
        elif action == "完成":
            task_name = input("請輸入已完成任務的名稱:")
            tasks = complete_task(task_name, tasks)
        
        elif action == "退出":
            break
        
        else:
            print("無效操作,請重新選擇。")

if __name__ == "__main__":
    main()

13.5 測試與優化

在實際項目中,測試是非常重要的一步。我們可以為每個功能編寫單元測試,以確保代碼的正確性。同時,根據用戶反饋持續優化應用的性能和使用體驗。

13.5.1 單元測試示例

使用 Python 的 unittest 模塊來測試我們的功能。

import unittest

class TestTaskManager(unittest.TestCase):

    def setUp(self):
        self.tasks = []

    def test_create_task(self):
        self.tasks = create_task("測試任務", self.tasks)
        self.assertEqual(len(self.tasks), 1)
        self.assertEqual(self.tasks[0].name, "測試任務")

    def test_complete_task(self):
        self.tasks = create_task("測試任務", self.tasks)
        self.tasks = complete_task("測試任務", self.tasks)
        self.assertTrue(self.tasks[0].completed)

if __name__ == "__main__":
    unittest.main()

13.6 小結

本章通過一個綜合實例,展示了如何從需求分析開始,逐步構建一個函數式項目。在這個過程中,我們運用了多個函數式編程的概念,包括純函數、不可變數據結構以及高階函數等。希望這個示例能幫助讀者理解如何在實際項目中應用函數式編程的原則,提升代碼的可維護性和可讀性。


這是第13章的內容草稿。如果有任何建議或需要調整的地方,請隨時告訴我!

Clone this wiki locally