我有两个备用代码段,打算(大约)做同样的事情:
封闭式条件,其中3例输入导致2例输出:
this.showDropdowns ? parseInt(this.uploadForm.get('location').value, 10) : null;
开放式条件,其中3种可能的输入结果导致3种重新组合(表非普通匹配)的输出情况:
try {parseInt(this.uploadForm.get('location').value, 10)} catch (ParseIntError e) {return null;}
第一种情况是严格的,仅允许程序员明确准备的两个结果选项:要么给出null(i),要么给出解析的值(ii),要么给出解析的结果(iii)回到null。
请参阅Closed/Open questions described on Wikipedia,以了解我的意思。
第二个代码片段不是很贪婪,不会吞下任何可能的异常,因此值是程序员期望的两个(三个):成功解析的值(a),或者仍然有允许的选项任何意外结果,作为显式捕获的Exception(还将空输入/输出情况(b)与解析错误异常(c)合并,将解析非空输入,但不可处理),但仍然允许第四个在编程(d)时完全无法想象的情况下,仍然让它冒出来是未捕获的异常。
输入通常可以是两个,即null或对象。
另一方面,输出可能会更复杂:
所以问题:
第一个是太幼稚,太贪婪,吞咽太多,还是相反建议采用聚集/吞咽方式?
第二个是滥用异常机制,还是只是标准的普通用法?
这些已知的特殊情况/选项是如何解决问题的?这些甚至可能太笼统了,以至于有一些规则,哲学方法或良好实践来判断/识别何时确切使用第一种或第二种?那么规则是什么,建议呢?谢谢。