Web 项目越来越多的 if else 这正常吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blackboom
V2EX    Java

Web 项目越来越多的 if else 这正常吗?

  •  
  •   blackboom
    blackstorm 2015-09-17 15:37:49 +08:00 5246 次点击
    这是一个创建于 3752 天前的主题,其中的信息可能已经有所发展或是发生改变。

    思维是被固化了?
    感觉到非常多的 if 结构语句
    有时候会纠结用 try 还是 if else ?

    24 条回复    2015-09-18 17:42:46 +08:00
    moe3000
        1
    moe3000  
       2015-09-17 15:46:40 +08:00   1
    我基本会有很多 if return, else 较少
    话说 try 是要怎么用?为什么会和 if else 纠结?
    lichao
        2
    lichao  
       2015-09-17 15:52:04 +08:00   1
    if 多不多,得看具体业务场景
    try 做异常捕获,跟 if else 这个完全不需要纠结吧
    cyberdak
        3
    cyberdak  
       2015-09-17 15:52:56 +08:00   1
    try 是捕抓异常的。。

    楼楼大概是要问 if else 和 switch
    FFLY
        4
    FFLY  
       2015-09-17 15:55:10 +08:00   1
    try 是做异常捕获处理的,纠结什么呢?
    zjq426
        5
    zjq426  
       2015-09-17 15:55:33 +08:00   1
    得看 if 多在哪了,如果是比较值的可以用 switch 啊,
    如果是一组逻辑判断也可以实现类似 python 里的 any all 之类的判断。或者优化一下表达式什么的。
    其实做好代码的封装和模块化处理应该也不太会出现很多的 if 。
    如果是 copy & paste 的代码那出现很多 if 是必然的了。。。
    xfspace
        6
    xfspace  
       2015-09-17 15:55:35 +08:00 via iPad   1
    switch 来得快, else if 读起来缩进难受
    pelloz
        7
    pelloz  
       2015-09-17 16:09:11 +08:00   1
    常用的判断封装好,把类似业务的条件判断抽离出来一起处理,这样看起来逻辑比较清晰,该需求也容易应对了
    honam
        8
    honam  
       2015-09-17 18:58:13 +08:00   1
    try 和 if else 有关系? LZ 怎么做的
    aisk
        9
    aisk  
       2015-09-17 19:02:51 +08:00   1
    说明面向对象建模没有做好,写出来的代码都是过程式的。
    sorra
        10
    sorra  
       2015-09-17 19:46:24 +08:00   1
    异常控制流多的走 try 不是不可以, 1 楼的 if return 也可以。清晰就好,看效果。
    另外安利一篇 http://segmentfault.com/a/1190000000664023
    blackboom
        11
    blackboom  
    OP
       2015-09-17 20:20:26 +08:00
    @moe3000 @lichao @cyberdak @FFLY ...例如判断非法 URL (/?p=xxx )之类,纠结用 if 还是 try ,纠结那个更合适当前场景,更加简洁迅速(这可能是病)。
    @pelloz @aisk 判断最多的是在 controller 中,框架使用的是 jfinal
    例如某个 Controller 需要判断非法 URL ,需要判断当前登录用户 ID ,同时也要满足未登录用户需求,这样下来整个个代码看起来满目全非。
    类似这种大量的判断无从下手的感觉。

    另外求推荐比较精细的项目
    aisk
        12
    aisk  
       2015-09-17 20:42:12 +08:00   1
    @blackboom 就是 jfinal 帮你做了基本的面向对象建模,之后的你没有再考虑继续抽象,而是在此之上写很多 if else while return 的语句。这种项目挺常见的,关键就是要做合理的抽象。
    moe3000
        13
    moe3000  
       2015-09-17 20:49:38 +08:00   1
    @blackboom 记得 jfinal 有 interceptor ,用这个拦截非法 url 啊
    akagi
        14
    akagi  
       2015-09-17 20:54:29 +08:00   1
    再次建议表驱动……
    BB9z
        15
    BB9z  
       2015-09-17 22:45:46 +08:00
    把 model 变重一些,多建一些可读性更好的 getter 。
    phithon
        16
    phithon  
       2015-09-17 23:26:57 +08:00   1
    其实楼主的意思是, web 里太多错误判断用 if else 来完成了,是不是要改成异常处理
    其实我的意见是,没必要。
    else 能少就少, if 的话该有的就得有,不满足条件的直接 return 不用 else ,然后把通用的一些功能一封装就好了,不嫌多的。谨慎是好事。
    blackboom
        17
    blackboom  
    OP
       2015-09-18 00:20:13 +08:00 via Android
    @moe3000
    @phithon
    谢谢两位,改为 if return 代码清爽太多了,简洁迅速。喜欢!
    blackboom
        18
    blackboom  
    OP
       2015-09-18 00:23:23 +08:00 via Android
    @akagi 感谢,又发现新大陆了
    zonghua
        19
    zonghua  
       2015-09-18 00:30:54 +08:00
    设计模式,设计模式。
    whimsySun
        20
    whimsySun  
       2015-09-18 00:34:07 +08:00
    我都看纠结了。。。
    lincanbin
        21
    lincanbin  
       2015-09-18 00:58:16 +08:00 via Android
    需要判断的地方就用 if 啊,当然要注意一些地方的判断可以合并或者优化。
    try 是异常处理的。
    zacard
        22
    zacard  
       2015-09-18 08:53:10 +08:00
    设计模式。
    WalkingEraser
        23
    WalkingEraser  
       2015-09-18 10:20:09 +08:00
    根据我见过的一 PHP 完整企业项目和 Java 企业项目代码,都是一堆 if return...
    flyingghost
        24
    flyingghost  
       2015-09-18 17:42:46 +08:00
    条件或者变量太多,本身设计就有问题。

    当年发生过这么一件事:
    有个兄弟写游戏逻辑, if else 套了几百层,单方法 5k 行代码,把摩托手机的 kvm 给搞挂了。
    后来叫他改成表驱动, 50 行代码解决问题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     890 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 21:25 PVG 05:25 LAX 13:25 JFK 16:25
    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