摘要:今天在群里有人討論方老師的文章我不是很懂社區(qū)的文化,我也看了一遍,槽點(diǎn)太多,不知道如何下筆。方老師分析了幾個(gè)依賴最多的包,每個(gè)都只有不到百行代碼。其實(shí)不僅僅是程序員,大部分程序員都不會(huì)準(zhǔn)確的判斷奇數(shù)。很遺憾,也有問題。
今天在群里有人討論方老師的文章《我不是很懂 Node.js 社區(qū)的 DRY 文化》,我也看了一遍,槽點(diǎn)太多,不知道如何下筆。
方老師分析了幾個(gè)依賴最多的 npm 包,每個(gè)都只有不到百行代碼。
比如 is-odd,每周下載 300 萬(wàn)次,但是只有核心 5 行代碼。而且依賴了每周下載 1000 萬(wàn)次的 is-number 庫(kù)。
得出了一個(gè)結(jié)論:
原來有這么多 JS 程序員不會(huì)判斷奇數(shù)
只要 markdown 寫得漂亮,就能迷倒 JS 程序員
1 + "1" 的問題一直在困擾 JS 程序員,我要不要寫一個(gè) add() 庫(kù)解決這個(gè)問題呢
首先第一條:
原來有這么多 JS 程序員不會(huì)判斷奇數(shù)。
其實(shí)不僅僅是 JS 程序員,大部分程序員都不會(huì)準(zhǔn)確的判斷奇數(shù)。
你寫
const isOdd = x => x % 2 === 1;
這是小學(xué)的知識(shí),除以 2,如果除不盡(有余數(shù))那么就是奇數(shù)。正因?yàn)橹R(shí)點(diǎn)很簡(jiǎn)單,所以給人一種隨便一個(gè)程序員都會(huì)判斷的錯(cuò)覺。
現(xiàn)在我們假設(shè)用戶傳入的參數(shù)一定是數(shù)字。
即便如此,這個(gè)函數(shù)依然不能正確判斷奇數(shù)。因?yàn)?b> -3 % 2 的結(jié)果是 -1。
有人說那就這么寫:
const isOdd = x => x % 2 !== 0;
隨便一個(gè)小數(shù)就被判斷為奇數(shù)了。更不用說浮點(diǎn)數(shù)中的妖怪 NaN 和 Infinity 了。
那么是不是對(duì) 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 開始呢?因?yàn)檫@個(gè)值是 Number.MAX_SAFE_INTEGER,是 2 ** 53 - 1。
那回過頭來看看 is-odd 庫(kù)是怎么實(shí)現(xiàn)的呢?
!!(~~i & 1)
~~i 用于把字符串轉(zhuǎn)換為整數(shù),和 1 進(jìn)行按位與運(yùn)算判斷最后一位是 1 還是 0。
很遺憾,也有問題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/94423.html
摘要:在上看到了這篇略談人類與計(jì)算機(jī)的智能文章,覺得有點(diǎn)意思,但某些地方與我對(duì)智慧的理解有所不同。人類思考的方式與現(xiàn)有計(jì)算機(jī)解決問題的方法有著本質(zhì)的不同,很多情況下人類不是通過理性的分析問題來做出決定的,人類大部分時(shí)候用的都是感覺。 提前說明,我是標(biāo)題黨。 在SF上看到了這篇《略談人類與計(jì)算機(jī)的智能》文章,覺得有點(diǎn)意思,但某些地方與我對(duì)智慧的理解有所不同。這里拿出來與大家分享一番,吐槽的話...
摘要:部署新版本的時(shí)間從小時(shí)縮短到幾分鐘。上線新服務(wù)不需要門票或與三個(gè)不同的團(tuán)隊(duì)會(huì)面。這減少并隔離了一些復(fù)雜性。該平臺(tái)已經(jīng)集成了,因此當(dāng)團(tuán)隊(duì)部署他們的服務(wù)時(shí),他們會(huì)收到通知警報(bào)和配置。 AppDirect:AppDirect如何通過Kubernetes支持其工程人員的10倍增長(zhǎng) showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...
摘要:部署新版本的時(shí)間從小時(shí)縮短到幾分鐘。上線新服務(wù)不需要門票或與三個(gè)不同的團(tuán)隊(duì)會(huì)面。這減少并隔離了一些復(fù)雜性。該平臺(tái)已經(jīng)集成了,因此當(dāng)團(tuán)隊(duì)部署他們的服務(wù)時(shí),他們會(huì)收到通知警報(bào)和配置。 AppDirect:AppDirect如何通過Kubernetes支持其工程人員的10倍增長(zhǎng) showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...
摘要:部署新版本的時(shí)間從小時(shí)縮短到幾分鐘。上線新服務(wù)不需要門票或與三個(gè)不同的團(tuán)隊(duì)會(huì)面。這減少并隔離了一些復(fù)雜性。該平臺(tái)已經(jīng)集成了,因此當(dāng)團(tuán)隊(duì)部署他們的服務(wù)時(shí),他們會(huì)收到通知警報(bào)和配置。 AppDirect:AppDirect如何通過Kubernetes支持其工程人員的10倍增長(zhǎng) showImg(https://segmentfault.com/img/bVbqyJg?w=2047&h=102...
閱讀 2368·2021-11-18 10:07
閱讀 2318·2021-09-22 15:59
閱讀 3077·2021-08-23 09:42
閱讀 2276·2019-08-30 15:44
閱讀 1191·2019-08-29 15:06
閱讀 2303·2019-08-29 13:27
閱讀 1210·2019-08-29 13:21
閱讀 1412·2019-08-29 13:13