03.06 你见过的代码漂亮到什么程度?

IT多巴胺


一个具有十多年经验的老码农来强答一下:


很多朋友发的答案看起来很酷炫,但那些都是逗乐的,并无实际应用价值、甚至在实际的项目是都是有百害而无一益的代码。


各种语言的代码观感肯定是不一样的,但我认为美的代码的标准应该是共通的。漂亮的代码应该是整洁干净、朴实易读的,代码不仅在命名、排版方面要做到最好,同时在健壮性上也应该毫不妥协,有能力处理各种异常情况,能经受住时间的考验。


我个人见过实际生产代码中最漂亮的应该是开源的 PostgreSQL 数据库的源代码,排版编写上完全符合整洁、易读的要求,同时作为数据库系统,健壮性也是其存在价值的根本需求。


下面截取几段给大家欣赏:




命叔炸机


不同程序员

写代码确实有很大的水平差异,代码格式、算法优劣,这些都能够反应一个人的代码水平,我就记得学生时代有个同学,他写的前端代码就是要比我们都写得好一些,写出来的界面也更美观和合理一些,这就属于天赋。今天就说三段代码吧,这三段代码真的是我觉得非常有意义的代码,或者说我认为很漂亮。

王垠的40行代码

王垠这个人,这两年想必大家听得比较少了,不过至少在我读书那个年代,是听到过不少的故事的,作为一个CS专业的科班生,我自己也算是骄傲的,但是不得不说王垠确实还是让我很佩服,得承认王垠确实是个很有才华的人,甚至可以说他在这个行业算是一个天才,也是因为性格的原因,他没能取得什么代表性的学术成就和工业成就。

王垠这几行代码,说实话作为一个半吊子的Lisp和Scheme函数式编程业余爱好者,我大多数时间也只是用Emacs写C/C++代码而已,不太可能用太多时间来学习函数式编程,不过用我仅有的一点知识来看,王垠这段代码确实还是很出色的,我甚至认为王垠厉害之处不在于他精妙地实现了CPS算法,而是他的思维能力确实不错。

去年王垠去了阿里面试,是曾经在Facebook工作过的赵海平亲自面试,大家也都知道赵海平在阿里的职级是P10,面试之后王垠对于赵海平颇有微词,甚至上升到了对阿里的不满,这次面试不光是闹得不慌而散,最终还嫌弃了一番热议,后来赵海平还亲自出来解释。

vi写下第一行可视“Hello World”

想必大家都知道肯汤普森,就是和丹尼斯里奇一起开发了C语言和Unix系统的那位大神,可以说肯汤普森是我们这个行业的祖师爷了。

那时候没有可视化的环境,老爷子也没能给Unix打造一个可视化的开发工具,后来老爷子回到自己的母校加州大学伯克利分校,他还在那里开了课,在机房闲逛的时候,老爷子随手写了一个Pascal编译器,不过因为时间紧确实不太完善,一个叫做Bill Joy的学生发现了这个编译器的问题,他就着手想把这个编译器改好。

改这个编译器,那时候也没有可视化IDE继承开发环境,Bill Joy同样用的是老爷子写的EX编辑器,很快他就把这个Pascal编译器改好了,改好了之后深受伯克利学生喜欢,不过他开始对ex编辑器不满了,于是他就给ex编辑器加了可视化模式,这个编辑器一直演化,最终也就成为了现在的vi编辑器,后来发展成Vim已经很完善了,Vim是跟Emacs齐名的文本编辑器。

Google C++ Style

每一个程序员都应该养成好的代码习惯,《代码大全》、《编程珠玑》、《代码之美》等等这些都是帮你养成好的代码习惯的书籍,还有些大名鼎鼎的《C陷阱》、《Effective Java》等书籍,这些书籍又能够帮助你很好的规避开发风险。

除了这些之外,我觉得Google C++ Style是每一个程序员都应该看的,Google的C++代码规范可以说是目前为止全行业最好的工业代码规范,是Google多年来C++大厂工业实践留下的精华,基本上该注意的,能够回避的坑基本上都帮你解决掉了。一个优秀的程序员,你的代码一定要是可维护的,可读性还要高,Google C++代码规范能够很好的帮你养成好的代码习惯。

在我看来程序员不管是从事科研还是立足于工业,都应该有一个原则,那就是写有价值的代码,不管是做学术产品还是做工业产品,尽可能为你写过的代码负责,要写可维护的代码,保障你写过的代码是可读性很高的,这样的代码才是真正漂亮的代码。


本文为作者EmacserVimer悟空问答原创文章,未经允许转载、抄袭必究!

EmacserVimer


这样漂亮吗



白菜大叔傻乎乎


当年见到王垠的40行CPS代码确实是被其优美所震撼:

另外,Scheme 作为 编程语言中的皇后,其代码本身就是 极度漂亮了的,在加上 组合子的 逻辑,就可以得到极致优美的代码:

附上组合子的测试代码:

当然,那些基于《λ-演算》用于构造 计算机语言的代码也是极度优美的,例如:

最后,Scheme 中 还有很多 堪称经典的 优美代码,有兴趣大家可以自行百度,这里就不一一枚举了。


