主頁 > 軟體工程 > 源代碼之整潔代碼

源代碼之整潔代碼

2021-04-01 21:18:24 軟體工程

源代碼之整潔代碼

     經常在研發面試中,詢問代碼質量是什么?能講出核心點的人并不多,對于你自己代碼是否反思過代碼質量與意義嗎? 有的人寫了8年代碼,還是沒有這個意識,只能說LEVEL還是不夠高, 讓我們再來回顧下,整潔Clean Code代碼

What Is Clean Code?

  • The code can be measured with either "good" or "bad" in the code review or by how many minutes it takes you to talk about it.

  • A clean code should be elegant, efficient, readable, simple, without duplications, and well-written.

  • You should add value to the business with your code.

  • Clean code offers quality and understanding when we open a class.

  • It is necessary that your code is clean and readable for anyone to find and easily understand. Avoid wasting others' time.

Meaningful Names 有意義命名

  • Names of the classes, variables, and methods must be meaningful and clearly indicate what a method does or what an attribute is.

  • Create pronounceable names to facilitate communication.

  • Avoid acronyms and avoid confusing names, which may bring anyone who reads the code to the wrong conclusions.

  • Use names that reflect the system domain, the context, and the problems that must be solved.

Functions 函式

  • The method should be easy to read and understand.

  • The method should convey its intention.

  • The methods should be small. Another rule for small methods is that they should be even lower.

  • They must have up to 20 lines. (I think they should have up to 10 lines.)

  • Methods should only do one thing: they should do it the right way and just do it.

  • You should use names with words that say what it really does.

  • The optimal number of parameters of a method is zero, after one and two.

  • Three should be avoided, but if you think it should be used, have a good justification.

  • Parameters of the Boolean type as a parameter already clearly states that it does more than one thing.

  • Methods must do something and return something.

  • Avoid duplication.

Comments 注釋

  • One of the most common reasons for the comments is because the code is bad.

  • If you're thinking about writing a comment, then the code should be refactored.

  • Comments do not save a bad code.

  • Try to explain what the code causes to happen.

  • Comments can be useful when placed in certain places.

  • Create method names and informative variables instead of explaining the code with comments.

  • Comments can be used to express the importance of certain points in the code.

  • The best comment is one that needs to be written because your code already explained.

  • Do not write comments with redundant, useless, or false information.

  • They should not be used to indicate who changed or why, for that already exists in versioning.

  • Don’t comment code that will not be used, remove, it just pollutes the code and leaves no doubt in anyone reading.

Formatting 格式

  • Formatting should indicate things of importance since it is a developer of communication form.

  • A messy code is hard to read.

  • The readability of the code will take effect on all of the changes that will be made.

  • Try to write a class with a maximum of 500 lines. Smaller classes are easier to understand.

  • Set a limit of characters per line of code.

  • A good character limit on a line is 120.

  • Try to keep more next related concepts vertically to create a code stream.

  • Use spaces between operators, parameters, and commas.

Objects and Data Structure 物件與資料結構

  • Follow the Law of Demeter, which says that one M method of an object O can only consume services of the following types of objects:

    • The object itself, O.
    • The M parameters.
    • Any object created or instantiated by M.
    • Direct components of O.
  • Make good abstraction and encapsulation.

  • Do not make dumb objects.

  • Objects hide the data abstraction and expose methods that operate the data.

  • Data structures expose your data and do not have significant methods.

Error Handling 錯誤處理

  • Error handling should be planned carefully by all programmers.

  • When wrong things occur, we have to get it to do the right things.

  • We should give preference to launching an exception than treating it just to hide.

  • Create messages with information about the error.

  • Mention that it failed. Where was this failure? If possible, mention why it failed.

  • Look at separate business rules for errors and error handling.

  • Avoid returning a NULL in methods, preferably to return an empty object.

  • Avoid passing NULL to the methods; this can generate NullPointerExceptions.

Boundary 邊界

 

 

  • In third-party code, to avoid passing objects, APIs look forward in order to keep things in the same class.

  • Performs tests on the API's third party.

  • Study the documentation and test the third API before you start using it.

  • Check well the features you will use.

  • These steps can help increase yield when there are new updates to the API and you can only run your tests to check for this update.

  • Create tests the functionality of the API.

