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) |
流(最後一行)變得更具可讀性,而不是隱藏在實現細節的後面。它不會阻止開發人員閱讀它們,只有在必要時才閱讀。
相關文章
- 清潔程式碼:職責 — Janos Pasztor
- 經驗總結 | 重構讓你的程式碼更優美和簡潔
- “整潔架構”和商家前端的重構之路架構前端
- 程式碼重構:類重構的 8 個小技巧
- apple產品清潔|如何清潔iPhone、AirPods和MacBook?APPiPhoneAIMac
- 程式碼的壞味道和重構
- 程式碼重構:函式重構的 7 個小技巧函式
- Laravel Enlightn 一個免費的程式碼重構小助手Laravel
- Rust中後端的清潔Clea架構原始碼專案Rust後端架構原始碼
- 程式碼整潔之道的 7 個方法
- 記一次程式碼重構
- 3個例子教你重構 Python 程式碼Python
- 6 個例子教你重構 Python 程式碼Python
- leobert重構程式碼二三事--一.可怕的低階程式碼
- 一個利用正規表示式進行程式碼重構,去除冗餘程式碼的例子行程
- Tidy Up 5 for Mac 重複檔案查詢器和磁碟清潔工具Mac
- 我的第一個python web開發框架(33)——介面程式碼重構PythonWeb框架
- 程式碼重構之法——方法重構分析
- 基礎程式碼重構的若干建議(一)
- 重構你的javascript程式碼JavaScript
- “硬核”程式碼重構
- 重構 PHP 程式碼PHP
- 淺入深出Vue:程式碼整潔之去重Vue
- 用Lambda重構責任模式鏈模式
- 優化重構Python程式碼6個小建議優化Python
- 程式碼重構與單元測試(一)
- 【讀程式碼重構有感】
- 談談程式碼重構
- 程式碼重構技巧(二)
- 如何清潔Mac的螢幕Mac
- [譯] Go 語言的整潔架構之道 —— 一個使用 gRPC 的 Go 專案整潔架構例子Go架構RPC
- 整潔的 Table View 程式碼View
- Clean清潔領域模型的幾個特點 -Kamil Grzybek模型
- 《程式碼整潔之道》總結和筆記筆記
- 程式碼整潔之道
- 重構:改善既有程式碼的設計(第二版讀書筆記) - 重構、壞程式碼、寫好程式碼筆記
- 程式碼重構那些事兒
- 重構聚合支付案例教你如何寫出高擴充套件性易讀的程式碼套件