思考思考的动物


这是著名“心形线”java代码

百岁山的广告看过吧!可能很多人并没有看懂。我来普及一下。

讲的是52岁的笛卡尔和18岁的瑞典公主克里斯丁的忘年爱情故事。笛卡尔是克里斯丁的数学老师,他们在相处的过程中,慢慢产生了感情。公主的父亲发现了以后大怒,将笛卡尔流放回法国。回国以后的笛卡尔每天给公主都写信,但是一直没有得到公主的回信。笛卡尔写给公主的最后一封信只有一个公式。这就是数学界著名的“心形线”

r=a(1-sinθ)


阿迈达聊技术


这是一个心型代码:

#include <mathr.h>

#include <stdio.h>

int main ()

{

float y , x , a ;

for ( x=-1.5f ; x<1.5f ; x+0.05f)

{

a=x*x+y*y-1;

putchar (a*a*a-x*x*y*y*y<=0.0f ?'*' ; '' );

}

putchar('\\n');

}

return 0 ;

}


唯美橘子君


直接看图吧,学C/C++的标志define

粘贴过来代码比较凌乱:

//RGB 色彩转换

#define RGB(r,g,b) (((r)&0xff)|(((g)&0xff)<<8)|(((b)&0xff)<<16))

//ARGB 色彩转换

#define ARGB(a,r,g,b) (((r)&0xff)|(((g)&0xff)<<8)|(((b)&0xff)<<16)|(((a)&0xff)<<24))

#include<math.h>

//三维坐标转二维坐标X

#define D3TOD2X(x,y,z) (int)(x+y/2.0*cos(atan2(1.0,1.0)))

//三维坐标转二维坐标Y

#define D3TOD2Y(x,y,z) (int)(z+y/2.0*sin(atan2(1.0,1.0)))

//三维坐标转换为二维坐标X,Y

#define D3TOD2XY(x,y,z) (int)(x+y/2.0*cos(atan2(1.0,1.0))),(int)(z+y/2.0*sin(atan2(1.0,1.0)))

//获取空间两确定直线的向量

#define VECTORLINE(x1,y1,z1,x2,y2,z2) \t(int)(x2-x1), \t(int)(y2-y1), \t(int)(z2-z1)

//获取空间平面的法向量

#define NORMALLINE(x1,y1,z1,x2,y2,z2) \t(int)(y1*z2 - y2*z1), (int)(x1*z2 - x2*z1), (int)(x1*y2 - x2*y1)

//获取空间向量的夹角

#define VECTORCOS(x1,y1,z1,x2,y2,z2) \t((x1*x2 + y1*y2 + z1*z2)*1.0 /\t(sqrt(pow(x1, 2.0)+pow(y1, 2.0)+pow(z1, 2.0))*sqrt(pow(x2, 2.0)+pow(y2, 2.0)+ pow(z2, 2.0))))

//为类成员变量自动添加get和set方法

#define CLASSVALUE(ctype,vtype,name) \tctype vtype name; public: \tvoid set##name(vtype elem){this.##name=elem;} vtype get##name(){return this.##name;}



Ice2Faith


Haskell的快排.



心如止水230574190


人有外表皮囊与内在心灵,反应了某种思想。而算法,通过具体的代码来实现。代码的美在于有两点:外在风格的统一,内敛的精致。


风格

代码风格要统一,正如人有环肥燕瘦,代码风格也有多种,统一就行。有一句话这么说过:

肉体是拿来用的,不是拿来伺候的

代码风格也一样,不是用来阻碍我们写代码的,而是帮助我们交流的。编程语言无论是C++、Java还是Python,有很多开源的代码格式化工具或插件,并且支持配置,想要哪种配置自己选就行。

和人不同,人可能需要花时间化妆、打扮自己的皮囊,而代码的风格是可以做到自动化的,从vim/emacs/vscode,甚至python官方都提供了一套官方标准、autopep8工具、更有pylint打分工具,我们要做的就是配置好自己的编程环境,使用这些工具让你的代码自动遵循某种风格。


精致

如果说代码风格比较死板统一,而内敛的精致,更佳体现了一个程序员的职业水准。你看leetcode上的同一道题,有多种算法,即使同一种算法,不同的人,写出的代码也不相同。有的啰里啰唆,烦冗累赘,而大神,比如光头哥的代码,相当精简,看了之后,就会有一种一览众山小的感觉。


最近在看排序算法,下面的快排和归并排序,都在10几行以内实现,我觉得本身每个代码块都很精简。两者在一起对比,都是分治递归的思想,分解、解决、合并。两者在一起看,更体现一种和谐、说不出来的美。


最后总结:花时间弄懂算法的本质,精致实现算法。而不是玩弄各种酷炫的风格。




平凡科技


漂亮来衡量,我也不知道该从什么角度出发,对于我来说,可能是我入门编程时,学习的第一个程序是我眼里最漂亮的。

public class HelloWorld {

public static void main(String[] arts) {

System.out.println(“Hello World!”);

}

}

手机手写的,希望木有bug哈,你们学习的第一个程序是什么呢?🤔️


分享到:


相關文章: