如何解决开关/ if-elseif-else函数是否应具有默认大小写,如果在处理程序中未匹配和处理任何大小写,则返回null?
情况1(引发错误,没有匹配的切换条件):
function getColorName(c) {
switch(c) {
case Color.Red:
return 'red,red wine';
case Color.Green:
return 'greenday';
case Color.Blue:
return "Im blue,daba dee daba";
default:
throw new Error('error');
}
}
getColorName(Color.Yellow); // this results in an error thrown
情况2(默认情况下返回null,并且在调用方中处理):
function getColorName(c) {
switch(c) {
case Color.Red:
return 'red,daba dee daba";
default:
return null;
}
}
if (getColorName(Color.Yellow)) {
// do stuff here
}
这可能不是一个完美的例子。但是,问题的目的是要了解一种方法,该方法可以涵盖尽可能多的用例,同时又可以避免存在切换逻辑时的过度复杂性?
尽管超出了问题的范围,但作为澄清可能用例的一种方式,还是可以实施切换
- 带有
switch
(如上) - 作为
if-elseif-else
函数(如果切换案例很复杂或案例很少)
if-elseif-else示例(供参考):
function getColorName(c) {
if (Color.Red) {
return 'red,red wine';
}
else if (Color.Green) {
//...
}
// etc. (--cut--)
else {
return null;
}
}
解决方法
我的首选做法是抛出例外,而不返回 null ,并由呼叫者函数确定下一步。您的调用函数应该只担心它所获取的数据输入,是否具有基于数据输入的适当信息来完成其工作,是否返回有效的输入响应或让调用者函数知道它无法处理输入。
在您的示例中,返回 null 意味着您的调用者函数将必须通过另一个条件循环进行null处理,然后根据其进一步将null返回自身的调用者函数或执行其他操作。这使得代码相当繁琐,而特定的异常可以根据需要轻松向上传播,并且对于记录和修复问题非常有用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。