Xác định đầu vào, đầu ra, và các trường hợp biên
Một nhiệm vụ chưa được định nghĩa cho đến khi ranh giới của nó được định nghĩa. Các kỹ sư dày dạn kinh nghiệm suy nghĩ theo kiểu "cái gì đi vào, cái gì đi ra, và điều gì xảy ra khi có sự cố." Hãy đưa điều đó vào trong .
Write a function to parse a date string.
Write a function parseDate(input: string): Date | null.
Inputs: ISO 8601 strings ("2026-06-14", "2026-06-14T10:30:00Z").
Output: a Date object, or null if the string is invalid.
Edge cases to handle:
- empty string or whitespace -> null
- valid format but impossible date (2026-02-30) -> null
- trailing garbage ("2026-06-14xyz") -> null
Do not throw. Return null for all invalid input.
Khi bạn nêu tên các trường hợp biên, AI sẽ xử lý chúng. Khi bạn không nêu, nó chỉ viết đường đi thuận lợi (happy path) và bạn phát hiện ra các lỗ hổng khi đã lên production. Kỷ luật tương tự áp dụng ngoài phạm vi các hàm thuần túy: đối với một , hãy xác định cả phản hồi thành công lẫn các phản hồi lỗi (mã trạng thái nào khi email trùng lặp? khi phần thân yêu cầu bị sai định dạng?). Đối với một component giao diện, hãy xác định trạng thái rỗng và trạng thái đang tải, không chỉ trạng thái đã có dữ liệu. Hành vi thú vị của hầu hết phần mềm nằm ở các cạnh biên của nó, vì vậy đó là nơi prompt của bạn nên dành lời.
Nếu bạn không chắc các trường hợp biên là gì, hãy hỏi AI trước: "What cases should a date parser handle?" — rồi đưa câu trả lời đó trở lại như các ràng buộc. Điều này biến mô hình từ một trình tạo mã thành một trình tạo danh sách kiểm tra, và việc xem xét một danh sách kiểm tra nhanh hơn việc gỡ lỗi cho những trường hợp bạn đã quên.