那么,如何编写更棒的代码,下面是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》,它将永久改动你的编程思维。(文章来自南京欣才PHP培训课程)