Unity C# | Clean Code #2 函式

更新於 2023/04/05閱讀時間約 4 分鐘

一、前言

  這篇文章將會分享 Clean Code 關於函式的重點,內容主要以個人閱讀後有印象的部分著手,有興趣了解更多請自行購買這本書。

二、Clean Code

  這本書出自於某一位程式設計的大師,他為程式設計建立了一個程式設計的流派,Clean Code 對每一位程式設計師的意義都不盡相同,對某些人來說,這是維護、命名的準則,對某些人來說,則是程式開發的架構與雛形。

1. 簡潔

  這本書最為著名的就是簡潔,簡單扼要的程式邏輯、清楚易懂的程式設計知識與架構,這是它廣為流傳的核心守則,這本書不會實際教導如何寫程式,它會把寫程式要注意、要避免的事情一步步告訴設計師。

2. 直覺

  其中最重要的一件事情,是Clean Code 強調程式是一種語言,因此在撰寫裡面的每一個字都要設計與思考,就像寫一本書一樣,要能讓人一看就懂,不需要經過轉化或推測,能很直覺的就理解程式碼的內容,因此也容易維護。

3. 零重複

  它的一項特徵是程式碼不會有重複的內容,同一功能的程式寫完之後就不用再撰寫第二次,能讓程式碼的數量大為減少,重複利用的同時依然保持單一職責的設計模式。

三、函式核心準則

  如同構思遊戲三本柱一樣,我決定把函式也提取出三項最核心的準則,第一項是簡短;第二項是指做一件事情;第三件是函式是程式語言的動詞。

1. 簡短的內容

  在寫程式的時候,很容易因為要測試構想的內容是否正確,就會把所有東西寫在一項函式裡面,甚至名稱就叫做「XXXTest」,當然這沒什麼不好,不過當測試完畢後,記得不要直接使用。
  重新撰寫一遍函式,每個函式的內容要簡短,如果能兩行就不要三行;如果能一行就不要兩行。讓函式精簡到足夠單純,沒有多餘的內容,這代表著函示沒有能再拆出去的任何一行程式碼。

2. 只做一件事情

  每個函式應該只服務於一件事情,譬如玩家跳躍很多人會撰寫一個函式,這個函式包含地面檢測並給予玩家推力,這應該至少拆成兩個函式。第一個函式處理地面檢測;第二個函式處理玩家跳躍。
  最容易檢查函式有沒有做超過一件事情的方法,就是確認函式的名稱是否足夠準確,如果名稱無法代表整個函式所處理的任務,那這個函式可能做了不只一件事情。

3. 函式是程式語言的動詞

  我覺得這本書最後為函式作的結尾很棒,「函式式這個語言裡的動詞,類別則是這個語言裡的名詞。」程式設計是一種語言設計的藝術,如果寫作要有層次與先後順序的差別,寫程式亦如此。

四、函式注意事項

  這裡會分享一些重要但不需要時刻注意的事情。

1. 只有一層抽象概念

  如何確定函式只做一件事情,從抽象層面去審視是一件不錯的做法,所謂的抽象念,就是它裡面的內容包刮哪些類型,如果既定義了變數的值,又執行了某一項函式,那它應該不只處理了一件事情。

2. 寫作程式碼 | 降層準則

  寫程式的時候可以參考降層準則,我自己稱之為寫作程式碼,第一行函式裡面總共執行了三個函式,下面就逐一解釋這三行函式做了哪些事情,玩家的閱讀順序由上往下,不需要跳著閱讀。

3. 具描述能力的名稱

  在取名的時候,要注意取名是否代表包含的功能,如果一個函式叫做「Player」不如叫做「PlayerSystem」;「PlayerMove」不如說明是提供推力還是提供方向。
  描述能力的目的在於讓未來閱讀程式碼不需要閱讀內容,在閱讀一大堆函式的時候其他設計師不用去理解你寫了什麼內容,只需要學會使用即可。

