OCLint官方規(guī)則文檔中文說明

本文基于OClint官方文檔進行翻譯,本章順序與官網(wǎng)相同,如果查看后仍不能明白問題原因,請前往官方文檔查看示例,官方文檔地址

Basic

1.Bitwise operator in conditional

說明:對于按位與或者按位或的情況,OClint認為這不便于理解。

2.Broken Nil Check

說明:nil檢查,在某些情況會返回相反的結果

3.Broken Null Check

說明:NULL檢查會導致程序crash

4.Broken Oddness Check

說明:X%2==1對負數(shù)不起作用,需要使用X&1 ==1或者X%2!=0來代替

5.collapsible if statements

說明:判斷兩個相連的if是否能夠合并

6.Constant Conditional Operator

說明:條件是否永遠為true或者永遠false?

7. constant if expression

說明:if判斷中的值是恒定的,比如if(true),其中的值永遠為真。

8.dead code

說明:表示標示位置有永遠不會被執(zhí)行的代碼。

9.Double Negative

說明:表示不需要使用雙重否定,形如!!1,~~1等,因為這并沒有用處。

10.ForLoop Should Be WhileLoop

說明:表示此處不應該用for循環(huán)而應該使用while循環(huán)。

10.Goto Statement

說明:提示謹慎使用Goto語句。

11.Jumbled Incrementer

說明:混亂的增量,多數(shù)出現(xiàn)在嵌套for循環(huán)中,如果不是因為筆誤寫錯了,那么這種混亂的寫法容易造成代碼閱讀的問題。

12.Misplaced Null Check

說明:Null Check被放錯地方,在OC中向一個空指針發(fā)送消息并不會發(fā)生什么,但是在C或者C++中可能會引起crash,同時可能會造成代碼閱讀的困惑。

13.Multiple Unary Operator

說明:多重一元操作很難被理解。形如:int b = -(+(!(~1)));)

14.Return From Finally Block

說明:在最后一個block中return的做法是不推薦的。

15.Throw Exception From Finally Block

說明:不要在最后一個BLOCK中拋出異常,因為這樣的情況可能會掩蓋其他異?;蛘叽a缺陷。

Cocoa(OC)

1.Must Override Hash With IsEqual

說明:如果重寫isEqual,一定也要重寫hash,原名為ObjCVerifyIsEqualHash。

2.Must Call Super

說明:提示需要增加call super的情況,例如layoutSubviews方法,需要添加[super layoutSubviews].

3.Verify Prohibited Call

說明:當一個方法聲明時含有attribute((annotate("oclint:enforce[prohibited call]"))),它的所有調用都是被禁止的。

4.Verify Protected Method

說明:當一個方法聲明含有attribute((annotate("oclint:enforce[protected method]")))時,只有它和它的子類可以調用,因為OC中沒有Protected,可以用這種方式達到Protected效果。

5.Subclass Must Implement

說明:子類必須實現(xiàn),哪怕是一個抽象方法。

Convention

1.Avoid Branching Statement As Last InLoop

說明:表示不要在for循環(huán)或者其他循環(huán)語句的末尾使用break.

2.Base Class Destructor Should Be Virtual Or Protected

說明:基類的析構函數(shù)要么是公共的虛函數(shù),要么是保護性的非虛函數(shù)。

3.covered switch statements dont need default

說明:因為已經(jīng)覆蓋了所有的switch分支,所以不需要寫default break部分。

4.Default Label Not Last In Switch Statement

說明:DeFault沒有放在Switch的最后一行。

5.Destructor Of VirtualClass

說明:本規(guī)則強制要求虛類的析構函數(shù)必須也是虛函數(shù)。

6.Inverted Logic

說明:反轉邏輯讓人難以理解。一般是指用(!a)而非(a)來判斷讓人難以理解。

7.Missing Break In Switch Statement

說明:在Switch中如果缺少break很容易引入bug.

8.Non Case Label In Switch Statement

說明:不要把label放到switch中。

9.ivar assignment outside accessors or init

說明:意思是某些成員的初始化不在getter/setter或者init中,而在其他位置。

10.parameter reassignment

說明:通常認為是賦值問題,具體問題需要具體判斷,有的時候是因為對傳來的參數(shù)進行了重新賦值,大多數(shù)時候不能修改。

11.use early exits and continue

說明:意思是,有其他出口時,先執(zhí)行其他出口,再繼續(xù)代碼。

12.Switch Statements Should Have Default

說明:如果并不是每一個分支都有一條路徑,那么switch重必須含有default.

13.Too Few Branches In Switch Statement

說明:Switch中分支很少,可以用if代替。

