首頁  >  文章  >  後端開發  >  6個編寫優質乾淨程式碼的技巧

6個編寫優質乾淨程式碼的技巧

ringa_lee
ringa_lee原創
2017-09-17 10:05:171338瀏覽

摘要:作為一名開發者,編寫一手乾淨的程式碼很重要,所以在本文中作者先列舉出編寫乾淨程式碼的一些好處,再提出6個技巧用於編寫乾淨程式碼,供開發者進行參考學習。 ...

寫乾淨的程式碼並不是一件容易的事情,這需要嘗試不同的技巧和實踐。問題是,在這個問題上有太多的實踐和技巧,因此開發人員很難進行選擇,所以要把這個問題簡化一下。在本文中,將首先討論編寫乾淨程式碼的一些好處,然後將討論6個技巧或實踐,用於編寫最常用的乾淨程式碼。

以下是目錄內容:

寫乾淨程式碼的好處 
1. 更容易開始並延續一個專案 
2.有利於團隊新進員工培訓 
3.更容易遵循編碼模式

寫乾淨程式碼的技巧 
1.編寫可讀的程式碼 
2.為變數、函數和方法使用有意義的名稱 
3.讓每個函數或方法只執行一個任務 
4.使用註解來解釋程式碼 
5.保持程式碼風格一致性 
6.定期檢查你的程式碼

關於寫乾淨程式碼的一些想法

#寫乾淨程式碼的好處

先來了解寫乾淨程式碼的一些好處。其中一個主要好處是,乾淨的程式碼可以減少花在閱讀上的時間和理解程式碼的時間。凌亂的程式碼會減慢任何開發人員的速度,使開發者的工作變得更加困難。程式碼越混亂,開發人員就越需要花更多的時間去充分理解它,這樣才能使用這些程式碼。而且,如果程式碼太亂,開發人員可能會決定停止閱讀這些程式碼,並自己從頭開始編寫。

1.更容易開始和繼續一個專案 
先用一個簡單的例子來說明這個問題。假設在很長一段時間後我們回到了之前的一個項目,也許在這段時間是一位客戶聯繫我們去做了另一項工作。現在,想像一下,那時如果沒有編寫乾淨的程式碼,那麼在第一眼看到程式碼之後,該是有多糟糕和混亂。而且,也可以知道從當初離開的地方開始編碼有多困難。

因此,現在必須花更多的時間在專案上,因為我們需要理解先前編寫的程式碼。這本來是可以避免的,如果從一開始就編寫乾淨的程式碼,然而現在必須為此付出代價。而且,舊程式碼是如此混亂和糟糕,以至於我們可能決定從頭開始。客戶聽到這些消息後可能不會高興。

另一方面,乾淨的程式碼通常就沒有這個問題。假設前面的例子是相反的情況,以前的程式碼是乾淨和優雅的,那麼理解它需要多長時間?也許只需要讀幾分鐘的程式碼就能理解所有的工作原理,而且我們可能已經開始寫一段時間了,所以在這種情況下花的精力將明顯小於第一個案例,同時,客戶也不會太在意。

這是編寫乾淨程式碼的第一個好處,而且,這不僅適用於自己的項目,也適用於其他開發人員的工作。乾淨的程式碼可以更快地啟動工作,任何人都不需要花費數小時來研究程式碼,相反,我們可以直接進入工作。

2.有利於團隊新員工訓練 
寫乾淨程式碼的另一個好處與第一個好處是密切相關的,那就是可以讓新員工更容易更快地使用代碼。假設我們需要雇用一個開發人員,那麼她要花多長時間才能理解程式碼並學會使用它呢?當然這要視情況而定。如果我們的程式碼很亂,寫得很差,她就需要花更多的時間來學習程式碼。另一方面,如果程式碼乾淨、易讀、簡單易懂,她將能夠更快地開始她的工作。

