资讯专栏INFORMATION COLUMN

驳《我不是很懂 Node.js 社区的 DRY 文化》

muddyway / 2206人阅读

摘要:今天在群里有人讨论方老师的文章我不是很懂社区的文化,我也看了一遍,槽点太多,不知道如何下笔。方老师分析了几个依赖最多的包,每个都只有不到百行代码。其实不仅仅是程序员,大部分程序员都不会准确的判断奇数。很遗憾,也有问题。

今天在群里有人讨论方老师的文章《我不是很懂 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;

随便一个小数就被判断为奇数了。更不用说浮点数中的妖怪 NaNInfinity 了。

那么是不是对 NaNInfinity 直接返回 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上看到了这篇《略谈人类与计算机的智能》文章,觉得有点意思,但某些地方与我对智慧的理解有所不同。这里拿出来与大家分享一番,吐槽的话...

    My_Oh_My 评论0 收藏0
  • CNCF案例研究:AppDirect

    摘要:部署新版本的时间从小时缩短到几分钟。上线新服务不需要门票或与三个不同的团队会面。这减少并隔离了一些复杂性。该平台已经集成了,因此当团队部署他们的服务时,他们会收到通知警报和配置。 AppDirect:AppDirect如何通过Kubernetes支持其工程人员的10倍增长 showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...

    dmlllll 评论0 收藏0
  • CNCF案例研究:AppDirect

    摘要:部署新版本的时间从小时缩短到几分钟。上线新服务不需要门票或与三个不同的团队会面。这减少并隔离了一些复杂性。该平台已经集成了,因此当团队部署他们的服务时,他们会收到通知警报和配置。 AppDirect:AppDirect如何通过Kubernetes支持其工程人员的10倍增长 showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...

    sydMobile 评论0 收藏0
  • CNCF案例研究:AppDirect

    摘要:部署新版本的时间从小时缩短到几分钟。上线新服务不需要门票或与三个不同的团队会面。这减少并隔离了一些复杂性。该平台已经集成了,因此当团队部署他们的服务时,他们会收到通知警报和配置。 AppDirect:AppDirect如何通过Kubernetes支持其工程人员的10倍增长 showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...

    MartinDai 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<