`
whfish
  • 浏览: 33890 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

如何编写更棒的代码:11个核心要点(转)

 
阅读更多
如何编写更棒的代码:11个核心要点
作为一个合格的程序员,有太多的理由促使你去编写干净利落且可读性强的代码。最重要的是因为你编写的代码,将来会有很多人一次次地阅读。当你有一天回过头来看自己的代码时,你就会明白编写优雅的代码是多么的重要。另外,如果别人来阅读你编写的代码,你是否想知道别人看到那些烂代码无比抓狂的感受。因此,花多一点的时间去编写优雅的代码,将来说不定会给你节省更多的时间。

那么,如何编写更棒的代码,下面是11条基本规则:

    1、保持方法简短扼要
    2、永远永远不要将同一个变量用于不同的目的
    3、尽可能让变量和方法的名称能够描述要实现的功能
    4、尽可能将变量定义在最靠近它们的地方
    5、不要出现让人费解的数字
    6、要像对待朋友一样对待你擅长的语言
    7、不要逆常规而行
    8、千万小心过早的优化代码
    9、要常常重构经过测试的代码
    10、不要沉溺于过度的设计技巧
    11、随时随地学习新的知识

下面我们来对每一点详细展开介绍。
1、保持方法简短扼要

尽管很多人都遵循这条规则,但是它依然很重要。总的来说,编写的方法最好能在首屏完全显示。试想,如果你需要滚动页面才能看到整一个方法,那是一件多么分散注意力的事情。一个方法最好能保持在5 – 20行之间,当然,你也要视具体情况而定,并不是一概而论的。对于getter和setter方法,通常只需一行代码,所以它们看起来更像是类成员的存取访问器。
2、永远永远不要将同一个变量用于不同的目的

一个变量应该只能被用于一个目的,我们可以通过使用常量(C++中用const标识,Java中用final标识),帮助编译器优化代码编译,也可以向程序标识“这个变量是不能被改变的”,这样我们编写的代码就有更好的可读性。
3、尽可能让变量和方法的名称能够描述要实现的功能

一段通俗易懂的程序代码,应该是任何人只要看了代码,就能明白程序是用来干嘛的。所以我建议大家尽量少用缩写,除非是程序界公认的简写习惯,像下面的简写习惯:

src - source
pos - position
prev - previous

如果你觉得描述性的简写方式没有价值,你可以比较一下n, ns, nsisd和numTeamMembers, seatCount, numSeatsInStadium
4、尽可能将变量定义在最靠近它们的地方

当你在盖房子的时候,总不希望把锤子放在别人家的院子里吧,相反,你会把盖房的工具放得尽可能近,定义变量也是同样的道理。

int foo = 3;
int bar = 5;
// bunch of code that uses "bar"
// but doesn't care about "foo"
// ...

baz(foo);

我们可以这样重构代码:

int bar = 5;
// bunch of code that use "bar"
// but doesn't care about "foo"
// ...

int foo = 3;
baz(foo);

当你把变量的声明跟使用它的地方相隔太远的时候(甚至是超过一屏),那的确会给你带来很大的麻烦。你会经常滚动页面去寻找这个变量,导致你很难在大脑中保持代码之间的连贯性。
5、不要出现让人费解的数字

任何时候,你要比较一些常量时,都要将它们定义成constant类型。团队之间调试代码时最让人头疼是出现下面的代码:

il < 4384

把它替换成下面的代码该多好:

inputLength < MAX_INPUT_LENGTH

6、要像对待朋友一样对待你擅长的语言

学习一种新的编程语言是一件很有趣的事情,从中你可以用很酷的方式学到新东西。还有就是让一个对某种语言很专业的人去学另外一种语言,很多时候会让人心有余而力不足。举个例子,你让一个Java大牛去学Ruby,他应该会用Ruby的方式去解决问题,而不是继续沿用Java的解决问题的思想。

当你需要循环输出5遍”Hello World“时,Java代码应该会是这样:

for (int i = 0; i < 5; i++) {
    System.out.println("Hello world!");
}

但是用Ruby,你也许会这样写:

for i in (0..5)
  puts "Hello world!"
end

这些看上去都很不错,但是最完美的方式可能是下面这样:

5.times { puts "Hello world!" }

7、不要逆常规而行

每一种编程语言都有自己的约束习惯,总的来说,大家对Java的编程习惯可能会了解得比较多,我们一起来看看其中的一些习惯:

    方法名以小写字母开头,后面紧跟的是大写字母开头的单词,比如veryLongVariableName。
    类名一般都是大写字母开头的单词组合。
    常量的命名都是大写字母的单词,之间用下划线隔开,比如MY_CONSTANT
    左大括号应该跟if在同一行

只有在迫不得已的时候才能打破这种规则,千万不要因为不喜欢这种做法而违背已经约定好的编码习俗。如果你身为团队一员,想改变一些编码规则的话,那也可以,不过当你把自己的代码分享给没有你这种习惯的队友的时候,棘手的问题会迎面而来。
8、千万小心过早的优化代码

过早的优化是所有问题的根源,至少电视上是这么说的…你的首要任务是编写容易理解的代码,而不要求你能很快写出来。除非你的程序运行很慢,否则谈优化都是为时太早。如果你想优化你的程序,那么得先找出程序的问题,这就是我们需要profilers这个工具的原因。

在没有找到问题源头就去优化代码,这样做你所要付出的代价就是破坏了程序的结构,至少会丧失程序的可读性。如果你发现程序运行缓慢了,也不要盲目地重构代码,要先找到导致运行慢的根本原因。

千万不要傻乎乎地去解决根本不存在的问题。
9、要常常重构经过测试的代码

世上没有绝对完美的事情。尽管你认为自己的代码已经写得非常完美了,过一段时间也要经常去看看它,也许那时你会对自己大骂:”怎么会那么傻!”

有一种提高代码质量的方法,那就是经常重构通过测试的代码。所谓通过测试,我指的是程序要能正常工作,你可以通过自动化测试或者手动测试来确保这一点。

首先你要确保程序能够正常运行,第一次我们并不需要写出多么完美的程序,能用就行,接下来我们可以慢慢重构,让它逐渐变得完美。这种开发方式很有TDD的味道,关键在于你需要熟悉重构的每一个环节。如果你熟练使用一些高级的IDE,像IntelliJ IDEA,那你的重构工作将会简单很多。

重构完以后,也许你会碰到很多这样那样的问题,甚至会破坏正常的程序,这就是我们要利用自动化测试的原因了。当你重构完以后,跑一遍单元测试就能避免这些令人头疼的问题了。
10、不要沉溺于过度的设计技巧

当我第一次接触到设计模式这一概念时,我觉得自己找到了“圣杯”。这些精妙的设计思想可以让你工作更加顺利,也可以让你的设计浅显易懂,因为你可以简单的说“我使用了观察者模式”,而不同大费周章的解释一通。然而问题来了,由于有些问题看起来太自然太简单了,你会把那些设计模式的思想应用到任何地方,为什么不把这个类设计成单例模式(singleton)?干嘛不去创建一些工厂类呢?

于是用80行代码就能完成的脚本,结果你用了10个类,15个接口和一堆泛型和注释,这其中的97%代码并没有做实质上的事情。设计模式虽然非常有用,可以帮助你简化设计,但是这并不是说你可以到处使用它们。你可以使用设计模式,但是不能将它滥用了。
11、随时随地学习新的知识

编程就是一项随时学习新事物的工作,当你学到了新的类库或者编程语言时,你会迫不及待地丢掉老的代码,进而去重写它们。然而有很多理由说明你不该这么做。

将一个新的类库或者框架应用到现有的项目中就会出现类似的问题。比如说你正在为一个Web项目写Javascript,但是中间你发现了jQuery,这时候你会迫不及待想把jQuery应用进去,而丢掉原来的Javascript代码,即便你根本没用jQuery写过任何项目。

最好的方式是你先用jQuery学着写一些简单的例子,把你项目中要用到的技术都学会。比如说你想要用AJAX?就先在项目之外写一些关于AJAX的简单例子,等到完全掌握了,就可以将老代码从项目中移除。

如果你热衷于编程,我强烈推荐你阅读Steve McConnell编写的《Code Complete》,它将永远改变你的编程思维。

译文链接:http://www.html5tricks.com/11-tips-to-coding-better.html
英文原文:11 tips for better code
翻译作者:蒋丽丽
分享到:
评论

相关推荐

    编写高质量JavaScript代码的基本要点

    - **跨团队协作**:修复bug的人往往不是最初编写代码的人,这意味着代码的可读性和文档的完整性变得尤为重要。 - **底线考量**:提高代码质量有助于减少维护成本,从而提升团队生产力。 #### 三、高质量代码的特点 ...

    华为代码编写规范和范例

    以下是该规范中的核心要点: 1. **命名规范**:华为编码规范强调了变量、函数、类和模块的命名应当清晰、简洁且具有描述性。使用驼峰式命名法(CamelCase)或下划线分隔(snake_case),避免使用单字母变量名,除非...

    Exploit 编写系列教程 1 ~ 11

    ### Exploit 编写系列教程 1 ~ 11 知识点解析 #### 一、内核管理系统中虚拟内存的管理 **知识点1:内存分配机制** - **VirtualAlloc()函数**: 这是一个用于在Windows系统中分配、保留、保护、修改已分配内存区域的...

    微信小程序代码:简易抽奖

    在这个“微信小程序代码:简易抽奖”项目中,我们可以深入探讨微信小程序的开发流程、核心技术和实现一个基本抽奖功能的具体步骤。 首先,我们要了解微信小程序的基础架构。它基于JavaScript、WXML(微信小程序标记...

    计算机源代码编写规范(VB编码规范).rar

    以上只是VB编码规范的一部分要点,实践中还会涉及更多细节,如代码复用、异常处理策略、代码审查等。遵循这些规范,可以使VB代码更易于理解,更健壮,同时也为团队合作提供了统一的标准。通过不断学习和实践,开发者...

    Java编写的围棋小游戏代码

    ### Java编写的围棋小游戏代码详解 #### 一、概述 在现代编程教育和娱乐软件开发领域,使用Java语言创建各种...尽管代码示例较为基础,但它为我们提供了一个很好的起点,引导我们进一步探索和开发更复杂的游戏应用。

    学必备c++50大要点

    - **描述**: 通过实际编写代码来巩固理论知识,同时也能发现理论与实践之间的差异。 #### 25. 综合运用知识 - **要点**: 将所学知识综合运用到实际项目中。 - **描述**: 实际项目能够检验学习成果,同时也是提升...

    Python编程的核心要点都总结在此

    通过深入学习和实践这些核心要点,无论是初学者还是经验丰富的开发者,都能提升Python编程能力,更好地应对各种编程挑战。"Python编程核心知识"这个压缩包很可能是包含以上所有或部分知识点的教程或代码示例,是...

    Delphi 程序员代码编写标准指南.doc

    以下是该文档中的核心要点: 一、序言 在序言中,作者强调了编写规范代码的重要性,指出良好的代码风格可以提升团队协作效率,减少代码审查的时间,并降低出错的可能性。遵循统一的编码规范,有助于创建出整洁、...

    幸运转盘微信小游戏源代码

    "幸运转盘微信小游戏源代码"是一个基于微信平台开发的小型互动游戏,主要利用Cocos Creator框架进行构建。Cocos Creator是一款强大的2D游戏开发工具,它提供了完整的图形用户界面(GUI)和一套完整的开发流程,让...

    写好代码的十个秘诀 的ppt

    以下是一些核心要点: 1. **鲁棒性**(Solid and Robust Code):编写能够处理异常和错误情况的代码,确保程序在各种情况下都能正常运行。避免因为边界条件或异常输入导致程序崩溃。 2. **简洁性**(Maintainable ...

    清华大学程序课程C语言代码

    本文将对这些代码进行解析,深入探讨每个代码背后的编程思想和技术要点。 1. **C语言基础** C语言是计算机科学的基础,它的语法简洁明了,适合理解计算机底层工作原理。C_hw01_01.cpp可能包含了C语言的基本语法...

    C代码编写规范.pdf

    以下是一些核心的C代码编写规范: 1. 布局与风格 - 块布局:推荐采用纯块布局,即大括号“{”和“}”垂直对齐,这有助于提高代码的可读性。例如: ```c int func(int x, int y, int z) { ... return 0; } ``...

    igh ethercat 台达电机控制代码

    本文将详细解析"igh ethercat 台达电机控制代码"中的核心概念和技术要点,以及如何利用这段代码来驱动符合DS402协议的台达电机。 EtherCAT 主站是EtherCAT网络中的核心部分,它负责协调整个网络的操作,向从站设备...

    菜鸟入门:Java语言学习六大要点

    下面将详细介绍“菜鸟入门:Java语言学习六大要点”中的核心知识点。 #### 一、明确学习目标 学习Java之前,首先要明确自己的学习目标。是为了找工作?还是为了个人兴趣?不同的目标可能会影响到后续的学习路径和...

    自主创作的代码编写变量命名工具

    标题中的“自主创作的代码编写变量命名工具”指的是一个由个人开发者设计的程序,它能够帮助程序员在编写代码时自动生成符合规范的变量名。这个工具可能是为了提高编程效率,减少手动命名的时间,并确保遵循良好的...

    C#编程的50个要点

    掌握其核心要点是成为一名高效C#程序员的关键。以下是对"C#编程的50个要点"的详细阐述: 1. **基础语法**:理解变量、数据类型、常量、运算符、控制流(如if语句、for循环和switch)等基础概念。 2. **类与对象**...

Global site tag (gtag.js) - Google Analytics