美高梅官方网站66159

小范围的抉择一些管用本事,第四章 不在话下

作者:新闻公告    来源:未知    发布时间:2020-04-26 14:27    浏览量:

美高梅线上平台游戏 1

第三章 名正言顺

美高梅线上平台游戏 2

1. 小范围的选择一些有用技术,透彻的学习它们,拥抱它们。然后不断的扩展这个范围。

  • 远古的人认为命名某个事物就是对其拥有权利。这不仅仅是简单的宣称所有权。一些人对名字的力量坚信不疑,以至于他们从不将自己的名字告诉陌生人,因为他们害怕陌生人会使用名字来伤害他。
  • 名字所描述的内容包括:1. 身份;2. 行为;3. 识别,名字将一个事物标明为一个性质独特的实体。
  • 我们为什么应当恰当的命名呢?因为编写源代码就是关于如何进行清晰的交流,恰当的命名意味着“了解名称就可以了解对象”。
  • 清晰的命名是优秀代码的特点之一,一个对象的名称应该清晰的描述了这个对象。
  • 在编码时,需要进行命名的内容包括:1. 变量;2. 函数;3. 类型; 4. 命名空间或者包的名字;5. 宏; 6. 源文件名称。
  • 为了恰当的命名,在为一个对象想出名称以前,必须准确的了解这个对象是什么,如果你不知道你所命名的对象是什么,它的用途和它存在的理由,你怎么能够赋予它一个有意义的名字呢?所以说糟糕的名称通常表明你对需要命名的对象缺乏理解。

    一个好的名称具有以下特点:

  • 技术上正确。符合所使用的语言在命名上的限制。
  • 符合语言习惯。要了解你的语言的命名规则,更重要的是,了解这种语言的习惯用法,公共命名约定是什么?应用这些语言习惯和约定。
  • 恰当。包括以下几点:1. 长度,在进行命名是,将重点放在清晰而非简洁上,慎用各种奇怪的所写;2. 格调,一般在命名时不要使用语气助词。
  • 理解在较短的名称和较长的名称之间进行权衡的考虑因素,即它们是如何依赖于变量的作用范围的,对于循环计数器这种变量,就可以简单的以i来命名,但是要注意在多重循环时,最好起一个易理解的名字。

    如何命名一个变量:

  • 一般情况,变量用一个名词来表示。
  • 如何不是名词,通常会是一个名词化的动词。
  • 有很多用于修饰成员变量的面向对象的语言约定,以说明它们是成员,而不是局部变量或者全局变量。
  • 一种常见的命名习惯是使用首字母缩略词作为简洁和“有意义”的名称,例如:我们可以这样声明一个变量:SomeTypeWithMeaningfulNaming stwmn(10);
  • 一般情况下,将类姓名和变量名区分开,类姓名通常都有一个大写的首字母,而变量名则具有小写的首字母,例如:我们可以这样声明一个变量:Window window;

    如何命名函数:

  • 如果变量像一件可以握在手里的东西,那么函数就是你拿这件东西所做的事,它的名字在逻辑上更应该是一个动词。
  • 有意义的函数名字应该避免使用be、do和perform等词语。
  • 我们应该隐藏函数内部的具体实现过程,始终从使用者的角度来为函数命名。但是当在为请求信息的简单查询函数进行命名的时候,可以不必遵守。
  • 当你编写一个函数时,应该使这个函数很好的文档化,其名称应该仍然是关于函数用途的一个清晰的描述,这是函数契约的一部分。

    如何命名类型:

  • 对类的命名没有太多严格的直觉推理法,因为不同的类有不同的用途。
  • 在名称中避免使用多余的词,尤其实在类型名中避免使用以下这些词语:class、data、object和type。
  • 要确保你描述的数据的类不是一个真正的对象。
  • 糟糕的类名会使程序员们感到困惑,较好的命名能为代码的逻辑提供清晰的思路。

    如何命名名字空间:

  • 选择描述其内容的关系的词语。
  • 不要选择重复暗示命名对象是一个集合的名称,例如:controls_group就不是一个好的名称。

    如何命名宏:

  • 名字全部使用大写字母。
  • 不要为其他任何对象使用这种全部大写的名称。

    如何命名文件:

  • 注意大小写,一些文件系统不区分大小写。
  • 确保同一目录中的文件名不仅仅只是大小写不同。
  • 尽量保证你创建的文件都具有不同的名称,即使这些文件都分布在不同的目录中。

    一个好的名字,具有以下特点:

  • 保持前后一致,命名一致不仅限于创建名称时的大小写和格式化,一个名称将确立一个隐喻,在这个程序中,这写隐喻应该保持一致。
  • 利用代码的内容,我们要充分利用上下文,写出简洁的、描述性的以及没有多余信息的名称。
  • 使用对你有利的名字。

    一个好的名字,不应该具有的特点:

  • 含义模糊。
  • 啰嗦。
  • 不准确或使人误解。
  • 有歧义或者含糊不清。
  • 太做作。
  • 优秀的程序员:1. 意识到名字的重要性并尊重它们;2. 为他们创建的所有对象都考虑如何进行命名,并且选择恰当的名称;3. 使许多考虑因素保持平衡,包括名字的长度、清晰度、上下文等;4. 从整体的视角来命名,因此他们的名称在一个项目中都保持一致。
  • 糟糕的程序员:1. 不关心他们的代码是否清晰;2. 很快的编写代码而很少进行思考;3. 忽视语言的自然习惯;4. 命名时前后不一致;5. 不从整体的角度进行思考,不考虑他们的代码怎样和整体相结合。
  • 在许多不同的上下文中,重复使用同一个局部变量名是完全可以接受的。
  • 不要用局部变量名隐藏全局变量名,这样容易造成混淆。
  • 优秀的编码高手会把良好的命名当做一种习惯,而且不需要编码规范来“约束”。