Unit Tests 單元測驗

  • Make sure each piece of code is doing what you expect it to do.

  • Follow the TDDs law:

    • Don't create code before you have a failing test.
    • Don't create more tests than necessary to fail. 
    • You cannot write more code than enough to pass the test that is failing.
  • Keep your test clean.

  • The tests must undergo changes in the same way that the code.

  • The dirtier the code, the more difficult test will be to maintain.

  • Use the F.I.R.S.T rule for testing:

    • The test is fast-running.
    • The tests are independent of other.
    • The test is repeatable in various environments.
    • The test is self-validating.
    • The test is timely.
  • The test is as important as the production code.

Classes 類

  • By default, Java classes should start with the variables:

    • Static and constantly public.
    • Static and variable private.
    • Instances and variables privates.
    • Soon after comes the functions.
  • The class name should represent your responsibility.

  • The class must have only one responsibility.

  • To know the size of the class is ideal or we should not measure her responsibility.

  • You should try to make a brief description of the class.

  • The methods should be:

    • Small...
    • ...and even lower.
    • They must have only one responsibility.

Systems 系統

  • It is important to recognize and separate responsibilities of a system.

  • It should be separate and modularize the logic execution, allowing an independent strategy for solving application dependency.

  • Is important to take care of dependency injections and to allow only objects to take care of the business of logic.

  • It is very difficult to create a system properly first. It must be made available to the story, then refactored, and then expanded to continue implementing new stories.

  • To get to the point that TDD is necessary, you need refactoring and clean code.

  • We must build POJOs-based logic through testing and evolve from simple to interconnect the various aspects necessary.

Emergence

Here are the rules that are given by Kent Beck to create good designs:

  • Run all tests. They verify that the system behaves as expected.
  • Eliminate duplication because duplicate code brings additional work.
  • To express the intention of the programmer, use more expressive code to facilitate maintenance. Choose good names for functions, classes and tests shouldn’t be small and well written. 
  • Minimize the number of classes and methods. Following this pattern can ignore it if the classes are very small.
  • Apply all knowledge to improve the design during refactoring. Increase cohesion, reduce coupling, separate responsibilities, reduce classes and methods, choose the best names.

Even applying it once, you will not be able to have good software. You need to do this over and over again to achieve continuous improvement.

Concurrence 并發

  • The concurrency is an aspect that may be present in the codes.

  • Uncoupling allows for improving the yield and structure of an application.

  • The concurrency can improve response times and application efficiency.

  • You should consider the following ideas about the concurrence:

    • It injects a certain overload.
    • It can be complex to operate.
    • Errors caused by it can be difficult to reproduce.
    • It usually requires design changes.
  • The concurrence problem is that different segments of an application may be following tangled multi-threading, which can cause unexpected problems in normal situations.

  • For concurrence reasons, it is important that each class has a unique responsibility.

  • Create sections that are synchronized and minimized. Running tests often is the best way to find any errors in the code. However, it is difficult to do when there are concurrence tests.

  • A good way to test is to insert codes for testing in the middle of the implemented code.

Successive Refinement 精益求精

  • The code-only work is not enough to have a good code.

  • Professionals who care only about the code that works cannot be considered professional.

  • We should ignore that we have no time to refactor to one code. The code that was not taken care of today can become a problem after becoming a problem for the team because no one will want to mess with it.

  • Try not to let the code rot. It is much cheaper to create a clean code than cleaning a rotten code, as a move in a tangle can be an arduous task.

  • The solution, then, comes down to maintaining the cleanest code possible and as simply as possible without ever letting it begin to rot.

JUnit

  • Look to cover tests each (not every method, but each code line).

  • No code is immune to improvement, and each of us has a responsibility to make the code a little better than we found it.

  • Refactoring is an iterative process full of trial and error, inevitably converging to something that we feel is worthy of a professional.

Refactoring 重構

 

 

  • Before making any kind of refactoring, it is important to have good coverage tests.

  • After increasing or creating test coverage, you can begin to leave the clearest code and fix some bugs.

  • Now, after leaving the code clearer, someone else can probably clean it even more.

Java

  • Avoid long lists of import using *.
  • Do not inherit constants. Instead, use enums constants.

Names 命名

  • Choose descriptive names.
  • Choose names at the appropriate level of abstraction.
  • Use standard nomenclature where possible.
  • Use long names for long scopes.
  • Avoid encodings.
  • Names should describe side effects.

 

結論
       整潔代碼不是遵循一組規則撰寫的,您不能僅通過學習所做的作業清單就成為軟體專業人員,專業精神和工匠精神來自價值和紀律,在構建代碼時遵循價值和紀律,來判斷應該做和不應該做的事情,

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/270907.html

標籤:其他

上一篇:初見,結對編程!(上)

下一篇:Mark一個代碼量統計工具-Statistic

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more