什么是代码“高尔夫”?

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

摘自“Chris 困惑了太久,现在半懂不懂,所以不妨写篇博客”的宏伟档案:代码高尔夫。我曾经听到有人说“我通过自己的高尔夫把它缩小到这么小”。我会眯着眼睛,感到困惑,然后就让它过去,因为这似乎不值得询问。也许是“工作”或“修补”的俚语。

这确实不差太远。**整个想法是将代码缩减到尽可能少的字符,同时保持功能。**在(真正的)高尔夫中,击球进洞的击球次数越少,你的表现就越好。在代码高尔夫中,你使用的字符越少,你的表现就越好。

有时代码高尔夫是比赛(或者假设是锦标赛,保持术语一致)的一部分。有时只是为了娱乐。有时它很有用。有时格式是解决特定的挑战或算法,或者从给定的输入中获得某些预期的输出

“压缩”代码的可理解性完全消失了。代码不需要被理解,它只需要简短且有效。通常,人们会带着完全的困惑来看一段压缩的代码。这里有一个

function(a){a='0x'+a.slice(1).replace(a.length>4?a:/./g,'$&$&')|0;return[a>>16,a>>8&255,a&255]}

这是一段 JavaScript 代码,用于获取十六进制颜色并返回其 RGB 值。仅凭观察很难分辨!它是由 Jed Schmidt 编写的,在他的网站 140byt.es 上,该网站提供执行功能操作的推文大小的 JavaScript 代码片段。

在 JavaScript 的情况下,压缩的代码可能偶尔有用,因为它减少了需要通过网络发送的代码量。

维基百科有一篇关于代码高尔夫的文章,称其起源于 1999 年的 Perl。几乎任何你能想到的语言都可以压缩(毕竟它只是一个概念),并且可能甚至有锦标赛。 RedditStackExchange 都有专门的子站点用于此。

除了有趣之外,它还可以练习对语言的更深入理解,以及扩展你的逻辑和推理能力。

代码高尔夫不需要正式化,它可能只是你为了娱乐而做的事情。当你从正在处理的代码中删除几行代码时,你就压缩了它。


作为一个相关的旁白,我还没有在 SVG 中看到很多压缩代码。不过,SVG 非常适合它,因为它非常数学化、声明式和引用式。正是这支笔让我开始思考这个问题

查看 fuddl 在 CodePen 上编写的笔 Arrows@fuddl)。

我也尝试了一下

查看 Chris Coyier 在 CodePen 上编写的笔 SVG Golf@chriscoyier)。