编程初学者总是把大量的时间用在学习编程语言、语法、技巧和编程工具的使用上。他们认为,如果掌握了这些技术技巧,他们就能成为不错的程序员。然而,计算机编程的目的并不是关于精通这些技术、工具的,它是关于针对特定领域里的特定问题创造出相应的解决方案,程序员通过相互合作来实现这些。所以,很重要的一点,你需要能精确的用代码表达出你的思想,让其他人通过代码能明白你的意图。让我们先看看编程大师Robert C. Martin的杰作《Clean Code》里的一句话:引用注释的目的是为了弥补代码自身在表达上的不足。这句话可以简单的理解为如果你的代码需要注释,最有可能是你的代码写的很烂。同样,如果在没有注释的情况下你无法用代码完整的表达你对一个问题或一个算法的思路,那这就是一个失败的信号。最终,这意味着你需要用注释来阐明一部分的思想,而这部分在代码里是看不出来的。好的代码能够让任何人在不需要任何注释的情况下看懂。好的编码风格能将所有有助于理解这个问题的所有信息都蕴含在代码里。在编程理论中,有一个概念叫做“自我描述的源代码”。对于一段代码,一种常见的自我描述机制是遵循某种非严格定义的变量、方法、对象命名规则。这样做的主要作用就是使源代码更易读易懂。所以,也就更容易维护和扩展。这篇文章里,我将举出一些例子,说明什么是“不好的代码”,什么是“清楚的代码”命名要能揭示意图如何命名,在编程中这永远都是个老大难问题。有些程序员喜欢简化、缩短或加密名称,使得只有他们自己能懂。下面让我们看一些例子:不好的代码:

  1. 理解各种数据结构的优点和缺点,包括它们在内存中和在硬盘上的各自表现。

  2. 理解各种算法的优点和缺点。

  3. 了解你的工作领域。关上电脑,去做你的用户们在做的事。

第四章 不言自明

int d;// 天数int ds;int dsm;int faid;

5. 有准备,有愿望,有能力在任何时候投入到多种技术层面中。你必须知道表象下的技术原理。在“各个技术层面的掌握程度”和“编程能力”上有着密切的联系。

  • 创建优秀的代码以为着创建良好文档化了的代码。
  • 编写代码是一件艰苦的工作,将代码文档化更是艰苦异常。
  • 就像代码一样,文档必须接受版本控制,你必须要确保你阅读的文档的版本和你正在处理的代码的版本保持一致。
  • 唯一能够完整并正确的描述代码的文档就是代码本身。这并不自然而然的以为着代码本身就是最佳的描述,但是在通常的情况下,这是你能够获得的唯一文档。
  • 编程语言是我们交流的媒介,清晰地交流至关重要。清晰的代码会活的较高的质量,因为你犯错误的可能性降低了,而且这样的代码维护的成本也比较低。
  • 自文档化的代码有很高的可读性。

    如何编写自文档化的代码:

  • 使用好的样式编写简单的代码。1. 让“正常”的流程明显的贯穿你的代码,错误的情况不应该扰乱程序的正常执行流程;2. 避免过多的使用嵌套语句;3. 要谨慎的优化代码,如果一定要优化,那么要清晰的注册这段代码发生了哪些变化。
  • 选择有意义的名字。好的名字也许是我们避免多余注释的最好办法。
  • 分解为原子函数。1. 一个函数,一种操作;2. 减少任何出人意料的副作用;3. 保持简短,短小的函数易于理解。
  • 选择描述性的类型。
  • 命名常量。避免在程序中进行“硬编码”,避免使用神奇数字。
  • 强调重要的代码。1.在类中按一定顺序进行声明;2. 尽可能隐藏所有不重要的信息;3. 不要隐藏重要的代码;4. 限制嵌套的条件语句的数量。要确保所有重要的代码非常突出,并且易于阅读,将任何目标读者不关心的内容都隐藏起来。
  • 分组相关信息。
  • 提供文件头。在文件的顶部放置一个注释块,以描述文件的内容以及该文件所属的项目。
  • 恰当的处理错误。在最恰当的上下文中处理错误,不要返回无意义的错误。
  • 编写有意义的注释。清晰的代码应该包含“适量”的注释(“适量”:只有在你无法以任何其他方式来提高代码清晰度的情况下,再添加注释)。

    实现自文档化的方法:

  • 文学性编程。你不是在编写程序,你是在编写文档。源代码就是文档。高质量的文档永远都取决于编写策划那个徐的程序员。文学性编程实际上是带有设计的传统代码与实现规范这两者的结合。
  • 文档化工具。例如JavaDoc和NDoc。
  • 写作的技巧就是创建一个上下文环境,别人在其中思考。
  • 优秀的程序员:1.努力编写清晰、自文档化的代码;2. 尽量编写所需的最小量的文档;3. 考虑哪些需要维护其代码的程序远门的需求。
  • 糟糕的程序员:1. 对于他们所编写的难以理解的代码非常骄傲;2. 尽力避免编写各种文档;3. 不关心更新文档的问题;4. 认为:如果我写起来很困难,那么别人理解起来也会很困难。
  • 如何将相关代码进行分组,一般有以下几种方法:1. 名称前缀或后缀;2. 文件系统中的位置;3. 将相关内容放置到一个类中或者结构中。
  • 如果有良好的代码文档,那么一个新手就应该很清楚代码中的某个部分有什么作用。
  • 编码规范或者编码风格虽然有一定作用,但是没有什么可以取代精明、合理的编程。愚蠢的程序员即使遵守最严格的标准,也仍然会写出很差的代码。

“d”可以表示任何东西。作者使用注释来表明他的意图,却没有选择用代码来表示。而“faid”很容易导致误解为ID。清楚的代码:

