HackerRank 正在教你编写糟糕的代码
如果你还不了解 HackerRank,它是一个编程练习平台,而且越来越多地被企业用来测试工程师候选人。正因如此,他们鼓励使用 HackerRank 练习或面试的人编写糟糕的代码才成了一个问题。
function Rectangle(a, b) {
}
这是他们“十天 JavaScript 挑战”中要求你编写的函数的起点。创建矩形对象是这十天挑战的第四天。大多数程序员会直接使用这个起点,然后填充括号之间的空白。HackerRank 可能也希望你这样做:保留他们提供的起点,然后填充缺失的部分。
如果题目只给了你这些信息,你大概可以算出这a是长方形的一条边,这b是另一条边。但如果你仔细阅读题目描述,他们会明确告诉你这a是长方形的长,这b是宽。
为什么要保密?
蝙蝠侠必须保守自己的身份秘密。他晚上会以违法犯罪为生。即便他是为了伸张正义,也仍然可能被捕。为了能继续在街头行侠仗义,他不能让任何人知道他其实就是布鲁斯·韦恩。
但据我所知,a它们b不需要隐藏它们的真实身份(矩形的长和宽)。事实上,在这个函数中,它们的作用仅仅是表示矩形的长和宽。这意味着它们甚至不需要是`a`a和 `b` b。
length 和 width 这两个名称并非 JavaScript 保留名称。那么,为什么不直接使用它们呢?为什么 length 不能是 `length` length,width 不能是 `width` 呢width?
是啊,但这有什么害处呢?
在这个 HackerRank 练习中,你最多只需要编写几行代码。更不用说创建矩形只有两个逻辑参数:长度和宽度。你大概不会彻底忘记 a 和 b 分别是什么。即便如此,你仍然会有那么一瞬间不知道aa和b 分别b是什么。
这甚至会让你感觉自己很酷。就像你加入了一个拥有秘密代码的趣味俱乐部。麻瓜们看着它a,然后b举手投降,但你……你可以在瞬间破解它。这感觉就像拥有超能力。如果 HackerRank 都这么做,那肯定是对的……对吧?!😰
在你的职业生涯中,你永远不会编写出如此简短、功能如此有限的应用程序。想象一下,你只需一瞬间就能记住 Rectangle 函数中的 a 和 b 分别代表什么。现在,想象一下参数含义并不那么清晰的情况。也许你有一个函数,用于在页面上显示一个警告框。它接受三个参数:aa、bb 和cc。你知道这些参数是什么意思吗?嗯,我也不知道。
现在,把这个新的命名问题放大到一个拥有 10,000 行代码的应用程序上。每个函数都有参数,而这些参数的名称都是晦涩难懂的单字母。既然你已经知道这样做没问题,那么你的变量命名很可能也同样缺乏思考。你开发这个应用程序的大部分时间都将耗费在弄清楚它的功能上。我真同情那些不得不接手这个应用程序并进行开发的人。我希望他们有足够的阿司匹林。
你可能觉得我挑了 HackerRank 上唯一一个,或者说最糟糕的例子。但你大错特错了。并非所有练习都使用这种晦涩难懂的变量和参数命名方式,但很多练习都用了,有些甚至比我举的第一个例子还要糟糕。以下是另一个令人费解的练习的初始代码:
'use strict';
process.stdin.resume();
process.stdin.setEncoding('utf-8');
let inputString = '';
let currentLine = 0;
process.stdin.on('data', inputStdin => {
inputString += inputStdin;
});
process.stdin.on('end', _ => {
inputString = inputString.replace(/\s*$/, '')
.split('\n')
.map(str => str.replace(/\s*$/, ''));
main();
});
function readLine() {
return inputString[currentLine++];
}
// Complete the minimumBribes function below.
function minimumBribes(q) {
}
function main() {
const t = parseInt(readLine(), 10);
for (let tItr = 0; tItr < t; tItr++) {
const n = parseInt(readLine(), 10);
const q = readLine().split(' ').map(qTemp => parseInt(qTemp, 10));
minimumBribes(q);
}
}
主函数里的变量命名简直让我头晕目眩。t为什么这些练习tItr题的n代码这么难读懂q?qTemp
嗨!我帮助像你一样的人开启网页开发职业生涯。一切都从明确目标开始。快来参加我的免费课程,开启你的网页开发之旅吧! 🎉
代码是为人服务的。
你可能认为代码是给电脑用的。其实不然。代码是给人用的。如果代码仅仅是给电脑用的,我们就无需像 JavaScript 或 Python 这样的高级语言了。
编写代码时务必牢记这一点:要考虑到其他人也能阅读你的代码。变量名、参数名和函数名应尽可能包含上下文信息,帮助读者理解代码内容。`$ ( " ...1))"`)` )`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)`)` a)`)`)`)`)`)`) `)`)`)`)`)`)`)`)`)`)lengthlengthInInches
人们很容易看到 HackerRank,因为它规模庞大、历史悠久,而且从通过它进行的面试数量来看,也备受尊敬,所以就想当然地认为它会给你提供高质量的代码作为起点。但遗憾的是,事实并非如此。
如果你在 HackerRank 上练习,不妨先从重构那些糟糕且毫无意义的代码命名入手,把它们改成能够传达代码含义和上下文的名称。当你开发平台之外的项目时,务必确保这些坏习惯不会污染你的代码,让你落得个“编写晦涩难懂代码的开发者”的名声。
通过为后续开发人员编写代码,您不仅方便其他开发人员与您合作,而且方便您的客户再次聘用您,并将您推荐给其他需要您帮助的公司。
文章来源:https://dev.to/raddevon/hackerrank-is-teaching-you-to-write-terrible-code-3f1j