Design

1.Avoid Default Arguments On Virtual Methods

說明:避免給虛函數(shù)設置默認參數(shù),給虛函數(shù)設置默認參數(shù)會破壞多樣性和引起不必要的層次結構發(fā)雜性。

2.Avoid Private Static Members

說明:避免使用私有靜態(tài)成員,靜態(tài)成員很容易破換封裝性。

Empty

1.Empty Catch Statement

說明:主要發(fā)生在一個異常exception被catch到了,但是卻沒有對此做任何操作。

2.Empty Do While Statement

說明:在do-while循環(huán)中沒有做任何事情。

3.Empty Else Block

說明:在if中有操作,else中卻是空的,此時else可以被安全移除。

4.Empty Finally Statemen

說明:在@finally中沒有進行任何操作。

5.Empty For Statement

說明:for循環(huán)為空。

6.Empty If Statement

說明:if中代碼為空。

7.Empty Switch Statement

說明:Switch中代碼為空。

8.Empty Try Statement

說明:try中代碼為空。

9.Empty While Statement

說明:While循環(huán)中沒有代碼。

Migration

1.Replace With Boxed Expression

說明:用來說明umberWithInt和stringWithUTF8String:getenv的簡寫形式。

2.Replace With Container Literal

說明:用來說明arrayWithObjects和dictionaryWithObjects的簡寫形式。

3.replace with number literal

說明:用來說明numberWithInt和numberWithBOOL的簡寫形式。

4.replace with object subscripting

說明:用來說明objectAtIndex和objectForKey的簡寫形式。

Naming

1.Long Variable Name

說明:命名太長。

2.Short Variable Name

說明:命名過短。

Redundant

1.Redundant Conditional Operator

說明:冗余的條件運算符,可以一步到位的判斷,不需要進行多余比較。

2.Redundant If Statement

說明:if判斷是多余的。

3.Redundant local variable

說明:return中的參數(shù)可以使用一個表達式來表示。

4.RedundantNilCheck

說明:在C或者C++中適用的判空檢查在OC中是多余的。因為在OC中向空對象發(fā)送消息會返回false值。

5.UnnecessaryElseStatement

說明:如果if中已經(jīng)帶有return,則不需要寫else語句。

6.Unnecessary Null Check For Dealloc

說明:在Dealloc中不需要判空,就能Delete元素。

7.useless parentheses

說明:用來表示有些括號是不必要的。

Size

1.High Cyclomatic Complexity

說明:圈復雜度過高。V(G)=e-n+2。其中,e表示控制流圖中邊的數(shù)量,n表示控制流圖中節(jié)點的數(shù)量,或者V(G)=區(qū)域數(shù)=判定節(jié)點數(shù)+1。

2.Long Class

說明:類行數(shù)太多。

3.Long Line

說明:一行字數(shù)過多。

4.Long Method

說明:在一個方法中試圖完成很多事情,在一個方法中應該完成一個功能并把它做好。

5.High Ncss Method

說明:其實是指某個代碼塊中代碼行數(shù)過多,查看代碼塊中代碼是否能拆分,公共功能能否提供一個公共借口。

6.Deep Nested Block

說明:層次太深,多層嵌套。

7.High NPath Complexity

說明:NPath復雜度是一個方法中各種可能的執(zhí)行路徑總和,一般把200作為考慮降低復雜度的臨界點,這里提示NPath復雜度過高。

8.Too Many Fields

說明:一個類中有太多的域表示它的東西太多了,需要進行適當?shù)某橄蟆?/h3>

9.Too Many Methods

說明:一個類中方法過多。

10.Too Many Parameters

說明:一個方法中參數(shù)過多。

Unused

1.Unused Local Variable

說明:沒有被使用的局部變量。

2.Unused Method Parameter

說明:沒有被使用的方法參數(shù),請謹慎修改

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,932評論 0 33
  • 所有的編譯警告的名稱:參見網(wǎng)址:http://fuckingclangwarnings.com注意這篇文章的創(chuàng)建時...
    zhangyin閱讀 11,202評論 0 53
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,694評論 19 139
  • 每次我被路上的石頭絆住,郁郁寡歡,難以入眠的時候,都會重溫一遍《人間世》這部紀錄片。有些我們一直糾結、一直無法釋懷...
    BBQ四寶閱讀 633評論 0 1
  • 第一站,觀前街,開車繞了好久才找到住處,收拾好行李開始去蹦噠! 剛剛逛了半個小時,就下起了蒙蒙細雨,化身江南女子,...
    李哼哼閱讀 581評論 0 0

友情鏈接更多精彩內(nèi)容