如何克服多个 return 给人的碎片感/. /

2016-07-05 16:09:02 +08:00
 laobaozi

最近在弄一个考试答题系统,程序中使用了很多防御的设计

伪代码表示就是:

function CheckAnswer()
{
    if(试卷不合法){
    	return 错误代码
    }
    
    if(试卷和答题者不对应){
    	return 错误代码
   	}
    
    if(试卷没有全部完成){
    	return 错误代码
    }
}
    

每当有一个错误的时候就直接返回了,写完的感觉就是,整个函数变成了一块一块的碎片,如果有更多的防御判断,那整个函数的就更碎了,而且 return 的错误代码太多,多到我在函数的注释中加上了错误代码列表,

like:

返回值:
		
        -1		xxx 错误
        -2		xxxxxx 错误
         1		success	
        ...

给人的感觉就是整个函数被多个 return 斩成了一段一段, 这里一只手,那里一条腿

虽然只用一个 return 会陷入嵌套海,但给人的感觉整个方法还是完整的,只是细长弯曲

是只有我一个人有这种感觉么

类似情况你们是怎么处理的

324 次点击
所在节点    情感问题
6 条回复
Sunyanzi
2016-07-05 17:36:45 +08:00
用 Exception ... 然后统一 catch 处理 ... return 只作为正常返回值用 ...
tairan2006
2016-07-05 19:23:41 +08:00
如果是有异常的语言话,设计好异常的层次就可以了。

不然就写一个异常的枚举,这样就不需要注释了。。
tairan2006
2016-07-05 19:24:30 +08:00
等等,为啥这个帖子在“情感问题”区?
cnzfq
2016-07-05 20:59:26 +08:00
這個節點,證明樓主和代碼愛的深沉。

祝你們幸福!
armoni
2016-07-06 08:37:40 +08:00
@tairan2006 设计异常也要抛出不同 exception ,结果还是一样的,这里要做的是逻辑上合并相同类的异常,比如你第一类和第二类可以合并的
wizardforcel
2016-07-09 23:54:05 +08:00
我就是这么处理的。。你貌似有强迫症。。

比起嵌套地狱我更喜欢这种。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290426

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX