練習 - 使用空白字元讓您的程式碼更容易閱讀
列印和 Web 設計人員了解在小空間中放入太多資訊將會造成檢視者的負荷。 因此,他們在策略上會使用空白字元或負空格來細分資訊,讓檢視者能夠充分利用其工作的主要訊息。
開發人員在編輯器中撰寫程式碼時,可以使用類似的策略。 開發人員可以使用空白字元傳達意義,藉此提高程式碼意圖的清晰度。
什麼是空白字元?
「空白字元」一詞指的是 space bar 所產生的個別空格、tab 鍵所產生的定位字元,以及 enter 鍵所產生的新行。
C# 編譯器會忽略空白字元。 為了解如何忽略空白字元,以及如何使用空白字元來最大限度地提高清晰度,讓我們逐步進行列練習。
加入程式碼以說明 C# 編譯器忽略空白字元的方式
請確定您已在 Visual Studio Code 中開啟空的 Program.cs 檔案。
如有必要,請開啟 Visual Studio Code,然後完成下列步驟,以在編輯器中備妥 Program.cs 檔案:
在 [檔案] 功能表上,選取 [開啟資料夾]。
使用 [開啟資料夾] 對話框瀏覽至 CsharpProjects 資料夾,然後開啟。
在 Visual Studio Code EXPLORER 檢視中,選取 [Program.cs]。
在 Visual Studio Code [選取項目] 功能表上,選取 [全部選取],然後按 [刪除] 鍵。
輸入下列程式碼:
// Example 1: Console . WriteLine ( "Hello Example 1!" ) ; // Example 2: string firstWord="Hello";string lastWord="Example 2";Console.WriteLine(firstWord+" "+lastWord+"!");在 Visual Studio Code 的 [檔案] 功能表上,選取 [儲存]。
在 EXPLORER 檢視中,若要在 TestProject 資料夾位置開啟終端機,請以滑鼠右鍵按兩下 TestProject,然後選取 [ 在整合式終端機中開啟]。
在終端機命令提示字元中,輸入 dotnet run ,然後按 Enter。
您應該會看見下列輸出:
Hello Example 1! Hello Example 2!請花一點時間來思考這個結果針對應該在程式碼中使用空白字元,告訴您什麼。
這兩個程式碼範例說明兩個重要的概念:
- 空白字元對編譯器而言無關緊要。 不過...
- 正確使用空白字元時,可以增加您讀取並理解程式碼的能力。
您很可能會撰寫程式碼一次,但必須多次讀取該程式碼。 因此,您應該將重點放在您所撰寫程式碼的可讀性。 經過一段時間後,您就能感受到何時及如何使用空白字元的效果,例如空白字元、定位字元與新行。
早期指導方針:
- 每個完整的命令 (「陳述式」) 都屬於個別的行。
- 如果單一行程式碼變得太長,可以將其拆分。 但是,除非有充分的理由,否則應該避免將單一陳述式隨意分成多行。
- 在指派運算子的左側和右側使用空格。
將現有的程式碼取代為下列程式碼:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }請注意,此程式碼不包含太多空白字元。 此程式碼將用來說明將空白字元新增至應用程式的方法。 有效的空白字元應該可讓您更輕鬆地了解程式碼的作用。
注意
此程式碼會使用
Random類別來協助開發模擬的骰子遊戲,其中三個擲骰的總值會用來評估「獲勝」分數。 程式碼會為兩個或三個相同點數擲骰獎勵額外點數。 您不需要完全了解此程式碼,就能看到包含空白字元的優點。請花一點時間思考如何使用空白字元來改善此程式碼的可讀性。
此程式碼有兩個功能要記下:
- 此程式碼範例中沒有任何垂直空白字元。 換句話說,沒有分隔程式碼行的空行。 所有程式碼都擠在一起。
- 左大括弧符號與右大括弧符號
{ }所定義的程式碼區塊會一起壓縮,使其界限難以以視覺方式辨識。
一般而言,若要提升可讀性,您可以在執行類似或相關動作的兩行、三行或四行程式碼之間加入空白行。
使用垂直空白字元為您的程式碼分節很主觀。 可能有兩個開發人員不同意最可讀取的內容,或加入空白字元的時機。 使用您的最佳判斷。
若要新增可改善可讀性的垂直空白字元,請更新您的程式碼,如下所示:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }第一行空白字元是用來分隔
dice變數宣告與用來指派值給擲骰變數的程式碼行。 此分隔可讓您更輕鬆地查看dice在程式碼中的使用方式。下一行空白字元會將擲骰變數的宣告與
total的宣告分開。 將三次擲骰變數的宣告分組很有幫助可分為兩個方面。 首先,會建立包含相關變數的程式碼行群組。 其次,變數名稱非常類似,而且宣告會遵循相同的模式。 因此,將其群組在一起會將您的目光吸引到相似性,並協助公開差異。最後,您的第三行空白字元會將另一組相關陳述式與巢狀
if陳述式分開。 包含total宣告和Console.WriteLine()方法的陳述式群組,會依用途相關,而非依外觀相關。 您的程式碼著重於三個骰子達到的總值,以及擲骰是否有兩個或三個同點。 這幾行相關,因為您需要計算total和報告擲骰的結果給使用者。有些開發人員可能會認為您應該在
total和Console.WriteLine()的宣告之間加入一個空行。 同樣地,選擇空白字元取決於您的最佳判斷。 您應該會決定哪一種對您而言更容易讀取,並一致使用該樣式。您留下的就是
if陳述式。 您現在可以檢查該項目。將重點放在
if關鍵字底下的程式碼行上,修改您的程式碼,如下所示:Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } else { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } }請注意,您已將左大括號和右大括號移至其本身的行,以改善間距。
{與}符號會建立程式碼區塊。 許多 C# 建構都需要程式碼區塊。 這些符號應該放在不同的行上,讓它們的界限清楚可見且可讀取。此外,請務必使用
tab鍵,將程式碼區塊符號放在它們所屬的關鍵字底下。 例如,請注意以關鍵字if開頭的程式碼行。 該行底下是{符號。 這個對齊可讓您輕鬆了解{屬於if陳述式。 此外,最後一個}符號也與if陳述式構成一行。 對齊和縮排的組合可讓您輕鬆地了解程式碼區塊的開始和結束位置。這個程式碼區塊內的程式碼行已經過縮排,表示其「屬於」此程式碼區塊。
您遵循與內部
if陳述式與else陳述式類似的模式,以及這些程式碼區塊內的程式碼。
並非所有人都同意這個包含空白字元的樣式指導。 不過,您應該考慮使用本指導作為撰寫程式碼時的起點。 未來,當您決定要偏離本指導時,可以有明確目標。
概括回顧
本練習的主要重點:
- 謹慎地使用空白字元,提升程式碼的可讀性。
- 使用換行符號建立空行來分隔程式碼的語句。 片語包括類似或共同運作的程式碼行。
- 使用換行符號分隔程式碼區塊符號,使其位於自己的程式碼行上。
- 使用
tab鍵,將程式碼區塊與相關聯的關鍵字對齊。 - 將程式碼區塊內的程式碼縮排,以顯示擁有權。