练习 - 从 if 语句中删除代码块
软件开发人员喜欢编写可以节省击键和视觉空间而不牺牲可读性的代码。 仅当开发过程中应用短语“更少更多”时,它会使代码更具可读性和可理解性。
如果代码块只需要一行代码,则可能不需要使用大括号定义正式代码块。 尽管从技术上说,你甚至不需要将代码分成多行,但将单行上的语句组合起来会使代码难以阅读。
按照上面的说明删除大括号属于样式更改,不会影响代码的功能。 但是,应采取措施确保更改不会对代码的可读性产生负面影响。 可以评估删除大括号和空格的影响,如果发现更改使代码更难阅读,则可以还原为原始代码。
创建使用代码块的 if 语句的示例
确保在 Visual Studio Code 中打开了一个空的 Program.cs 文件。
如有必要,请打开 Visual Studio Code,然后完成以下步骤,以在编辑器中准备 Program.cs 文件:
在“文件”菜单中,选择“打开文件夹”。
使用“打开文件夹”对话框导航到 CsharpProjects 文件夹,然后打开。
在 Visual Studio Code 的“资源管理器”窗格中,选择“Program.cs”。
在 Visual Studio Code 的“选择”菜单上,选择“全选”,然后按 Delete 键。
在 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);注释
删除大括号并不会改变
Console.WriteLine(flag);是if语句的代码块这一事实。保存代码文件,然后使用 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建议你考虑以下约定:- 切勿使用单行窗体(例如:if(flag) Console.WriteLine(flag);
- 始终都可使用大括号,并且如果 if/else 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表明,当每个语句放置在自己的代码行上时,代码将更具可读性。