14.1 必須有明確順序的語句:順序與邏輯關係和依賴性有關,邏輯上須要順序排列的,後面對前面有依賴的須要順序組織;組織那些有順序邏輯的語句,最好用名字、參數、註釋等方法來顯示的代表語句之間的聯繫。c++
14.2 順序無關的語句:就近原則,聲明和使用靠攏。這樣能加強代碼的可閱讀性。(局部聚攏)算法
條件控制:if else case switch編程
15.1 if語句:首先處理正常邏輯和非正常邏輯取決於實際狀況,一般先處理正常邏輯,在邏輯很是複雜的時候能夠考慮使用衛語句或者從新梳理邏輯來減小if嵌套層數。if嵌套層數過多,不利於代碼閱讀,複雜度提升。有的時候咱們根據se或者架構師的文檔平鋪直敘的開發會形成多層if嵌套,這個時候咱們能夠先理解下se和架構師的意圖,從新編排邏輯以下降複雜度數組
15.2 case:爲case選擇有效的排列順序,正常的case狀況排在前,頻率高的case排在前;若是case中的處理邏輯很是複雜,能夠考慮將這些語句封裝成過程。 c++語言的case中要記得加break,default條件能夠用來檢測錯誤,若是全部正常邏輯沒覆蓋到,跑到default分支裏去了,說明出現了某種異常。安全
while、 for 、do while 架構
16.1 選擇循環的種類函數
計數循環:執行次數必定優化
連續求值的循環:迭代次數不必定設計
無線循環遞歸
迭代器循環:容器迭代元素
當不知道要循環多少次的時候使用循環while,當循環固定次數的時候建議使用for
16.2 循環控制:
注意事項:循環語句用大括號包起來,循環變量取名要有意義,循環語句最好不超過10行,嵌套層數小於2;循環上限或者退出界限必定要判斷好,不要形成下標越界踩內存的狀況。
16.3 輕鬆建立循環:有內到外,先寫須要循環的語句,在用循環將語句包括起來。
16.4 循環與數組的關係:許多循環都是用來操做數組的
遞歸、goto
17.1 子程序中多出返回: 子程序中有多處return的狀況,能夠進一步排查下是否能將多處return合爲一處,經過使用衛語句和邏輯整改的方法; 儘可能減小邏輯重複,嵌套過深場景。
17.2 遞歸:選擇性使用遞歸語句,除非能優雅的解決問題。遞歸在代碼可讀性上表現不太好,可是有的問題使用遞歸能優雅的解決。
遞歸對處理複雜邏輯的時候是頗有價值的,好比走迷宮(算法類用的多),實際開發過程當中,通常的邏輯均可以用循環代替遞歸,建議能用循環就不要用遞歸。
使用遞歸注意事項:確保遞歸可以中止(退出條件), 使用安全計數來防止無窮遞歸;把遞歸限制在一個子程序內(遞歸語句不要過長);注意考慮棧空間,防止棧溢出。
17.4 goto
壞處:goto影響邏輯的複雜度,代碼的易讀性,排版格式和編譯器優化
好處:減小代碼執行量,直接跳轉能夠跳過不須要執行的代碼;跳轉到指定位置,能夠設計成try catch finally的處理方式,設計成異常處理;
c++代碼編寫過程當中,建議不要寫goto代碼,須要用到goto邏輯的地方其實都是能夠經過其餘語句來替換的。
表驅動法是一種編程模式,從表裏查找信息而不使用邏輯語句 if else
18.1 表驅動法使用總則:在適當條件下,使用表驅動法可使得邏輯更簡單、更容易修改。
訪問表的方法:直接訪問、索引訪問、階梯訪問
表中存儲的內容: 數據或者動做(函數)
18.2 直接訪問表:將要使用的數據算好後放入表中,須要的時候直接取(難度在於設計表)
18.3 索引訪問表:先用一個基本數據類型的數據從一張索引表中查出一個鍵值,而後在用這個鍵查出你感興趣的主數據。主表(索引表)+ 主數據表
18.4 階梯訪問表:相似於索引表,索引的鍵爲一個過程範圍,而不是一個具體的kay值。階梯要注意階梯的端點。
19.1 布爾表達式
1.明確的使用true or false 而不是0 或 1
2. 把複雜的布爾表達式作成布爾函數,用一個好的命名來表示布爾結果
3. if判斷的布爾表達式中;確定的表達式比否認的表達式好。
4. 用括號使多個布爾表達式之間鏈接關係更清晰
5. 編譯器對布爾表達式的理解可能不一樣,有的可能把全部布爾求出來在計算布爾值,有的多是採用短路的方式,若是前一個布爾知足了條件後一個布爾就不執行了。
6.常量放在==符號左邊能夠避免由於將==錯誤寫成=而帶來的錯誤
19.2 複合語句:經過大括號包起來
19.3 空語句:用大括號代替分號;使用大括號的好處是避免錯誤、而且能夠顯示的聲明這個是一個空語句
19.4 屈服危險的深層嵌套:不超過3層; 能夠採用改變邏輯、使用衛語句、封裝子函數等方法來簡化深層嵌套。
19.5 結構化編程:三種基本的結構化編程
順序,選擇,循環
19.6 控制結構和複雜度
控制流是影響複雜度的絕大因素,將複雜語句提取爲另外一個子程序,不會下降總體的複雜度,可是會下降同一時刻所需關注的複雜度
總結:布爾是最基本的判讀邏輯,若是布爾表達式的邏輯過於複雜或者布爾表達式中的布爾邏輯過多,能夠考慮將布爾表達式單獨封裝成一個子函數或者一個語句,用一個具備實際意義的名字來接收這個布爾結果值。 應該避免寫出嵌套過深的代碼,若是嵌套過深,最方便的方法就是提取語句進行封裝,若是時間容許能夠分析使用衛語句或者改變邏輯來減小嵌套。 下降代碼的複雜度是提升代碼水平的關鍵。