4. 參數

  最好不要使用任何參數,如果能使用一個參數就不要使用兩個;如果能不用使用參數就不要使用任何參數。參數通常會與函式搭配,如果函式的命名是一個動詞,那參數就應該要是一個名詞,反之。

5. 避免使用 Flag 函式

  我當初在看到 Flag 函式的時候思考了一下這式什麼東西,在經過搜尋後才知道這是 bool 函式,如果 true 執行一個事件、如果false 執行另一個事件,但這本身就代表不只處理一個事情,所以要避免使用 flag 函式。

五、後記

  這種概念性的書籍很有用處,至少我在看完命名跟函式以後我就有「我成長了很多」的感覺,在寫程式的時候也順利了不少。
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
105會員
247內容數
對設計師如何成長為設計師好奇嗎? 2020年九月,我進入大學學習當一位設計師,從開始到沉寂,再到重燃熱忱,我將在方格子紀錄我的成長歷程、理念、心情,分享我在這段旅程中所經歷的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
瓶裝雪的沙龍 的其他內容
這篇文章將會簡單介紹無瑕的程式碼(Clean Code)是一種什麼樣的程式設計流派,並且分享以及命名相關的概念。
這篇文章將會講述類圖的基本介紹,並且詳細敘述從零開始製作完整的類圖流程。
這篇文章將會介紹函式(Function)及其回傳值(retrun)的定義及介紹。
這篇文章將會講述 Inspector 的簡易優化小技巧,並介紹系列文章。
這篇文章將會講述陣列泛型 List<T>的介紹及使用。
這篇文章將會簡單介紹無瑕的程式碼(Clean Code)是一種什麼樣的程式設計流派,並且分享以及命名相關的概念。
這篇文章將會講述類圖的基本介紹,並且詳細敘述從零開始製作完整的類圖流程。
這篇文章將會介紹函式(Function)及其回傳值(retrun)的定義及介紹。
這篇文章將會講述 Inspector 的簡易優化小技巧,並介紹系列文章。
這篇文章將會講述陣列泛型 List<T>的介紹及使用。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
最近ChatGPT-4o的發布引起了我的注意,又在Youtube看上見有人教學如何用ChatGPT設計屬於自己的家教,被他的能力震撼到的我一頭熱就訂閱了plus版然後馬上設計了一個自己的家教。最一開始的時候我只有把它用來學習語言的輔助,但用著用著忽然想到:「如果我把它用來引導我學習我沒有學過的領域呢
Thumbnail
遊戲引擎開發商 Unity 一直是我感覺很有發展潛力的企業,《原神》、《王者榮耀》等明星遊戲都是透過其引擎所建構,在手遊開發領域,擁有絕對統治力。然而,營運實績與線圖走勢卻不是如此,近 8 季毛利成長率有 4 季為負,1Q24 營運收入是近 8 季來最低值,-$375M…
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
開啟Xampp伺服器,並啟動 apache & mysql mysql建立 開啟Unity 建立 Script toPhp.cs Unity物件 toWeb物件設定 此處需特別留意設定 UItext & MYtext ,否則會出現物件未設定的Null錯誤 Button 設定 test.php con
  透過Unity平台開發出來的遊戲,比較廣為人知,例如憤怒鳥和寶可夢。Unity 的遊戲開發技術,可以刺激遊戲產業,更朝氣蓬勃有效率地開發新遊戲用戶透過遊戲平台,就可以進入元宇宙的世界!
Thumbnail
Unity在這週公布了2022年Q1的財報,財報發布後股價下挫30%,下跌至30美元,已經遠遠跌破兩年前的上市價。Unity雪崩式的下跌是因為Q1的營運不理想、未來的營運預期不理想、還是單純是隨著近期成長股估值修正而下跌呢?這篇文會分析Unity 2022Q1財報及預測Unity未來的營運狀況。