0%

【Day-3】Clean Code(上)

文章同步於it邦

前言

第三天就要來個硬的

這次將要介紹Clean Code

之後會依序介紹Clean Coder以及Clean Architecture

Clean Code這本書我相信很多公司都有擺著當精神象徵

這個主題過去也有人介紹過,這次會從裡面的案例去做延伸探討

而且每個人看過的想法也不太一樣

書中Java的範例我就不多做說明了,因為我不會寫Java

如果沒有讀過這本書的朋友,尤其是新手或是Coding Style不太好的,強烈建議看過這本書

他會對日後的你非常有幫助

今天我們先從第一章節到第五章吧(迷之音: 我有點擔心我講太多…

第二章到第五章分別是

  • 有意義的命名
  • 函式
  • 註解
  • 編排

這些單元會放在一起講解

Ch.1 - 無暇的程式碼

我們先有一個共識:

程式碼品質是確實會影響維護以及開發效率的

舉個例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class User
{
private $name;

public function __construct($name)
{
$this->name = $name;
}

public function connect()
{
return "Success to connect server, welcome" . $this->name;
}
}

上面這些最明顯有問題的就是命名

  • 屬性的命名,應該命名為user_name,而不該是name,前者我們可以很清楚的知道這個是user的name,而不是我還需要去對照class的名稱再來聯想
  • 函式也是,應該命名為connectServer

***Explicit is better than implicit.

  • The Zen of Python

意旨明瞭的程式碼(user_name, connectServer)比隱晦(name, connect)的還要好***

態度

我相信很多人都體驗過,明明一個幾分鐘的事情,卻因為架構、程式碼太髒亂而多花了很多時間

很多人(我一開始也是)都會抱怨說,阿誰誰誰一直修改怎樣怎樣的

但這件事情本身就沒有錯,因為人會一直改變,他們的需求也是

為什麼我們的架構沒辦法改變,或是做得更有彈性一點,來因應這些需求

童子軍規則

程式碼必須持續地保持整潔,這個原則不會因為時間而被改變

美國童子軍有一個簡單的規則

離開營地前,讓營地比使用前更加乾淨。
- Clean code(p.16)

也就是說我們每次在撰寫程式碼時,必須保持乾淨整潔。

Ch2~5 程式碼的部分

有意義的命名

我們掌握幾個原則

  • 名符其實,例如你的function是在做兩數相加(假設只是個單純的數學運算),你可以為他命名為addTwoNumber
  • 有意義的區別,假設你有兩個很相似的class,那info、data、數字排序(n1, n2)這些都屬於無意義的命名,因為根本分不出來是在幹嘛
  • 類別應該使用名詞或名詞片語,函式應該使用動詞或動詞片語

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class StudentController extends Controller
{
private $someFormater;

public function __construct($someFormater)
{
$this->someFormater = $someFormater;
}

public function createStudent(Request $request)
{
$newStudent = Student::create([
'student_name' => $request->student_name,
'student_email' => $request->student_email]);

return response()->json($this->someFormater($newStudent), 201);
}
}

函式

我們最需要在函式上注意的就是兩點:

  • 簡短
  • 一次只做一件事

我們舉個MVC框架最常遇到的問題,Controller已經大包到幾百幾千行去了

此時我們就可以把Controller裡面的各種功能拆給其他function去執行

保持Controller的整潔

註解

這一部分在我認為,其實最好的註解就是程式碼,也就是說,你的程式碼可以讓人一看就懂,那註解就會顯得有些多餘。

我們就舉例書中需要寫註解的情況吧

  • 解釋做某個決定的原因
  • 對後果的告誡
  • 代辦事項

編排

簡單來說就是程式的排版

例如:等號之間空格、上下間距等等

另外盡量讓變數靠近使用的地方被宣告,但因為函示非常簡短的關係,所以都會在最上方做宣告

結語

只能說Clean Code這本書要在三天內講完,真的太困難了,只能提取其中的一部分來說明

強烈建議沒有看的人去買一本來看

明天繼續講其他章節

希望我這三天內可以盡可能地講完

其實我們就盡可能地掌握幾兩個原則,就是讓人一看就懂跟看得舒服

掌握這兩個原則就不太會有寫出髒扣的問題了

參考資料

Clean Code(ch.2 ~ 5)