风格"/>
airbnb编码风格
airbnb编码风格
JavaScript开发人员的愤怒情书
我喜欢函数式编程及其提出的概念。 我真的是 你知道我还真正爱什么吗? Javascript 。 它灵活,广泛且充满各种问题(就像我一样)。
在整理工作项目时,我发现抛出的整理错误中有近200个是由于使用for of
迭代语法引起的。
作为我,一个合理的人(至合理的程度)决定检查他们的规格 。 当然,这对他们的团队来说真是太好了……
不。实际上,只是检查一下就让我生气。
观察以下两个代码块:
// synchronous
function foo(args) {
return args.reduce((prev, arg) => prev.then(() => doSomethingAsync(arg), Promise.resolve())
}
和
async function fooStacking(args){
const stack = [];
let arg, item;
for (arg of args){
item = await someAsyncFunction(arg);
stack.push(item);
}
return stack;
}
// also, the concurrent version
async function fooConcurrent(args){
const stack = [];
for (let arg of args) stack.push(someAsyncFunction(arg));
return Promise.all(stack);
}
其中之一是功能上可读,明智且可自我记录的代码段。 另一个是由AirBnb的首席工程师撰写的 。
你猜怎么着? 他们俩都不对。
显然 ,不存在编写此函数的正确方法。
这就是为什么我生气。 地球上每个JavaScript开发人员都将编写(并可能会担保)使您生气的代码,尤其是如果您不喜欢这种方式的话。
他们可能会大胆而野蛮地迫使Array.reduce
方法执行它甚至不打算做的事情,或者也许他们编写的样式看起来很老旧,丑陋,看起来就像是1990年代的编程手册一样。
您(或我)无法采取任何措施阻止他们。
老实说,它是如此令人毛骨悚然,以至于没有任何意义。 甚至没有要战胜的战斗。
目前让我烦恼的事情(由于Airbnb的规格和棉绒准则):
循环显然是邪恶的 ,我应该选择使用使用循环遍历项目的函数。 您知道的... 因此,他们不必使用循环。
他们还比较break
,并continue
语句GOTO
语句 ( 终极邪恶 ),但return
报表基本上可以做同样的事情都break
和continue
(区别在于它的他们这样做的范围)。 AirBnb还做出了大胆的声明,即break
语句仅在循环中使用。 我想这会使switch
和if
语句也变得邪恶……
嘿,您是否正在通过Babel运行生产服务器代码? 没有? 好吧, Airbnb认为您应该做到。
还有其他一些事情,例如使用require
不能接受(这对Babel项目有意义,但对Node项目不可行),并被要求在某些声明中添加过多的换行符。
为了更具建设性,我决定开始编写自己的eslint规范(并编写配套的how-to指导以告知其他人该如何做)。
编写代码时,拥有标准是很好的,结构也是如此。 但是不要让您的代码看起来像别人的代码,因为它很时髦。 制定自己的标准。 并停止关闭那些不同意您无法解释的选择的人 。
超过这一点的杂乱无章
自从我8年前开始使用JavaScript以来,它已经走了很长一段路。 我也看到了一些奇怪的地狱趋势。 当我开始的时候,就像一个狂野的JS意大利面条一样,以jQuery为王 ,而拟态统治了一切。
现在,我们生活在数字化意味着扁平化的时代。 明智地设计,显然在架构上也是如此。 设计模式正在出现,在这些函数越来越平坦的地方,甚至达到有时您甚至无法确定函数要做什么的程度。
公平地说,也许我们不再知道某个功能实际上是什么。 也许现在它超越了原始的数学根源(2015年成立)。
我认识一个人,尝试使用Object.assign
直接分配给对象的__proto__
。 每天感觉就像我进入暮光之城,在那里Object方法成为唯一的出行方式,每个人都开始看起来像Object方法。
也许我在地狱里。 不会。也许我和其他所有人一样,被风滚草的语言所困,拥有诸如TurboFans和优化器例程之类的神秘组件。
也许……也许就像您写分号的方式一样,这些都不重要。
翻译自:
airbnb编码风格
更多推荐
airbnb编码风格
发布评论