有些人可能會說,這不是個問題,因為其他開發人員可以幫助她。當然這是正確的,但是幫助只應該花很短的時間,是兩三次或一兩天,而不應該是兩三個星期。所以,決定僱用另一個開發人員的目的,是來加速我們的工作,而不是減慢速度,也不是花更多的時間來幫助她學會使用程式碼。

當我們努力寫出乾淨的程式碼時,其他人就會向我們學習,也就更容易跟著寫出乾淨的程式碼。當然,仍然需要留出一些時間來幫助每個新開發人員了解和理解程式碼。當然,我的意思是幾天,而不是幾週。此外,乾淨的程式碼將幫助團隊帶來更多的開發人員,並同時幫助他們理解程式碼。簡單地說,程式碼越簡潔就越容易解釋,誤解就越少。

3.更容易遵循編碼模式 
有一件事需要記住,理解和學習如何使用程式碼是一回事。然而,這只是個開始,同時也需要確保開發人員能夠願意遵循我們的編碼模式。當然,使用乾淨的程式碼比混亂的程式碼更容易實現這個目標。這是很重要的,因為團隊不僅想要編寫乾淨的程式碼,而且還一直保持這種模式,這也是需要長期思考的。

另外,如果開發人員不遵循目前的編碼模式該怎麼辦? 這個問題通常可以自行解決。假設有一群人在同一個代碼基礎上工作,其中一個開始偏離標準樣式。然後,團隊的其他成員將推動這個開發人員遵循標準。她會接受建議,因為她不想離開這個團隊。

還有一種情況,開發人員會說服團隊的其他人採納並遵循自己的編碼模式。如果開發人員提出的編碼模式更乾淨,並且能帶來更好的結果,這當然是件好事。的確,編寫和保持乾淨的程式碼並不意味著應該忽略任何改進它的機會,我認為應該始終對目前的做法保持可改進的態度,並努力尋找改進的機會。

因此,如果一個開發人員偏離了目前的模式,同時她的模式也更好,那麼我們做出改變也許會更合適。所以在嘗試其他模式之前,不應該忽略其他人的編碼實踐,同時我們應該繼續尋找改進的空間。最後,第三種情況。開發人員決定既不採用我們的實踐,也不說服我們採用她的實踐。因為她將決定離開團隊。

寫乾淨程式碼的技巧

現在除了討論寫乾淨程式碼的好處,也是時候學習一些技巧來幫助我們實現這個目標了。正如將在以下看到的,乾淨的程式碼包含並遵循著一些方法。這些方法使程式碼更乾淨、易於閱讀、更易於理解、更簡單。當然沒有必要實施所有的方法,實施並遵循一兩項措施就足以帶來正面的結果。

1.編寫可讀的程式碼 
的確,所寫的程式碼將會機器解釋,然而這並不意味著應該忽略程式碼的可讀性和可理解性,因為在將來總會有另一個人會使用我們寫的程式碼。即使讓別人無法存取我們的程式碼,但我們自己也可能在將來又重新拾起這些程式碼。基於這些原因,讓程式碼便於閱讀和理解是符合我們自己的利益的。那麼如何實現呢?

最簡單的方法是使用空格。在發布程式碼之前,可以縮減程式碼,但是沒有必要讓程式碼看起來很小型化。相反,可以使用縮排、換行和空白行來使程式碼結構更具可讀性。當決定採用這種方式時,程式碼的可讀性和可理解性就會顯著提高。然後,看著程式碼就可以更容易理解它了。來看兩個簡單的例子。 
程式碼:

