IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何给变量取个简短且无歧义的名字

    mckee发表于 2016-06-21 02:55:44
    love 0

    代码审计至少包含两个方面首先要确定代码的目的或功能;另外就是检查代码的可读性,即是否更利于理解和维护。
    或许你审计过很多代码,太长的变量名确实很让人抓狂。不仅影响了代码的清晰度,而且过长的变量让你的代码难以扫描,迫使更多的换行。
    如何给变量或方法取个好名字
    首先你要知道这个命名想要表达什么;另外你应该知道这个命名跟什么是无关的。 除此之外,所有的命名中所有的字符串都是多余的。
    (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) { ... }
    }



沪ICP备19023445号-2号
友情链接