Objective-C代碼規(guī)范

最近感覺自己老了,一直呆在小公司,感覺到了疲憊與苦澀,雖然并沒有如老板所想已達(dá)到瓶頸,依然感覺還有好多東西可學(xué)和想學(xué),不過我的前面的確是有一堵無形的墻在擋住我前行的腳步,我希望自己能夠停下來,靜下心來,對自己的以往的工作進(jìn)行總結(jié)和反思, 所以期望寫一系列的文章來總結(jié)總結(jié)自己的經(jīng)驗,反思自己,希望在反思中有進(jìn)一步的提高!!

這一篇總結(jié)一位老碼農(nóng)幾年編碼的所思所想所感, 講述代碼規(guī)范的同時也解釋為啥要這么干

  1. 為什么要有代碼規(guī)范

代碼規(guī)范的目的是"",給N久之后的自己, 給其他人讀, 試想過了半年之后,你再看代碼, 你是否能很快就看懂自己曾經(jīng)寫過的程序呢?我覺得維護(hù)過別人寫的代碼的人都能明白這個問題.

  1. 陷阱和錯誤

  • 使用前綴
    比如項目名稱叫做TaoBao,則前綴為TB, 前綴的意義在于避免沖突,特別是與第三方代碼的沖突,以前經(jīng)常碰到這種坑,某些惡心的第三方庫竟然前綴都不加就滿世界的發(fā)布,特別是一些基礎(chǔ)類,如Base64.h
  • 條件陷阱
    這個藏得有些深,經(jīng)常會犯錯,具體如
    <pre>if (v1 = 1) { // 判斷V1是否等于1 }</pre>這段代碼本意是判斷v1是否等于1,結(jié)果v1被賦值為1了,并且因為賦值得到的結(jié)果是True,所以if 代碼塊也會被執(zhí)行
    針對這種情況,一般判斷采用反寫,如下代碼,如果寫錯,立馬報錯就可以改過來了
    <pre>if (1 = v1) { // 判斷V1是否等于1,錯誤會立即報錯 }</pre>
  • 魔法數(shù)字
    這個也是挺惡心的, 經(jīng)常會碰到這樣的代碼
    <pre>int result = v1 + 7788</pre>從始至終沒有解釋下7788是什么? 這就是魔法數(shù)字, 為了避免這種情況, 將某些常量命名,
    <pre>#define TBBeginTagOfCovers 7788 int result = v1 + TBBeginTagOfCovers</pre>
  1. 怎樣讓代碼整潔

  • 類命名

    • 類名具有意義,能夠一眼就知道干嘛的
    • 首字母大寫
    • 駱駝文

    類的命名主要有以上三個規(guī)則, 舉例如下,如一個查看圖片預(yù)覽的視圖控制器, 則命名為 ImagePreviewController, 首字母i大寫, ImagePreview交代目的, Controller告知這是一個控制器.(如果你不知道神馬是駱駝文, 那我就瞪著眼的告訴你駱駝文就像駝峰一樣,如AppleTree,一高一低快速區(qū)分單詞)

  • 變量\常量
    常量通俗用法是首字母大寫, 駱駝文寫法,如 int MaxSectionNumber;
    變量首字母小寫, 駱駝文寫法, 如usernameField, nameLabel, 這種命名有助于理解用途,usename表示用戶名,field表示可以輸入?yún)^(qū)域,nameLabel表示名稱,label表示這是一個UILabel

  • 方法
    方法用的比較講究一點(diǎn),具體例子如下,首先名稱名要指明方法的用途,其次,格式"-空格(返回值)方法名:(類型)參數(shù)名空格{換行}"
    <pre>- (void)doSth:(NSString *)paramName {// -之后是一個空格,尾部{之前有個空格 // do sth }</pre>

  • 注釋,
    Objective-C支持兩種注釋
    <pre>// 注釋一行代碼,注意注釋正文和斜桿間留一個空格(為了更優(yōu)美的閱讀體驗) /* 多行注釋, 包括在/* 和*/之間都是注釋內(nèi)容 */</pre>

    • 注釋常量\變量
      我一般建議對變量(常量)的注釋添加在其后面, 這樣有助于相似屬性擺在一起, 相比于"注釋一行,變量一行"的做法閱讀起來更順, 末尾有強(qiáng)迫癥的可以對齊
      <pre>// 廣告類型 extern NSString *const RE_AD_TYPE_PRODUCT; //產(chǎn)品 extern NSString *const RE_AD_TYPE_EXHIBITOR; //展商 extern NSString *const RE_AD_TYPE_SESSION; //會議</pre>這種方式是不是比下面的看起來更好看一些呢?
      <pre>//產(chǎn)品 extern NSString *const RE_AD_TYPE_PRODUCT; //展商 extern NSString *const RE_AD_TYPE_EXHIBITOR; //會議 extern NSString *const RE_AD_TYPE_SESSION;</pre>

    • 注釋方法
      寫法見下圖, 內(nèi)容與*間留一個空格, 不同的內(nèi)容間留空行, 頂部寫方法的用途,可以一行或多行,看需要,這里可以講明下方法的思路,一些邏輯的說明,@param則解釋參數(shù)的類型,用途,如果有多個候選,則講明每個候選的意義

      注釋方法

      簡單方法采用單行注釋,說明方法用途即可,如果方法名夠清晰,則不要使用注釋

      這里舉個失敗的例子,如代碼更新了,但是注釋未更新,或者注釋不明確
      失敗注釋及修正方法

    • 注釋過程
      我很喜歡下面的寫法, 在動筆寫代碼前先將明確邏輯, 然后才是按照步驟完成代碼


      注釋過程
  • 代碼組織

    • 通過#pragma mark -分隔代碼塊
      這個用法有兩種,一種是帶橫線的(mark后面帶橫線), 一種是不帶橫線的(mark后面不帶橫線), 如下圖所示, 帶橫線可以將模塊區(qū)分, 不帶橫線可以對模塊內(nèi)區(qū)分,這個建議多用, 有助于代碼整潔
      pragma mark 用法
    • BadSmell(KentBeck提出的概念), 當(dāng)你看到一段代碼在不同的地方多次出現(xiàn)的時候,你就應(yīng)該嗅出壞味, 然后將其抽出來在多個地方調(diào)用,而不是導(dǎo)出copy paste.
    • 靈活使用getter
      這是最近學(xué)到的一招, 為了讓代碼更加優(yōu)美, 將初始放入getter中, 這樣在真正使用的時候?qū)W⑴渲镁秃昧?/p>

      getter的使用
    • UIViewController模板
      感謝 @mastertsx @十一歲的加重,
      我總結(jié)了一個UIViewController的模板,有興趣的童鞋可以將它加為一個snippets, 以后新的controller就不用每次都重復(fù)機(jī)械運(yùn)動了(有建議或者意見請留言),地址是UIViewControllerTemplate
  1. 怎樣讓邏輯通順

    • 寫代碼前整理思路, 確定實現(xiàn)方案再動手
    • 多寫工具類, 將功能抽調(diào)成工具類, 真正使用者只是使用工具, 而工具可復(fù)用
    • 多看, 多思, 多實踐
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勒极,一起剝皮案震驚了整個濱河市规丽,隨后出現(xiàn)的幾起案子称近,更是在濱河造成了極大的恐慌,老刑警劉巖谦疾,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異犬金,居然都是意外死亡念恍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門晚顷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峰伙,“玉大人,你說我怎么就攤上這事该默⊥ィ” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵栓袖,是天一觀的道長匣摘。 經(jīng)常有香客問我,道長裹刮,這世上最難降的妖魔是什么音榜? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮捧弃,結(jié)果婚禮上赠叼,老公的妹妹穿的比我還像新娘。我一直安慰自己违霞,他們只是感情好梅割,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著葛家,像睡著了一般户辞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上癞谒,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天底燎,我揣著相機(jī)與錄音刃榨,去河邊找鬼。 笑死双仍,一個胖子當(dāng)著我的面吹牛枢希,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播朱沃,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼苞轿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逗物?” 一聲冷哼從身側(cè)響起搬卒,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翎卓,沒想到半個月后契邀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡失暴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年坯门,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗扒。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡古戴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出矩肩,到底是詐尸還是另有隱情允瞧,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蛮拔,位于F島的核電站述暂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏建炫。R本人自食惡果不足惜畦韭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肛跌。 院中可真熱鬧艺配,春花似錦、人聲如沸衍慎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稳捆。三九已至赠法,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乔夯,已是汗流浹背砖织。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工款侵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侧纯。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓新锈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眶熬。 傳聞我的和親對象是個殘疾皇子妹笆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容