// Badconst userData=
[{userId: 1, userName: 'Anthony Johnson', memberSince: '08-01-2017', fluentIn: [ 'English', 'Greek', 'Russian']},
{userId: 2, userName: 'Alice Stevens', memberSince: '02-11-2016', fluentIn: [ 'English', 'French', 'German']},
{userId: 3, userName: 'Bradley Stark', memberSince: '29-08-2013', fluentIn: [ 'Czech', 'English', 'Polish']},
{userId: 4, userName: 'Hirohiro Matumoto', memberSince: '08-05-2015', fluentIn: [ 'Chinese', 'English', 'German', 'Japanese']}];
// Betterconst userData = [
  {
    userId: 1,
    userName: 'Anthony Johnson',
    memberSince: '08-01-2017',
    fluentIn: [      'English',      'Greek',      'Russian'
    ]
  }, {
    userId: 2,
    userName: 'Alice Stevens',
    memberSince: '02-11-2016',
    fluentIn: [      'English',      'French',      'German'
    ]
  }, {
    userId: 3,
    userName: 'Bradley Stark',
    memberSince: '29-08-2013',
    fluentIn: [      'Czech',      'English',      'Polish'
    ]
  }, {
    userId: 4,
    userName: 'Hirohiro Matumoto',
    memberSince: '08-05-2015',
    fluentIn: [      'Chinese',      'English',      'German',      'Japanese'
    ]
  }
];

程式碼:

// Badclass 
CarouselLeftArrow extends Component{
render(){
return ( <a href="#" className="carousel__arrow carousel__arrow--left" onClick={this.props.onClick}> <span className="fa fa-2x fa-angle-left"/> </a> );}};
// Betterclass 
CarouselLeftArrow extends Component {
  render() {    return (
      <a
        href="#"
        className="carousel__arrow carousel__arrow--left"
        onClick={this.props.onClick}
      >
        <span className="fa fa-2x fa-angle-left" />
      </a>
    );
  }
};

2.为变量、函数和方法使用有意义的名称 
来看一看第二个技巧,它将帮助我们编写可理解和干净的代码。这个技巧是关于变量、函数和方法的有意义的名称。“有意义的”是什么意思?有意义的名字是描述性足够多的名字,而不仅仅是编写者自己才能够理解的变量、函数或方法。换句话说,名称本身应该根据变量、函数或方法的内容和使用方式来定义。 
代码:

// Badconst fnm = ‘Tom’;
const lnm = ‘Hanks’const x = 31;
const l = lstnm.length;const boo = false;
const curr = true;const sfn = ‘Remember the name’;
const dbl = [‘1984’, ‘1987’, ‘1989’, ‘1991’].map((i) => {  
return i * 2;
});
// Betterconst firstName = ‘Tom’;
const lastName = ‘Hanks’const age = 31;
const lastNameLength = lastName.length;
const isComplete = false;const isCurrentlyActive = true;
const songFileName = ‘Remember the name’;
const yearsDoubled = [‘1984’, ‘1987’, ‘1989’, ‘1991’].map((year) => {  
return year * 2;
});

然而需要注意的是,使用描述性名称并不意味着可以随意使用任意多个字符。一个好的经验则是将名字限制在3或4个单词。如果需要使用超过4个单词,说明这个函数或方法需要同时执行很多的任务,所以应该简化代码,只使用必要的字符。

3.让一个函数或方法只执行一个任务 
当开始编写代码时,使用的函数和方法看起来就像一把瑞士军刀,几乎可以处理任何事情,但是很难找到一个好的命名。另外,除了编写者,几乎没有人知道函数是用来做什么的以及该如何使用它。有时我就会遇到这些问题,我在这方面做的很不好。

然后,有人提出了一个很好的建议:让每个函数或方法只执行一个任务。这个简单的建议改变了一切,帮助我写出了干净的代码,至少比以前更干净了。从那以后,其他人终于能够理解我的代码了,或者说,他们不需要像以前一样花很多时间去读懂代码了,功能和方法也变得更好理解。在相同的输入下,总是能产生相同的输出,而且,命名也变得容易得多。

如果你很难找到函数和方法的描述性名称,或者需要编写冗长的指令以便其他人可以使用,那请考虑这个建议,让每个函数或方法只执行一个任务。如果你的功能和方法看起来像瑞士军刀一样无所不能,那请你执行这个方法,相信我,这种多才多艺不是一种优势。这是一个相当不利的情况,可能会产生事与愿违的结果。

