这里有两个问题需要解决:可读性和可理解性
“可读性”解决方案是一个风格问题,因此可以解释。我的偏好是这样的:
if (var1 == true && // Explanation of the check
var2 == true && // Explanation of the check
var3 == true && // Explanation of the check
var4 == true && // Explanation of the check
var5 == true && // Explanation of the check
var6 == true) // Explanation of the check
{ }
或这个:
if (var1 && // Explanation of the check
var2 && // Explanation of the check
var3 && // Explanation of the check
var4 && // Explanation of the check
var5 && // Explanation of the check
var6) // Explanation of the check
{ }
也就是说,这种复杂的检查在扫描代码时可能很难在精神上解析(尤其是如果您不是原作者)。考虑创建一个辅助方法来抽象一些复杂性:
/// <Summary>
/// Tests whether all the conditions are appropriately met
/// </Summary>
private bool AreAllConditionsMet (
bool var1,
bool var2,
bool var3,
bool var4,
bool var5,
bool var6)
{
return (
var1 && // Explanation of the check
var2 && // Explanation of the check
var3 && // Explanation of the check
var4 && // Explanation of the check
var5 && // Explanation of the check
var6); // Explanation of the check
}
private void SomeMethod()
{
// Do some stuff (including declare the required variables)
if (AreAllConditionsMet (var1, var2, var3, var4, var5, var6))
{
// Do something
}
}
现在,当从视觉上扫描“SomeMethod”方法时,测试逻辑的实际复杂性被隐藏了,但语义却被保留了下来,以供人类在高层次上理解。如果开发者确实需要了解细节,可以检查 AreAllConditionsMet 方法。
我认为这正式称为“分解条件”重构模式。Resharper 或 Refactor Pro 等工具!可以使进行这种重构变得容易!
在所有情况下,拥有可读和可理解的代码的关键是使用真实的变量名。虽然我知道这是一个人为的例子,但“var1”、“var2”等不是可接受的变量名。它们的名称应该反映它们所代表的数据的基本性质。