是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享-創(chuàng)新互聯(lián)

優(yōu)秀的程序員會(huì)用盡可能簡單的方式來解釋他們的代碼,即使是物理學(xué)家都可以用一張白紙和一只鉛筆來解釋蟲洞,我們又何嘗不可?

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的方山網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

我會(huì)盡可能讓代碼寫地簡單、易讀,包括選擇合適的變量名、使用編碼規(guī)范(code conventions)等等,但還是缺了點(diǎn)東西,理解代碼不應(yīng)該是去理解“如何”實(shí)現(xiàn)的,而是要理解想要“達(dá)成”什么。

甚至可以說要讓讀代碼像讀小說一樣,而不是一大堆代碼。

下面討論三大主題:

問題

閱讀其他人的代碼可能會(huì)非常折磨,如果不提供合適的上下文,我們會(huì)迷失在尋找某個(gè)函數(shù)或?qū)傩缘囊饬x中。

建議

不論是二進(jìn)制語言、低級(jí)語言還是高級(jí)語言,語法都在變得越來越友好,以便吸引更多開發(fā)者。而隨著語法變得更接近英語,我們的代碼也應(yīng)該簡明扼要、不言自明。

結(jié)果

寫出良好的代碼,讀起來像小說一樣,容易閱讀和理解(即使沒有給出上下文)。

?其實(shí)做為一個(gè)ios開發(fā)者,有一個(gè)學(xué)習(xí)的氛圍跟一個(gè)交流圈子特別重要,這是一個(gè)我的iOS (扣扣)交流圈

681503716 (驗(yàn)證碼:寂靜)

不管你是小白還是大牛歡迎入駐,大家一起交流學(xué)習(xí)

函數(shù)命名

正確的方式是:

我們寫函數(shù)時(shí)都會(huì)假設(shè)閱讀它的人擁有足夠的上下文,能夠理解函數(shù)想實(shí)現(xiàn)什么。用模糊的含義來命名函數(shù),例如“handleRedView()”會(huì)引起很多問題,”RedView”是啥?這個(gè)函數(shù)主要是想干啥?

所以在某些情況下函數(shù)的用途會(huì)很模糊,如果沒有提供足夠的上下文,閱讀起來會(huì)非常困難

我們可以把函數(shù)的用途分為四類:

通知(Informer)函數(shù)
管理(Management)函數(shù)
路由(Router)函數(shù)
執(zhí)行(Execution)函數(shù)

1. 通知函數(shù)

通常會(huì)觸發(fā)路由/管理函數(shù),例子如下:
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

回調(diào)函數(shù),通知某事已經(jīng)/即將發(fā)生,并給機(jī)會(huì)進(jìn)行響應(yīng)。

大部分情況下用于被代理(delegate)觸發(fā)的操作,或是通知(notification)處理函數(shù)。

  1. 管理函數(shù)

用于聯(lián)合多個(gè)函數(shù)以實(shí)現(xiàn)更高級(jí)的用途,不需要依賴參數(shù),block 中的所有代碼都會(huì)執(zhí)行。
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

上面的函數(shù)包含所有需要的信息,汽車啟動(dòng)時(shí)執(zhí)行這些函數(shù),此時(shí)我們不關(guān)注這是“如何”實(shí)現(xiàn)的,而是關(guān)注它做了“什么”

  1. 路由函數(shù)

用于聯(lián)合多個(gè)函數(shù)以實(shí)現(xiàn)更高級(jí)的用途,需要依賴一些參數(shù),只在我們想執(zhí)行的時(shí)候才執(zhí)行。
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

路由函數(shù)通常同于指向執(zhí)行函數(shù),但在某些情況下,如果邏輯代碼不超過一行,也可以包含自己的邏輯。

  1. 執(zhí)行函數(shù)

函數(shù)名字的具體實(shí)現(xiàn)。
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

這樣就能寫出一個(gè)干凈、簡短的類,可讀性強(qiáng),容易維護(hù)。

* 謹(jǐn)記一項(xiàng)原則,每個(gè)函數(shù)都應(yīng)該只有一個(gè)責(zé)任。

避免在函數(shù)名稱里使用”and“: playAndMinimize() loadAndPlay() 這個(gè)壞習(xí)慣會(huì)打破單一責(zé)任原則,寫出能夠適應(yīng)兩種情況的代碼。

避免在函數(shù)名稱里進(jìn)行猜測:moveRedViewIfNeeded()上面的例子會(huì)導(dǎo)致后面的程序員必須深入此函數(shù),才能理解觸發(fā)移動(dòng) Red View 的時(shí)機(jī),這樣不夠清晰。

不,layoutIfNeeded() 并不屬于這種情況,因?yàn)槲覀冎廊绻硞€(gè) view 的 setNeedDisplay 為 true,就應(yīng)該重新布局。這種情況在 Swift 語言里很普遍,因?yàn)楹瘮?shù)基本上都是應(yīng)用私有的。

談及代碼可讀性,我首先會(huì)想到編碼規(guī)范(code convention),它們被普遍接受、應(yīng)用廣泛,但使用編碼規(guī)范并不一定會(huì)提升代碼質(zhì)量,雖然有跨應(yīng)用性但可讀性更差。

”is“前綴應(yīng)該用于布爾型變量和方法,以便解釋返回值是布爾類型的。#編碼規(guī)范

既然”if“語句總是用于布爾值,那還有必要給每個(gè)布爾屬性都加上”is“嗎?為什么蘋果要把 Swift 語法從 view.hidden 改成 view.isHidden?我只能想到一種答案……因?yàn)?strong>“if view.isHidden”看起來更自然。

嘗試以以下原則使用“is”前綴:

如果類的某個(gè)布爾屬性/方法用于該類(公開)的實(shí)例,就有正當(dāng)理由使用“is”前綴
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

如果布爾屬性在類內(nèi)部(私有)使用,前綴就是多余的。
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

如果布爾型屬性/方法同時(shí)被私有和公開使用,那么應(yīng)該用計(jì)算屬性來返回該私有屬性值。
是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享

雖然用私有 set 并公開使用該屬性也是可以的,但上面這種方式可以實(shí)現(xiàn)封裝(encapsulation)。

封裝用于隱藏類中結(jié)構(gòu)化數(shù)據(jù)對象的值或狀態(tài),防止未授權(quán)方直接訪問。

那如果不是自己直接處理的布爾型,如果如何命名呢?

private var playerIsPlaying: Bool
private var gridConstraintIsEnabled()
“is” 需要指向某個(gè)東西:view.isHidden, “is”指向 view。上面的例子里使用了此原則,playerIsPlaying,“is”指向 player。

/if playerIsPlaying { }/ 對比 /if isPlayerIsPlaying {}/
哪個(gè)更自然?我想你已經(jīng)有答案了。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章標(biāo)題:是什么樣的步驟,使得你的ios代碼變得如此容易閱讀?大咖分享-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article46/cshdhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、App開發(fā)網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)公司、商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)