摘要:今天在群里有人讨论方老师的文章我不是很懂社区的文化,我也看了一遍,槽点太多,不知道如何下笔。方老师分析了几个依赖最多的包,每个都只有不到百行代码。其实不仅仅是程序员,大部分程序员都不会准确的判断奇数。很遗憾,也有问题。
今天在群里有人讨论方老师的文章《我不是很懂 Node.js 社区的 DRY 文化》,我也看了一遍,槽点太多,不知道如何下笔。
方老师分析了几个依赖最多的 npm 包,每个都只有不到百行代码。
比如 is-odd,每周下载 300 万次,但是只有核心 5 行代码。而且依赖了每周下载 1000 万次的 is-number 库。
得出了一个结论:
原来有这么多 JS 程序员不会判断奇数
只要 markdown 写得漂亮,就能迷倒 JS 程序员
1 + "1" 的问题一直在困扰 JS 程序员,我要不要写一个 add() 库解决这个问题呢
首先第一条:
原来有这么多 JS 程序员不会判断奇数。
其实不仅仅是 JS 程序员,大部分程序员都不会准确的判断奇数。
你写
const isOdd = x => x % 2 === 1;
这是小学的知识,除以 2,如果除不尽(有余数)那么就是奇数。正因为知识点很简单,所以给人一种随便一个程序员都会判断的错觉。
现在我们假设用户传入的参数一定是数字。
即便如此,这个函数依然不能正确判断奇数。因为 -3 % 2 的结果是 -1。
有人说那就这么写:
const isOdd = x => x % 2 !== 0;
随便一个小数就被判断为奇数了。更不用说浮点数中的妖怪 NaN 和 Infinity 了。
那么是不是对 NaN 和 Infinity 直接返回 falst,然后把 -1 的判断也加上去就行了:
const isOdd = x => x % 2 === 1 || x % 2 === -1;
也是图样
9007199254740991 % 2 === 1 9007199254740992 % 2 === 0 9007199254740993 % 2 === 0 9007199254740994 % 2 === 0 9007199254740995 % 2 === 0 // 后面的都是 0
为什么从 9007199254740991 开始呢?因为这个值是 Number.MAX_SAFE_INTEGER,是 2 ** 53 - 1。
那回过头来看看 is-odd 库是怎么实现的呢?
!!(~~i & 1)
~~i 用于把字符串转换为整数,和 1 进行按位与运算判断最后一位是 1 还是 0。
很遗憾,也有问题。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94423.html
摘要:在上看到了这篇略谈人类与计算机的智能文章,觉得有点意思,但某些地方与我对智慧的理解有所不同。人类思考的方式与现有计算机解决问题的方法有着本质的不同,很多情况下人类不是通过理性的分析问题来做出决定的,人类大部分时候用的都是感觉。 提前说明,我是标题党。 在SF上看到了这篇《略谈人类与计算机的智能》文章,觉得有点意思,但某些地方与我对智慧的理解有所不同。这里拿出来与大家分享一番,吐槽的话...
摘要:部署新版本的时间从小时缩短到几分钟。上线新服务不需要门票或与三个不同的团队会面。这减少并隔离了一些复杂性。该平台已经集成了,因此当团队部署他们的服务时,他们会收到通知警报和配置。 AppDirect:AppDirect如何通过Kubernetes支持其工程人员的10倍增长 showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...
摘要:部署新版本的时间从小时缩短到几分钟。上线新服务不需要门票或与三个不同的团队会面。这减少并隔离了一些复杂性。该平台已经集成了,因此当团队部署他们的服务时,他们会收到通知警报和配置。 AppDirect:AppDirect如何通过Kubernetes支持其工程人员的10倍增长 showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...
摘要:部署新版本的时间从小时缩短到几分钟。上线新服务不需要门票或与三个不同的团队会面。这减少并隔离了一些复杂性。该平台已经集成了,因此当团队部署他们的服务时,他们会收到通知警报和配置。 AppDirect:AppDirect如何通过Kubernetes支持其工程人员的10倍增长 showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...
阅读 2333·2021-11-18 10:07
阅读 2280·2021-09-22 15:59
阅读 3049·2021-08-23 09:42
阅读 2241·2019-08-30 15:44
阅读 1149·2019-08-29 15:06
阅读 2232·2019-08-29 13:27
阅读 1180·2019-08-29 13:21
阅读 1380·2019-08-29 13:13