練習 - 從 if 陳述式中移除程式碼區塊
軟體開發人員撰寫程式碼時,偏好節省按鍵輸入和視覺空間,且不能犧牲可讀性。 只有在開發流程中套用「較少」一詞,才能讓您的流程碼更容易閱讀且更容易理解。
如果程式碼區塊只需要一行程式碼,您就不需要使用大括弧來定義正式程式碼區塊。 雖然從技術上說,您甚至不需要將程式碼分成多行,但將單一行上的語句結合,可能會讓您的程式碼難以閱讀。
移除上述大括弧是一項文體變更,不應影響程式碼的功能。 不過,您應該採取步驟,以確保您的變更不會對程式碼的可讀性造成負面影響。 您可以評估移除大括弧和空白字元的影響,如果您發現變更讓程式碼不那麼易讀,請還原回原始程式碼。
建立使用程式碼區塊的 if 陳述式範例
請確定您已在 Visual Studio Code 中開啟空的 Program.cs 檔案。
如有必要,請開啟 Visual Studio Code,然後完成下列步驟,以在編輯器中備妥 Program.cs 檔案:
在 [檔案] 功能表上,選取 [開啟資料夾]。
使用 [開啟資料夾] 對話方塊瀏覽至 CsharpProjects 資料夾,然後加以開啟。
在 Visual Studio Code 的 [總管] 窗格中,選取 [Program.cs]。
在 Visual Studio Code [選取項目] 功能表上,選取 [全部選取],然後按 [刪除] 鍵。
在 Visual Studio Code 編輯器中輸入下列程式碼:
bool flag = true; if (flag) { Console.WriteLine(flag); }
儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
從終端命令提示字元輸入
dotnet run
,以執行您的程式碼。確認您看到下列輸出:
True
您的程式碼代表良好的起點,但您有一個包含單行程式碼的程式碼區塊。 在此案例中,定義程式碼區塊是否必要?
移除大括弧
當 flag
為 true
時,上述程式碼會執行程式碼區塊。 由於此程式碼區塊包含單一程式程式碼,因此您可以選擇移除大括弧。
在 Visual Studio Code 編輯器更新您的程式碼,如下所示:
bool flag = true; if (flag) Console.WriteLine(flag);
注意
移除大括弧並不會變更
if
陳述式的程式碼區塊為Console.WriteLine(flag);
的事實。儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
請注意,輸出與先前相同。
您仍然應該會看到下列輸出:
True
不過,少了兩行程式碼。 最重要的是,在
if
縮排下方的程式程式碼中,您的程式碼仍然很容易閱讀。
檢查單行型態 if 陳述式的可讀性
在此步驟中,您將探討可能會對程式碼可讀性造成負面影響的情況。
由於 if
陳述式和 Console.WriteLine()
的方法呼叫都是簡短的,因此您可能會想要將它們結合在單一行上。 畢竟,if
陳述式的 C# 語法可讓您以這種方式合併陳述式。
在 Visual Studio Code 編輯器更新您的程式碼,如下所示:
bool flag = true; if (flag) Console.WriteLine(flag);
儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
請注意,輸出仍為相同。
花點時間考慮程式碼可讀性。
假設前兩個程式碼範例巢狀於較大的程式碼區段內。 結合程式碼語句 (就像您在步驟 4 中所做的一樣),可能會使閱讀變得困難。
實作包含單一陳述式程式碼區塊的
if
陳述式時,Microsoft 建議您考慮下列慣例:- 請勿使用單行表單 (例如:如果 (flag) Console.WriteLine (flag);
- 一律會接受使用大括弧,如果 if/else 複合陳述式的任何區塊使用大括弧,或單一陳述式主體跨越多行,則為必要項。
- 只有當每個區塊的主體與 if/else if/.../else 複合陳述式放在單一行時,才能省略大括弧。
若要檢查較大 if-elseif-else 建構的可讀性影響,請更新您的程式碼,如下所示:
string name = "steve"; if (name == "bob") Console.WriteLine("Found Bob"); else if (name == "steve") Console.WriteLine("Found Steve"); else Console.WriteLine("Found Chuck");
儲存您的程式碼檔案,然後使用 Visual Studio Code 來執行程式碼。
執行程式碼時,應該會產生下列輸出:
Found Steve
程式碼會執行,但這些程式程式碼密集且難以讀取。 建議您將程式碼重新格式化,在
if
、else if
和else
陳述式後納入分行符號。比較您剛才執行的程式碼與下列程式碼:
string name = "steve"; if (name == "bob") Console.WriteLine("Found Bob"); else if (name == "steve") Console.WriteLine("Found Steve"); else Console.WriteLine("Found Chuck");
請注意,讀取第二個程式碼範例要容易得多。
概括回顧
以下是關於 if
陳述式程式碼區塊和可讀性的一些重要事項:
- 如果您意識到
if-elseif-else
陳述式的程式碼區塊中只列出一行程式碼,您可以移除程式碼區塊的大括弧和空白字元。 Microsoft 建議將大括弧一致地用於if-elseif-else
陳述式的所有程式碼區塊 (存在或一致移除)。 - 只有在程式碼區塊讓程式碼更容易閱讀時,才移除大括弧。 一律可以接受包含大括弧。
- 移除換行字元的唯一目的,是要讓程式碼更容易閱讀。 Microsoft 建議當每個陳述式放在自己的程式程式碼時,您的程式碼將會更容易閱讀。