V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mhycy
V2EX  ›  程序员

动态语言,在开发模块的时候对于外部输入的参数(程序内部的数据)应该信任到什么程度?

  •  
  •   mhycy · 2014-09-03 16:22:10 +08:00 · 2918 次点击
    这是一个创建于 3494 天前的主题,其中的信息可能已经有所发展或是发生改变。
    模块指的是任何实现形式,只要满足:所需要的参数/数据不是外部人工输入的
    (例如我写了个A模块,另一个程序员写了个B模块并在B模块调用了A模块的函数/方法并传入了一些数据)

    在这种情况下,作为A模块,应该对输入的数据信任到何种程度?
    是否应该在这个地方做异常处理/类型判断,毕竟做判断是需要消耗资源的。。。
    7 条回复    2014-09-03 18:03:02 +08:00
    pright
        1
    pright  
       2014-09-03 16:37:40 +08:00
    取决于你对模块调用者的能力和理智信任到什么程度
    lsylsy2
        2
    lsylsy2  
       2014-09-03 16:39:18 +08:00
    取决于B如果传入错误数据,产生的问题谁负责
    假如你俩是一个部门的,那么优先性能,传错误数据是他的事情
    假如B是你的客户,你写了个SDK给他,那么即使他传了错误的数据,你不能出现连锁反应的错误。
    eriale
        3
    eriale  
       2014-09-03 16:39:47 +08:00
    反正出来问题会抛出异常,发现再改也来得及。
    mhycy
        4
    mhycy  
    OP
       2014-09-03 16:46:09 +08:00
    @lsylsy2
    SDK应该算是API吧?那种情况在我看来是应该至少对所有输入数据进行类型检查的。
    数据合理性检查就看情况而定了

    即使是同部门开发的代码,也有可能存在一种情况:一开始的输入数据就是错的,但是所有人都忽略了对数据的处理。
    这种情况下是否应该考虑呢?

    @eriale 我写写异常处理经常会掉进一个坑:抛出异常,并在代码最外围进行捕获。。。
    据说这不是一种好办法。。但是在我看来在代码内处理这个问题增加了无用的开销也不是一种好办法。。
    不知实际该如何应对?
    cxxrocks
        5
    cxxrocks  
       2014-09-03 16:53:40 +08:00
    我的建议是:
    要看用的动态语言是否符合鸭子模型

    符合->不做检查
    不符->检查

    怎么样?
    ipconfiger
        6
    ipconfiger  
       2014-09-03 16:55:42 +08:00
    好歹还是assert一下嘛,调试也方便撒
    eriale
        7
    eriale  
       2014-09-03 18:03:02 +08:00
    @mhycy 我自己是希望在异常发生的地方做对应的处理。如果是开发API,就应该按照你说策略,不光要对数据做检查,还必须返回错误。
    lz可以参考一下github的API,看看是怎么做类型检查和错误消息返回的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1152 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.