List 5 的匿名方法寫法:
new MenuItemC("選項4", 執行方法, delegate() { return DateTime.Now.Hour >= 19; })
若需求改為「19:00–22:00」,匿名方法語法冗長(delegate() { return ...; }),修改成本高,違反 YAGNI 原則卻又不得不改。
private static MenuItemC[] MenuItems4 =
{
new MenuItemC("選項1", 執行方法, () => true),
new MenuItemC("選項2", 執行方法, () => true),
new MenuItemC("選項3", 執行方法, () => true),
new MenuItemC("選項4", 執行方法, () => DateTime.Now.Hour >= 19)
};
() => true、() => DateTime.Now.Hour >= 19 一眼可讀,無冗長關鍵字。
new MenuItemC("選項4", 執行方法,
() => DateTime.Now.Hour >= 19 && DateTime.Now.Hour < 22)
只改 Lambda 本體,零結構調整。若用匿名方法或早期委派欄位法,需增欄位、改判斷邏輯、重構建構函式,工程量大增。
結論:Lambda 表達式的簡潔性質變了「修改成本」,使「為未來預留彈性」成為低成本決策,實踐了「恰如其分的防禦性程式設計」。