您的位置:首页 > 编程语言

代码赏析-什么样的代码能称得上艺术二字

2015-11-09 23:01 316 查看
人类的最原始的认知来源于模仿,而后才是自我创造。可以说绝大多数的人都是如此,天才毕竟不多。在写代码的过程中,也会遵循此过程,优秀的程序员往往都经历过一个过程—阅读优秀的源码。本系列的博客会陆续贴一些我在读到看到的让我眼前一亮的代码供大家赏玩。作为开篇,以SICP的一道习题开始:

练习1.3: 请定义一个过程,它以三个数为参数,返回齐其中较大的两个数之和。

其实,
SICP
在学校的时候就在读,工作后又读过,每每读到第四章章后就被莫名的事情中断。
练习1.3
从未吸引过我的注意,记得是在“负暄琐话”的博客中看到的一篇文章让我记忆深刻。时隔几年才开始在
csdn
写文章,主要是
csdn
以前的编辑器我太不喜欢了,现在支持
markdown
语法实在是太开心了。打算重新记录一些有趣的文章。

如果让我来写这段代码,我会这么写:

long sumSquareLargest(int x, int y, int z) {
if (x <= y && x <= z) {
return y * y + z * z;
} else if (y <= x && y <= z) {
return x * x + z * z;
} else {
return x * x + y * y;
}
}


上面的代码真的就是普普通通、中规中矩,简单的完成了题目所要求的功能,几乎没有任何美感之言。当然从正确性上说,也没考虑结果
overflow
的情况。

下面我们来欣赏下Joe给出的堪称艺术品的代码:

long sumSquareLargest(int x, int y, int z) {
if (x <= y && x <= z) {
return y * y + z * z;
}

return sumSquareLargest(y, z, x);
}


这段代码真的是非常的巧妙,真的是达到了如何判断一件作品是否是艺术的四个标准:

这段代码非人不能写出,富于想象力

这段代码除了实现既定功能外,具有高度的表现力

这段代码传递的美感和思想超越了它自身

总之,这段代码很美

—Joe Marshall

这段代码的巧妙之处在于利用函数调用的栈完成了参数的移动,表现力极强。总之,这段代码很美。我是同意的。

秉着学以致用的原则,我们能从上面这段代码所学的技巧能不能有所用处呢?请读者接着往下看

问题:给定三个数,求其中的最小值。

在编程课上我们绝大多数都做过类似的编程练习,来练习
if
else
的使用。通常的代码是这个样子的:

代码一

long min(long x, long y, long z) {
if (x <= y && x <= z) {
return x;
} else if (y <= z && y<= x) {
return y;
} else {
return z;
}
}


这段代码实在是太普通了,我们再看下一段

代码二

long min(long x, long y) {
return x <= y ? x : y;
}

long min(long x, long y, long z) {
return min(min(x, y), z);
}


比代码一似乎好了些,但是距离我们称之为艺术品的代码还差的很远。我们来模仿下上文提到的堪称艺术品的代码

代码三

long min(int x, int y, int z) {
if (x <= z && x <= y) {
return x;
}

return min(y, z, x);
}


以后遇到类似功能的代码,我们也可以炫技一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: