代碼審計至少包含兩個方面首先要確定代碼的目的或功能;另外就是檢查代碼的可讀性,即是否更利于理解和維護。
或許你審計過很多代碼,太長的變量名確實很讓人抓狂。不僅影響了代碼的清晰度,而且過長的變量讓你的代碼難以掃描,迫使更多的換行。
如何給變量或方法取個好名字
首先你要知道這個命名想要表達什么;另外你應該知道這個命名跟什么是無關的。 除此之外,所有的命名中所有的字符串都是多余的。
(1)省略變量的參數類型
如果是靜態類型的語言,你是會知道變量的類型或方法返回值類型,再在命名上加上類型就是多余了
- // Bad:
- String nameString;
- DockableModelessWindow dockableModelessWindow;
- // Better:
- String name;
- DockableModelessWindow window;
可用復數代替某些類型
- // Bad:
- List<DateTime> holidayDateList;
- Map<Employee, Role> employeeRoleHashMap;
- // Better:
- List<DateTime> holidays;
- Map<Employee, Role> employeeRoles;
方法名不應該描述參數或其類型
- // Bad:
- mergeTableCells(List<TableCell> cells)
- sortEventsUsingComparator(List<Event> events,
- Comparator<Event> comparator)
- // Better:
- merge(List<TableCell> cells)
- sort(List<Event> events, Comparator<Event> comparator)
(2)省略命名中的歧義描述
當你看到這個變量名recentlyUpdatedAnnualSalesBid你是不是在想
有沒有年度銷售報價不是最近的?
最近的年銷售報加有沒有沒更新的?
有沒有最近更新的銷售報價不是年度的?
...
請去掉這些無關的描述吧,何況你可以加注釋嘛。
- // Bad:
- finalBattleMostDangerousBossMonster;
- weaklingFirstEncounterMonster;
- // Better:
- boss;
- firstMonster;
(3)去掉上下文已知的內容
比如說當class描述了某個內容,方法名就不需要再重復了
- // Bad:
- class AnnualHolidaySale {
- int _annualSaleRebate;
- void promoteHolidaySale() { ... }
- }
- // Better:
- class AnnualHolidaySale {
- int _rebate;
- void promote() { ... }
- }
(4)省略掉無意義的信息
很多人喜歡命名基于產品的很多商業名詞,比如data, state, amount, value, manager,engine, object, entity, and instance.這些詞是否存在沒有意義。
看下面一個聯系
- class DeliciousBelgianWaffleObject {
- void garnishDeliciousBelgianWaffle(
- List<Strawberry> strawberries) { ... }
- }
簡化成這樣是不是很爽
- class Waffle {
- void garnish(List<Strawberry> strawberries) { ... }
- }
新聞熱點
疑難解答