6. 发挥你的想象力。永远都要问,“有更好的方法吗?”跳出常规思维约束。最好的解决方案也许还没有被发现。

 

int elapsedTimeInDays;int daysSinceCreation;int daysSinceModification;int fileAgeInDays;

7. 优秀程序员:我优化代码。更优秀程序员:我设计数据。最优秀程序员:他们的不同之处是什么?

命名时避免含义引起误解的信息错误的信息比没有信息更糟糕。有些程序员喜欢“隐藏”一些重要信息,有时候他们也会写出一些让人误解的代码。不好的代码:

  1. 正确的构造你的数据。任何的缺陷都将造成你的代码里无尽的技术债务。
Customer[] customerList;Table theTable;

9. 正确的命名事物。使用“动词-形容词-名词”格式来命名程序和函数。变量名要足够长,尽量短,有意义。如果其他程序员不能够理解你的代码,说明你写的不够清楚。在大多数情况下,针对下一个程序员而编码要比针对环境而编码重要的多。

美高梅线上平台游戏,变量“customerList”其实不是个list。它是一个普通的array(或客户集合)。除此之外,“theTable”是一个Table类型的对象(你可以用IDE容易的发现它的类型),“the”这个词是个不必要的干扰。清楚的代码:

10. 把分析和编程分离开做。它们不是同类的事物,需要不同类型的劳力资源,需要在完全不同的时间和地点分开做。如果同时做它们,你一样都做不好。(我喜欢在一天的末尾做不涉及技术的分析,而在第二天早上进行编程。)

Customer[] customers;Table customers;

11. 永远不要图省事走近道。永远不要把相同的代码部署两次。永远不要把一个变量命名成另一个变量名的一部分。也许你不明白这些规则,也许你要辩解。但如果你是 遵守着这样做的,这些规则就会约束你正确的构造你的程序。图省事的做法是让那些低等级的程序员永远停留在低等级的原因。

命名要有合适的长度在高级编程语言中,变量名的长度通常不太限制。变量名几乎可以任何长度。虽然如此,这也可能使代码变得闹心。不好的代码:

  1. 学习如何测评程序性能。你会惊奇的发现从中能学到很多之外的知识。
var theCustomersListWithAllCustomersIncludedWithoutFilter;var list;

13. 学会区别对待问题细节和问题后果。问题细节不会导致太大的差别,而问题后果能导致世界灭亡。只关注后果。

好的名称应该只含有必要的词汇来表达一个概念。任何不必要的字词都会使名称变长、难于理解。名称越短越好,前提是能在上下文中表达完整的意思(下订单这个场景中,“customersInOrder” 要比 “list” 好)。清楚的代码:

14. 密切关注你的用户/客户/管理人员。帮助他们认清楚他们的“what”,这比帮助他们明白他们的“how”要重要的多。

var allCustomers;var customersInOrder;

15. 写一个框架,不论你是否打算用它。你将从中学到从其它途径中学不到的东西。

命名时编码规范保持一致,让规范帮助理解代码所有的编程技术(语言)都有自己的“风格”,叫做编码规范。程序员应该在写代码时遵循这些习惯,因为其他的程序员也知道这些,并按这种风格编写。下面我们看一个没有明显规范的不好的代码例子。下面的这段代码没有遵循很好的已知的“编码规范”(比如PascalCase, camelCase, Hungarian规范)。更糟糕的是,这有一个毫无意义的bool变量“change”。这是个动词(用来描述动作),但这里的bool值是来描述一个状态,所以,这里应该用一个形容词更合适。不好的代码:

16. 把你知道的东西教给他人——通过口口交流或通过写作。最终这将成为教育自己的机会。

const int maxcount = 1bool change = truepublic interface Repositoryprivate string NAMEpublic class personaddressvoid getallorders()

