前言
函數(shù)、參數(shù)、解構(gòu)、優(yōu)雅、可讀性、技巧
不管是調(diào)用第三方庫或者是項(xiàng)目自身的函數(shù),開發(fā)過程中總少不了函數(shù)。可以說函數(shù)是解放代碼的第一生產(chǎn)力,有的同學(xué)會(huì)說了那你把類放在那里了。其實(shí)用函數(shù)和數(shù)據(jù)一樣可以模擬出來類,類更多的是對(duì)函數(shù)的歸集和復(fù)用進(jìn)行擴(kuò)充升級(jí)。
在調(diào)用函數(shù)時(shí)不得不提的就是 參數(shù) 了,很多小伙伴寫函數(shù)很容易就寫成了:
function area (width, height) { return width * height; }
兩個(gè)參數(shù)還好腦子記得住,但是下面這種情況乍辦:
function infomation ( name, sex, height, birthday, color, likes, follow, age ) { // ... }
這么多參數(shù)每次開發(fā)調(diào)用時(shí)有使用 ide 會(huì)自動(dòng)提示還好,如果沒有則有可能需要翻文檔或者跳轉(zhuǎn)到定義處查看,除了比較麻煩點(diǎn)外還行。
程序員何必為難程序員。
不知道大家有沒有和別人對(duì)接過開發(fā),有的同學(xué)開發(fā)有時(shí)候不會(huì)考慮別人是否對(duì)他的代碼有依賴,直接腦袋一拍就給你的參數(shù)順序?qū)φ{(diào)了,結(jié)果代碼提交后全軍崩潰各種報(bào)錯(cuò)飄紅。
傳遞對(duì)象而不是參數(shù)列表可以利用 JavaScript 的對(duì)象來傳遞參數(shù):
function infomation (user) { // user.name } infomation({ name: "xiaoer", age: 18 })
相對(duì)于參數(shù)列表傳遞對(duì)象屬性更好記也沒有強(qiáng)制的順序,如果命名足夠清晰在后期維護(hù)代碼的時(shí)候甚至只要看屬性名就可以馬上理解過來。如果其他同學(xué)開發(fā)新的功能也不會(huì)怕他順序亂調(diào)了,但是最好要對(duì)新加的參數(shù)做出兼容,不然還是會(huì)讓依賴的其他函數(shù)一路飄紅。
使用解構(gòu)賦值參數(shù)列表被對(duì)象替換解決了參數(shù)列表順序的問題,可是每次調(diào)用的時(shí)候都需要從對(duì)象中取值使得函數(shù)每次都要訪問對(duì)象,帶來了變量長(zhǎng)度變長(zhǎng)和很多無意義的賦值。再者如果調(diào)用者不小心多傳遞了參數(shù),再不巧函數(shù)中遍歷了對(duì)象這可能會(huì)產(chǎn)生BUG,可以利用解構(gòu)賦值來解決:
function infomation ({ name, age, height }) { }
這樣既對(duì)傳遞的參數(shù)做出了防御又可以方便的使用參數(shù)。
使用默認(rèn)值你永遠(yuǎn)不知道用戶會(huì)怎么使用產(chǎn)品。
產(chǎn)品上線后總會(huì)出現(xiàn)各種奇奇怪怪的錯(cuò)誤,用戶總是不按照預(yù)期進(jìn)行操作產(chǎn)品,不斷的 BUG 傳來實(shí)在讓人難受。
程序員何必為難程序員。
其實(shí)在調(diào)用函數(shù)時(shí)我們也是一個(gè)用戶,有的參數(shù)不能為空但是我們卻給出了空值,導(dǎo)致函數(shù)不能按預(yù)期執(zhí)行。在書寫函數(shù)時(shí)應(yīng)該做好別人調(diào)用函數(shù)時(shí)不按套路出牌的情況,例如給出默認(rèn)值和對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)化:
function infomation ({ name = "anonymous", age = 0, height = 160 }) { // ... }
當(dāng)然你也可以使用 TypeScript 等工具來提升編程的安全性,但 巧婦難為無米之炊 在有的時(shí)候不是你想用就能用的,需要整個(gè)公司一起進(jìn)行技術(shù)的升級(jí)。
參數(shù)變?yōu)榭蛇x參數(shù)上面例子中的函數(shù)在 infomation({ age: 16 }) 這樣調(diào)用的情況下,可以按照預(yù)期的默認(rèn)值執(zhí)行。但是想讓這個(gè)對(duì)象也可選的時(shí)候 infomation() 將會(huì)報(bào)錯(cuò),因?yàn)闆]有對(duì)象讓其解構(gòu)。可以利用 {} 來使得對(duì)象也可選:
function infomation ({ name = "anonymous", age = 0, height = 160 } = {}) { // ... }重命名
有時(shí)候需要對(duì)參數(shù)進(jìn)行重命名,但是已經(jīng)很多地方都使用了這個(gè)參數(shù)時(shí)。可以在函數(shù)執(zhí)行最開始的時(shí)候進(jìn)行重命名,但是這樣顯然不夠 geek(主要是不夠偷懶)依舊利用 解構(gòu)賦值 來實(shí)現(xiàn)重命名:
function infomation ({ name:username = "anonymous", age = 0, height = 160 } = {}) { // ... }
當(dāng)然 解構(gòu)賦值 也可以在平常開發(fā)中使用,方便我們寫出 規(guī)范 的 奇淫技巧,帶來偷懶摸魚同時(shí)也帶來優(yōu)雅。
一起成長(zhǎng)在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長(zhǎng)。
如果您想讓更多人看到文章可以點(diǎn)個(gè) 點(diǎn)贊。
如果您想激勵(lì)小二可以到 Github 給個(gè) 小星星。
如果您想與小二更多交流添加微信 m353839115。
本文原稿來自 PushMeTop
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103048.html
showImg(https://segmentfault.com/img/remote/1460000018709378?w=900&h=500); 簡(jiǎn)介 短路運(yùn)算、逗號(hào)運(yùn)算、簡(jiǎn)化條件語句、初始化小技巧 昨天一個(gè)同學(xué)在 URL 大爆炸 問了我一個(gè)問題:這是什么寫法 (data[key] = value, data) 。平時(shí)在寫文章的時(shí)候會(huì)把這些技巧稍微提示一下,認(rèn)為大家都知道這些技巧,引起了小二的...
showImg(https://segmentfault.com/img/remote/1460000018734296?w=900&h=500); 簡(jiǎn)介 可讀性、性能、Spread、Reduce 在 優(yōu)雅三連擊 中有同學(xué)提到了 可讀性 這個(gè)關(guān)鍵詞,就小二個(gè)人的觀點(diǎn) 在某個(gè)范圍內(nèi)使用比較常用到的小技巧,可以提升一定的可讀性,文中提到的短路運(yùn)算在初始化變量是提升可讀性的,并且在很多提倡優(yōu)化if 語句...
showImg(https://segmentfault.com/img/remote/1460000018771037?w=900&h=500); 簡(jiǎn)介 benchmark、基準(zhǔn)測(cè)試、jsPerf 在 優(yōu)雅插入數(shù)組 一文中大家最多的評(píng)論就是 能不能加個(gè)基準(zhǔn)測(cè)試。小二不是不喜歡加基準(zhǔn)測(cè)試而是現(xiàn)在硬件設(shè)備的性能越來越快了,有時(shí)候一些操作不是性能問題的主要原因,當(dāng)然這不是我們不寫出好代碼的理由。 書寫...
showImg(https://raw.githubusercontent.com/pushmetop/resource/master/30-seconds-for-everyday/chunk/poster.png); 簡(jiǎn)介 數(shù)據(jù)分割、分頁、異步操作、DOM優(yōu)化 把數(shù)組按指定大小進(jìn)行分組,可以用于分頁、數(shù)據(jù)切割、異步操作數(shù)據(jù)。 // 該源碼來自于 https://30secondsofcode....
showImg(https://raw.githubusercontent.com/pushmetop/resource/master/30-seconds-for-everyday/simple-http/poster.png); 簡(jiǎn)介 XMLHttpRequest、HTTP 工具原理、XHR jQuery.ajax、axios 和 新的 Web API fetch 在瀏覽器不支持的兼容代碼都是...
閱讀 2537·2021-11-24 10:20
閱讀 2385·2021-09-10 10:51
閱讀 3370·2021-09-06 15:02
閱讀 3105·2019-08-30 15:55
閱讀 2835·2019-08-29 18:34
閱讀 3070·2019-08-29 12:14
閱讀 1206·2019-08-26 13:53
閱讀 2916·2019-08-26 13:43