[讨论] 关于空指标的检查时机

楼主: henry8168 (番薯猴)   2019-09-18 16:27:40
正在工作,在修前人的 code。
假设现在有 function F 和 function G,
function F 内执行的程式码会呼叫 function G 并将某个指标作为参数传入 G
想请问一下高手大大们,空指标的检查一般都在:
1) function F 要传入该指标到 function G 前
2) 收到该指标的 function G 的开头
3) 1、2 两者皆要
的哪个时机检查最好?
又有什么优缺点?
因为选方案 1 的话,要是某些时候呼叫 G 前忘记检查就会出事,而且程式码满冗赘的;
可是如果用方案 2 的话,在某些情况下,
会呼叫 G 的 function F 可能已经存取过该指标,等于先保证不会为空,
那 2 的作法就等于每次都多一道检查行为。
方案 3 没看过,可能老鸟跟菜鸟没串好 @@?
那有约定成俗的 coding rule 吗?
一般都怎么写比较好?
作者: johnpage (johnpage)   2019-09-18 16:37:00
2
作者: boss0405 (boss)   2019-09-18 16:43:00
2,多检查一下不会怎样
作者: Lipraxde (Lipraxde)   2019-09-18 17:50:00
如果不是预期会传 nullptr 的话会用 assert 检查吧
作者: rodion (r-kan/reminder)   2019-09-18 18:12:00
按架构layer区分是否检查null: 检查只需在layer的"接口"
作者: goliathplus (No Comment)   2019-09-18 19:25:00
一般是2
作者: loveme00835 (发箍)   2019-09-18 21:28:00
这要看责任的分配, 正常是 3, 不过这要看你的指标是当 in/out param 哪一个, 给 nullptr 算不算例外, 这要先从 API design 开始讲起
作者: Gway (我爱的你 也爱我 好吗?)   2019-09-18 23:27:00
惯例是2 确保fun 本身有排错能力是基本
作者: ando5566 (风云变色)   2019-09-18 23:28:00
2
作者: kevin14144   2019-09-19 00:13:00
需看情况。 就程式稳定度考量。选2 :当G方法覆用时,能够保证不产生例外。 效能上:若F方法多次呼叫G方法这种情况 就可能需要考虑移除G方法内的判断。 另外还有一种做法:就是保证不产生nullptr. ~
作者: CodingMan (程式侠)   2019-09-19 06:37:00
2 G G 可能不是只有这里会被呼叫
作者: jass970991 (半糖绿假面超人)   2019-09-19 20:30:00
2, 但是如果你设计的function会传null出来,你应该检讨不是设计错误
作者: ketrobo (猫萝卜)   2019-09-20 01:35:00
我选择caller检查优先,在遇到检查nullptr这样的抉择之前,我会更优先检查使用指标的必要性,如果能以reference解决,或是null object pattern替代,则不使用pointer…

Links booklink

Contact Us: admin [ a t ] ucptt.com