我想知道是否有一种很好的编码方式:
return IOTools.CreateFile(@"D:\test")
&& IOTools.CreateDir(@"D:\test_folder\")
&& IOTools.DeleteFile(@"D:\test_file_2")
&& IOTools.DeleteDir(@"D:\test_folder_2\");
我知道我可以将其全部放在其他函数中并且使用if语句在每个条件之后返回false,但是如果一个是假的话,可能还有另一种方法可以阻止程序尝试执行下一个条件?
答案 0 :(得分:4)
&&
已经是short-circuiting运营商。因此,只要一个条件为false
,它就会停止。
如果x为假,则不评估y,因为AND的结果 无论y的值是什么,操作都是假的。这被称为 “短路”评估。
顺便说一下,只要一个条件为||
,true
也会停止评估。
如果您要求更易读的方法,可以使用变量:
bool canCreateFile = IOTools.CreateFile(@"D:\test");
bool canCreateDir = IOTools.CreateDir(@"D:\test_folder\");
bool canDeleteFile = IOTools.DeleteFile(@"D:\test_file_2");
bool canDeleteDir = IOTools.DeleteDir(@"D:\test_folder_2\");
return canCreateFile && canCreateDir && canDeleteFile && canDeleteDir;
如果代码变得过于复杂,我会使用变量来提高可读性,可维护性和可测试性。
答案 1 :(得分:0)
这和你一样干净。引入其他任何东西都可能会增加而不是降低复杂性。
答案 2 :(得分:0)
一些非常重要的指导原则:
希望这有点帮助。
更多详情
编辑困难的一个例子。让我们说另一个程序员想要为你的程序添加一个新的创建。现在该计划是:
return IOTools.CreateFile(someNewFile)
&& IOTools.CreateFile(@"D:\test")
&& IOTools.CreateDir(@"D:\test_folder\")
&& IOTools.DeleteFile(@"D:\test_file_2")
&& IOTools.DeleteDir(@"D:\test_folder_2\");
但新程序员犯了一个错误,该文件恰好永远不会被创建。他们按照你的模式 - 实际上破坏了你的代码。这突然是一个严重的问题!一个更好的模式是:
var overallSuccess = false;
overallSuccess |= IOTools.CreateFile(someNewFile);
overallSuccess |= IOTools.CreateFile(@"D:\test");
overallSuccess |= IOTools.CreateDir(@"D:\test_folder\");
overallSuccess |= IOTools.DeleteFile(@"D:\test_file_2");
overallSuccess |= IOTools.DeleteDir(@"D:\test_folder_2\");
return overallSuccess;
现在所有语句都会运行,返回值表示ANY create是否成功。如果所有语句都成功,您可以将“| =”更改为“& =”以获得真正的返回。祝你好运!