保持代码简单
这篇文章最初发布在我的博客上。
作为一名中级开发人员,我努力学习的最重要的一课就是保持代码简单。
我正在为计划参加的训练营研究一些算法。
几周前,我在推特上发布了这个让我困惑的算法:
简洁的双线设计。不错吧?
下面我们来看一下:
function longestString(strs) {
// is x string length greater than y string length? If so
// return x
// if not return y
// add an empty string as an accumulator
// as a callback to the reduce function
const longest = strs.reduce((x, y) => x.length >= y.length ? x : y, '' );
return longest;
}
这里我尝试获取数组中最长的字符串。我以为用函数式数组方法可以轻松实现,所以我四处搜索了一下。我阅读了 MDN 中关于map
、filter
和 的reduce
内容来唤起我的记忆,最后选择了reduce
。
StackOverflow 上有人提出了类似的算法,并尝试解决。我根据这个算法调整了我的算法。
正如 Twitter 嵌入所示,我在比较时遇到了一些问题,因为我的测试没有通过。我添加了相应的操作符,一切就都正常了。
这是最干净的了。
但它可读吗?
这就是导师的作用
我的一位朋友兼导师在推特上私信我,谈到了这件事以及大家在推特上提供的解决方案。他说,其中一个解决方案简直一团糟,如果他写了类似的方案,肯定会被老板痛骂一顿。
我的第一反应是嘲笑那个给我嵌套三元组的人。
但他不是在谈论这个。他在谈论我的那句巧妙的台词。嗯……
愚蠢代码的教训
我和朋友详细讨论了聪明才智以及编写供其他人阅读的代码。我在两行代码的解决方案中使用的变量没有任何上下文。我应该把它们分解成这样:
let lenX = str1.length;
let lenY = str2.length;
const longest = strs.reduce((str1, str2) => lenX >= lenY ? str1 : str2, '');
这仍然简洁但更易读且更容易理解。
我本可以使用传统的 for 循环,但我想让自己看起来更深入,更容易上手。我想让自己看起来更聪明,但这样做会让代码难以理解,这正是中级开发人员的标志。
保持简单,愚蠢
x
当我还是个新手开发时,我始终不明白为什么有人会写像或 这样的变量声明y
。reduce
正因如此,我才不喜欢函数式编程方法:我发现的大多数示例都使用这些变量。我始终不明白x
引用的是什么。作为一个对这门语言理解更深的人,我掉进了那个聪明的中级陷阱。千万别这么做。虽然这确实会让你看起来好像知道自己在做什么,但也会让代码难以阅读,而且作为 X 公司的潜在开发人员候选人,你的吸引力也会越来越小。
正如我的一位朋友曾经说过的:
保持简单吧,傻瓜。
如果你喜欢这篇文章,或许你也想看看我的新闻通讯。没有垃圾邮件。50% 精彩内容,50% 精彩链接。即使这些你不喜欢也不用担心。
https://buttondown.email/tiffanywhite
文章来源:https://dev.to/tiffengineer/keeping-your-code-simple-44bd