为什么你还在纠结于语法糖?

in Think with 0 comment

前几天在一个Laravel论坛看到一个问题,大致意思是说一个查询的方法应该怎么写显得更为优雅。而我给出的答复是

首先要明确一下对于“优雅”的定义,每个人的定义不同,我个人对他的定义是,各个层级清晰,代码耦合度低,而不是在于语法糖的写法优雅。

诚然,这是一个看似带着些许“装逼”和“讽刺”意味的答案,但是并不意味着这个答案没有可以参考的价值。虽然后来作者给我的回答没有任何的不妥,甚至在几年前,我也会对这种回答嗤之以鼻而不以为然。不过这也引发了我对“优雅”这个词的进一步思考。

那么“优雅”到底是什么?
有人说,优雅就是你的语法糖要用最新的。比如说,能用switch的地方就千万别用if
也有人说,你的代码要命名规范,语义清晰。
其实正如鸟哥在知乎中所述,优雅有不同的层次,站在不同的层次所理解的优雅是截然不同的。

而我对“优雅”的理解,却有些许不同。
首先,“优雅”应该是至简的。
经常会有人有这样的理解,同样的功能,实现的过程越复杂则越有成就感。然而在这类工作中,大多数都是重复且可替代的。事实上,各个语言都是一个工具,而工具的目的应该是让每个人都能快速使用,帮助我们节省重复工作的时间。举个例子,我们常说Laravel框架非常优雅,其中有一点我个人认为在于他强大的artisan指令,解放了我们复制和粘贴。从语言层面而言,虽然我主要使用的语言是PHP,但是如果Python能实现的方式更快和合理,那么我自然会选择Python
因此,在我们写代码的过程中也是如此,虽然我们的确需要在写代码的过程中考虑各种不同的因素,但是这并不意味着我们可以在代码中书写完全不需要的内容。

其次,“优雅”应该是清晰的。
这里所说的清晰是指两个方面,一方面我们的变量名要清晰,另一方面我们的结构层要清晰。当我们给变量名或者函数取名时,我们能很快通过函数名知道,这个函数是用来做什么的,即我们说的见名知意。而我们的结构层说要清晰,是指我们代码的各个层级各司其职,比如我们框架的MVC分层,当然,现在很多框架(诸如Laravel)在Controller这一层做了更加细致化的区分,让整个逻辑结构更加明朗。此外,你的结构设计合理,比如基本的“开闭原则”之类。

所以,我不会对--纠结于语法糖的这种行为做太多的评判,当然,我承认一些新的语法糖(诸如JavaScriptPromise)能帮助我们更快的书写或者更好的理顺我们的代码,但是我想强调的是,我们是不是应该花更多时间在我们的代码简洁层面和我们框架结构层面,而这才是我所理解的“优雅”。

依稀还记得几个月前,一个同事跟我说的话让我印象特别深刻:

其实写PHP特别能看出一个人的代码能力,当你见的多了之后你会发现,高手和小白写出来的代码差异性特别大。

的确,每每当我们回顾我们半年前或者一年前写的代码,大概都会有“一团糟”的感觉,我想这就是所谓的成长吧。甚至于,我们会对那些还在说着“PHP学习算法和设计模式没用”观点的人觉得可悲。

Responses