jba*_*all 10 language-agnostic paradigms
我想知道是否有任何关于使用"守卫声明"范式与"单一功能退出点"范例的项目的可维护性的研究(包括随意和强大)?
Guard语句示例(在C#中):
string GetSomeString()
{
if(necessaryConditionFails) { return null; }
if(!FunctionWithBoolReturn(someAttribute)) { return null; }
//all necessary conditions have been met
//do regular processing...
return finalStringValue;
}
Run Code Online (Sandbox Code Playgroud)
单个函数退出点示例(在C#中):
string GetSomeString()
{
string valueToReturn = null;
if(necessaryConditionPasses && FunctionWithBoolReturn(someAttribute))
{
//all necessary conditions have been met
//do regular processing...
valueToReturn = finalStringValue;
}
return valueToReturn;
}
Run Code Online (Sandbox Code Playgroud)
我知道两者的优点和缺点都在SO上无休止地争论,但我正在寻找对每种范例的可维护性的实际研究*.这可能是未知的,但我想如果信息在那里,SO上的某个人就会知道它在哪里.到目前为止,我的网络搜索还没有成功.
**我也知道许多程序员(包括我)在整个代码中使用这两个原则,具体取决于具体情况.我只是希望发现哪一个具有更高可维护性的可靠记录,可以作为首选范例使用.*
Pat*_*ick 10
强迫单个退出点有一些问题.
第一个是它可能导致复杂的结构.映像一个函数,您必须在其中打开文件,读取一行,将行转换为数字并返回该数字,如果出错则返回零.使用单个出口点,最终会使用大量嵌套if(如果文件存在打开它,如果打开成功读取行,如果读取成功将值转换为整数),这将使您的代码不可读.其中一些可以通过在函数末尾添加标签并使用goto来解决(我们过去必须使用它,因为我们还使用了单个出口点和首选可读性)但它并不理想.
其次,如果您使用例外,如果您想再次使用单个退出点,则必须抓住所有内容.
所以,就个人而言,我更喜欢在函数的开头和执行期间进行大量的检查(和断言),并在出现问题时首先退出函数.
归档时间: |
|
查看次数: |
3500 次 |
最近记录: |