类方法里面,三种情况的返回值,怎么设计比较合理和优雅 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
johnsneakers
V2EX    PHP

类方法里面,三种情况的返回值,怎么设计比较合理和优雅

  •  
  •   johnsneakers Dec 2, 2014 2970 views
    This topic created in 4170 days ago, the information mentioned may be changed or developed.
    最近在重构别人的代码,以前的代码类方法里面都这种:
    public function method() {
    if(查询出错)
    return -100;


    else if(查询结果为空)
    return 0;

    else
    return 1;

    }

    //调用的时候判断数字。。。


    我想得是,查询出错直接throw exception , 为空就是返回false, 有值就返回true.
    不知道这样合理不,或者说还有更优雅的实现?
    10 replies    2014-12-03 10:24:44 +08:00
    ozking
        1
    ozking  
       Dec 2, 2014   1
    java的话我倾向于这样,因为还是会有些时候用到查询的返回数据的
    ```
    public Object query() throws Exception{
    if(查询出错){
    throw new Exception();
    }
    if(查询结果为空){
    return null;
    }
    else{
    return 查询到的数据;
    }
    }

    ```
    返回true,false一般用来check是否存在查询数据的,会再wrap一个函数
    ```
    public Boolean check() throws Exception{
    return query() != null;
    }
    ```
    hcymk2
        2
    hcymk2  
       Dec 2, 2014   1
    我觉得得看你的方法名字。
    yunshansimon
        3
    yunshansimon  
       Dec 2, 2014   1
    要判断,这个错误是否会影响整体运行的结果,如果不影响,就包装一下好了,只有在可控范围内无法处理,而且严重影响其他代码运行的错误才需要throws exception。经常会有错误发生的话,C类的可以传递一个error对象进去当作输出参数,**error,调用返回后检查error是不是null。java的话就不行了,你能处理的,就尽量在函数中处理吧,要throws exception,就必须用try的方式调用,很麻烦,否则编译器报错。
    mcfog
        4
    mcfog  
       Dec 2, 2014   1
    有值返回true的话值放在哪里……

    一般而言我会用exception/array 这样,无论是否有结果都返回array,外面关心空结果的话用empty判断就好

    如果是只查一条记录的,看这条记录是否“应该存在”,如果“应该存在”,那么出错和空抛不同exception,如果“不存在正常”的话,用exception/null/$data 这样

    数据库倒了这么重要的事情当然要抛exception让外面处理

    一般而言,除非方法本身就是判断句isXXX hasXXX,我会尽量不返回true/false

    优雅不敢谈,但求不坑
    Sunyanzi
        5
    Sunyanzi  
       Dec 2, 2014
    返回三种值的情况难道不该用三元吗 ...
    mkeith
        6
    mkeith  
       Dec 2, 2014
    @Sunyanzi 又来三元运算了撒:)
    ihgoo
        7
    ihgoo  
       Dec 2, 2014
    return result == null ? 0 : result;
    kmvan
        8
    kmvan  
       Dec 2, 2014
    可以参考wp的错误信息返回设计。返回一个对象,用类似 is_error($obj) 来判断是否错误。
    Sunyanzi
        9
    Sunyanzi  
       Dec 3, 2014
    @mkeith 你看你看这种情况不就是为我这种三元狂魔量身定做的吗!
    sarices
        10
    sarices  
       Dec 3, 2014
    查询出错应该抛出异常,没数据直接返回空数组,有数据就返回数据的数组
    About     Help     Advertise     Blog     API     FAQ     Solana     895 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 23:04 PVG 07:04 LAX 16:04 JFK 19:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86