附注:这种让每一个函数或方法只执行一项任务的做法被称为保持纯函数。这种编码实践来自于函数式编程的概念。如果你想了解更多,我推荐阅读《So You Want to be a Functional Programmer series[4]》。 
代码:

// Examples of pure functionsfunction subtract(x, y) {
    return x - y;
}function multiply(x, y) {
    return x * y;
}// Double numbers in an arrayfunction doubleArray(array) {
  return array.map(number => number * 2)
}

4.更容易遵循编码模式 
不管多么努力地为变量、函数和方法想出有意义的名字,代码仍然不可能完全清晰易懂,还有一些思路需要进行解释。问题可能不是代码很难理解或使用,相反,其他人可能不理解为什么要实现这个函数或方法,或者为什么要以特定的方式创建它。意思是,创建函数或方法的意图还不清楚。

有时可能不得不采用非传统的方法来解决问题,因为没有足够的时间来想出更好的解决方案,这也很难用代码来解释。所以,通过代码注释可以帮助解决这个问题,也可以帮助我们向其他人解释为什么写了这个方法,为什么要用这种特定的方式来写,那么其他人就不必猜测这些方法或函数的用途了。

更重要的是,当我们使用注来解释代码后,其他人可能会找到一个更好的方法来解决这个问题并改进代码。这是有可能的,因为他们知道问题是什么,以及期望的结果是什么。如果不知道这些信息,其他人就很难创建更好的解决方案,或者他们可能不会去尝试,因为他们认为没有必要去修改创建者自己的想法。

因此,每当自己决定使用一些快速修复或非传统的方法时,要用注释来解释为什么这么做。最好是用一两行注释来解释,而不用别人来猜测。

也就是說,我們應該只在必要的時候使用註釋,而不是解釋糟糕的程式碼。編寫無窮無盡的註釋將無助於將糟糕的程式碼轉換成乾淨的程式碼。如果程式碼不好,應該透過改進程式碼來解決這個問題,而不是添加一些如何使用它的說明。編寫乾淨的程式碼更重要。

5.保持程式碼風格一致性 
當我們有自己喜歡的特定編碼方式或風格時,就會在任何地方一直使用它。但在不同的專案中使用不同的編碼風格不是一個好主意,而且也不可能自然地回到以前的程式碼,所以仍然需要一些時間來理解在專案中使用的編碼風格。

最好的方法是選擇一套編碼方式,然後在所有的專案中堅持使用。這樣的話,回到之前的舊程式碼會變得更容易。當然,嘗試新的編碼方式是一件好事,它可以幫助我們找到更好的方法來進行工作。但是最好是在不同的實驗項目或練習上嘗試不同的編碼風格,而不是在主要項目上進行。

另外,當我們決定做一些試驗的時候,就應該嘗試多次練習,應該花時間徹底地做好。只有當真正確信喜歡這種做法,並且對它感到滿意時,才應該去實施它。而且決定這樣做的時候,最好是應用在所有的專案中。是的,這需要時間,這也會促使我們正確地思考。

6.檢查你的程式碼

This is the last tip. It’s not just about writing clean code, but there’s also the final piece of work that needs to be done, which is maintaining clean code. We should check the code regularly and try to improve it. Otherwise, if our old code is not reviewed and updated, it will quickly become outdated, just like our devices. If you want your codes to stay in tip-top shape, you need to update them regularly.

The same is true for code you use every day. The code will become more complex and confusing, so avoid this and keep the code clean. The only way to achieve this is to review our code regularly. In other words, we need to keep it. For projects that you no longer care about in the future, this may not be necessary, but for others, maintaining the code is part of the job.

Some Thoughts on Writing Clean Code

The six practices discussed today may not be the most impactful, and they may not be the most important, but these are the ones experienced developers use most often. mentioned, which is why I chose them. I hope these practices or tips help you start writing clean code. Now, as with all things, the most important thing is to get started. So, pick at least one tip and give it a try.

以上是6個編寫優質乾淨程式碼的技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn