本文根据《会说话的代码》一书作者王洪亮的直播进行整理。 敏捷风水师,社区知名技术大牛, 软件开发及敏捷咨询师,精益创业导师,Scrum认证CSP。十余年软件行业从业经验,精通日语和英语。多年来一直致力于软件代码开发方法和技巧的研究,是国内“自表达代码”方面的权威,并著有《会说话的代码》一书。擅长极限编程(XP)、测试驱动开发(TDD)、持续集成(CI)、重构(Refactor)、演进式设计(EvolutionaryDesign)以及降低代码的复杂度(CyclomaticComplexity)。通过重构、重写,将代码量大幅度缩减,并且提高可读性、可扩展性、可变更性,从而大幅度降低开发成本。对测试用例设计、划分等有深入研究,对如何提高测试的稳定性以及测试覆盖率有丰富的经验。他也是北京和天津敏捷软件社区的活跃组织者和分享者。长期担任戴姆勒-奔驰创新实验室的精益创业导师和敏捷教练等。 目录[隐藏目录] 11、命名的重要性 22、基本要领 33、词汇的使用 3.1a.名词 3.2b.动词 3.3c.形容词 3.4d.介词 3.5e.代词 3.6f.情态动词 3.7g.生命周期修饰语 3.8h.其他固定词用法 44、时态的使用 4.1a.原形 4.2b.过去式 4.3c.进行时 4.4d.被动式 55、点的使用 5.1a.点的基本作用 5.2b.FluenAPI 66、同义词 77、反义词 88、时间的命名 99、容器命名 、缩写(直播时未说明部分) 、否定式(直播时未说明部分) 、前缀,后缀(直播时未说明部分) 、Spring的层的命名(Service,Dao,DTO,BO,process/business) 、枚举的命名 、空及空白的表述 、设计模式的命名 、专业术语的命名 、和关键词重复的意思的词汇选取(直播时未说明部分) 、同一对象的不同形式的区分 、通用对象的命名(直播时未说明部分) 、其他注意事项(直播时未说明部分) 、防止词穷(直播时未说明部分) 1、命名的重要性软件开发的命名是团队合作的基础。代码是写给人类阅读的。越容易阅读的代码,越容易维护,越容易接手。结构的设计良好会让代码的调用变得容易阅读。结构设计不仅仅是考虑对象的职责和关系,也要考虑调用时的阅读。编程语言中有很多约定俗成的习惯,应当遵守。每个团队应该形成自己的编程习惯,不要各种不同的习惯混杂在一起。让代码读起来像句子是非常实用的设计实践。2、基本要领a.采用英文命名。不要有拼音命名,或者其他语言的,比如日语,韩语,法语…比如:orderState,而不是dingDanZhuangTai。b.有明确的分割识别,比如驼峰命名或者下划线分割。不要用没有分割的命名。c.常量或者枚举值采用全部大写字母,下划线分割。d.注意语法错误,例如:例如lengthOfTime表示时间长度,timeLength是语法错误。建议不要出现of,改为classTimeRange{publicintlength();}则调用为:timeRange.length();可以用点号很好的替代Of。e.词汇的选择,例如:auth表示认证,而doLogin是词穷的表现。当准备用do,execute,process,run等开头的时候,表示应该选取合适的词汇了。edit表示编辑,而save表示保存。弄清楚词汇的含义有助于更好地设计流程。3、词汇的使用a.名词i.一般用于表示物理对象和抽象对象1.物理对象例如:Book2.抽象对象例如:Stateii.单数形式1.单数形式表示单独的对象iii.复数形式1.复数形式表示多个对象的结合2.如果没有复数形式,可以用~List,~Map,~Array等形式表示多个数据。iv.名词用作方法名,有助于理解1.比如:TimeRange.days()表示时间范围的天数。Length.max表示 长度(用于校验的注解)b.动词i.动词作为方法名,例如:configure()ii.动名词,用作对象定义Movement,Configurationiii.动词和名词组合表示某个具体动作,但是注意,名词有可能出现在参数中。比如:makeOrder()下订单的调用形式可能是makeOrder(order);读起来比较怪,改为make(order);可能更容易其阅读iv.第三人称形式,为什么text.matches(regExp)要用第三人称表达?因为读起来符合语法习惯。同样的还有string.equals(another)c.形容词i.Cloneable1.采用~able结尾命名的形容词,表示具备某种能力ii.Configurableiii.Transactionald.介词i.on1.用于前缀,表示在发生某件事情的时候的动作。例如:onChange,onClick,onKeyDown,onKeyUpii.at1.表示时间2.表示地点iii.with1.表示附加例如:publicclassRender{publicvoidwith(Rendererrenderer){}}调用时可能表现为:picture.render().with(Rederer.BOLD_BRUSH);e.代词i.what1.用于表示判定条件。比如:swtich(message.what)ii.this1.默认关键词iii.that1.和this结合表示对比,例如转载请注明原文网址:http://www.13801256026.com/pgzl/2623.html |