Lambda和清潔程式碼的一個重構案例 - frankel
原始碼:
List<Person> persons = ...; persons.stream().filter(p -> { if (p.getGender() == Gender.MALE) { return true; } LocalDate now = LocalDate.now(); Duration age = Duration.between(p.getBirthDate(), now); Duration adult = Duration.of(18, ChronoUnit.YEARS); return age.compareTo(adult) > 0) { return true; } return false; }).map(p -> p.getFirstName() + " " + p.getLastName()) .collect(Collectors.toList()); |
它很長,甚至令人費解。
第一步是應用正確的命名,並將邏輯移到它所屬的位置。
public class Person { // ... public boolean isMale() { return getGender() == Gender.MALE; } public boolean isAdult(LocalDate when) { Duration age = Duration.between(birthDate, when); Duration adult = Duration.of(18, ChronoUnit.YEARS); return age.compareTo(adult) > 0; } } |
這個小的重構已經提高了lambda的可讀性:
persons.stream().filter(p -> { if (p.isMale()) { return true; } LocalDate now = LocalDate.now(); return p.isAdult(now); }).map(p -> p.getFirstName() + " " + p.getLastName()) .collect(Collectors.toList()); |
命名lambda:
// Implementation details Predicate<Person> isMaleOrAdult = p -> { if (p.isMale()) { return true; } LocalDate now = LocalDate.now(); return p.isAdult(now); }; Function<Person, String> concatenateFirstAndLastName = p -> p.getFirstName() + " " + p.getLastName(); // Core persons.streams() .filter(isMaleOrAdult) .map(concatenateFirstAndLastName) |
流(最後一行)變得更具可讀性,而不是隱藏在實現細節的後面。它不會阻止開發人員閱讀它們,只有在必要時才閱讀。
相關文章
- 程式碼重構:類重構的 8 個小技巧
- 一個菜鳥在程式碼重構中的感想
- 程式碼重構:函式重構的 7 個小技巧函式
- 程式碼的壞味道和重構
- 重構程式碼的7個階段
- 一個濫用程式碼的案例
- Laravel Enlightn 一個免費的程式碼重構小助手Laravel
- 程式碼重構--大話重構
- 記一次程式碼重構
- 程式碼重構
- 重構遺留程式碼(8):一個整潔架構的依賴反轉架構
- 一個利用正規表示式進行程式碼重構,去除冗餘程式碼的例子行程
- 程式碼重構之法——方法重構分析
- 重構遺留程式碼(4):第一個單元測試
- 基礎程式碼重構的若干建議(一)
- .NET重構—單元測試的程式碼重構
- 3個例子教你重構 Python 程式碼Python
- 6 個例子教你重構 Python 程式碼Python
- leobert重構程式碼二三事--一.可怕的低階程式碼
- 重構你的javascript程式碼JavaScript
- “硬核”程式碼重構
- 重構 PHP 程式碼PHP
- PHP程式碼重構PHP
- 程式碼重構(四)
- 用Lambda重構責任模式鏈模式
- 我的第一個python web開發框架(33)——介面程式碼重構PythonWeb框架
- 清潔程式碼:職責 — Janos Pasztor
- 程式碼世界中的Lambda
- 程式碼重構與單元測試(一)
- 重構出更加swifty的程式碼Swift
- 程式碼重構技巧(二)
- 談談程式碼重構
- 【讀程式碼重構有感】
- 重構:程式碼異味
- 重構 第一個示例
- 優化重構Python程式碼6個小建議優化Python
- 架構重構--改善既有程式碼的設計架構
- 重構:改善既有程式碼的設計