17. 永远要对你的客户/用户说“Yes”,即使在你不确定的情况下。90%的情况下,你会最终找到方法实现它。10%的机会,你将会去向他们道歉。这是重要的个人成长中付出的一点小代价。

一段代码,只看它的一部分,你就应该直接明白它是什么类型,只需要看它的命名方法。例如:你看到了“_name”,你就能知道它是个私有变量。你应该在任何地方都利用这种表示方法,没有例外情况。清楚的代码:

18. 寻找别人的做出神奇的事情但却一滩糊涂的代码。重构它。然后丢掉它,并发誓自己永远不要犯他们犯下的相同错误。(这样的程序你会发现很多。)

const int MAXCOUNT = 1bool isChanged = truepublic interface IRepositoryprivate string _namepublic class PersonAddressvoid GetAllOrders()
  1. 数据永远 > 理论或观点。通过开发东西来学习数据。

命名时相同的概念用相同的词表达定义概念很难。在软件开发过程中,很多时间都花在分析业务场景、思考正确的定义里面所有的元素。这些概念永远都是让程序员头痛的事。不好的代码:

20. 有可能的话,开创自己的业务(服务或产品)。你将从中学到很多你做雇员永远学不到的关于编程的知识。

//1.void LoadSingleData()void FetchDataFiltered()Void GetAllData()//2.void SetDataToView();void SetObjectValue(int value)

[本文英文原文链接:How to be an Excellent Programmer for Many Years ]

首先:代码的作者试图表达“get the data”的概念,他使用了多个词“load”,“getch”,“get”。一个概念只用一个词表达就行了(在同一个场景中)。第二:“set”这个词用在了2个概念里:第一是“data loading to view”,第二个是“setting a value of object”。这是两个不同的概念,你应该使用不同的词。清楚的代码:

本文转载自: 外刊IT评论

//1.void GetSingleData()void GetDataFiltered()Void GetAllData()//2.void LoadDataToView();void SetObjectValue(int value)

命名时使用跟业务领域相关的词程序员写的所有代码都是跟业务领域场景逻辑相连的。为了让所有关系到这个问题的人都能更好的理解,程序中应该使用在领域环境中有意义的名称。不好的代码:

public class EntitiesRelation{Entity o1;Entity o2;}

当在编写针对某个领域的代码时,你应该始终考虑使用领域有联系的名称。在将来,当另外一个人(不仅是程序员,也许是测试人员)接触你的代码时,他能轻松的理解这个业务领域里你的代码是什么意思(不需要业务逻辑知识)。你首先考虑的应该是业务问题,之后才是如何解决。清楚的代码:

public class ProductWithCategory{Entity product;Entity category;}

命名时使用在特定环境里有意义的词代码里名称都有自己的上下文。上下文对于理解一个名称非常重要,因为它能提供额外的信息。让我们来看看一个典型的“地址”上下文:不好的代码:

string addressCity;string addressHomeNumber;string addressPostCode;

在大多数情况中,“Post Code”通常是地址的一部分,很显然,邮政编码不能单独使用(除非你是在开发一个专门处理邮编的应用)。所以,没有必要在“PostCode”的前面加上“address”。更重要的,所以的这些信息都有一个上下文容环境,一个命名空间,一个类。在面向对象编程中,这里应该用一个“Address”类来表达这个地址信息。清楚的代码:

class Address{string city;string homeNumber;string postCode;}

命名方法总结概述起来,做为一个程序员,你应该:命名是来表达概念的注意名称长度,名称里只该含有必要的词语编码规范有助于理解代码,你应该使用它名称不要混用名称在业务领域里要有意义,在上下文里有意义请随便发表你的意见。如果你知道在命名或代码表达方面的其它问题,请写在下面的评论里。英文原文:Express names in code: Bad vs Clean / 译:外刊IT评论

上一篇:没有了
下一篇:没有了

更多新闻推荐

Copyright © 2015-2019 http://www.77zhth.net. 美高梅官方网站66159有限公司 版权所有