有人认真看过 slim 的代码质量吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whatisnew
V2EX    PHP

有人认真看过 slim 的代码质量吗?

  •  
  •   whatisnew 2016-06-01 17:09:27 +08:00 8570 次点击
    这是一个创建于 3426 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我就不多说了,能写出这种代码的人,还有人推崇。。。

    https://github.com/slimphp/Slim/blob/2.x/Slim/Log.php#L308

    if (!isset(self::$levels[$level])) { throw new \InvalidArgumentException('nvalid log level supplied to function'); } else if ($this->enabled && $this->writer && $level <= $this->level) { .... 

    throw new \InvalidArgumentException

    -> then ->

    else if ?

    然后,该作者的 slim3 居然还是高度遵循 fig PSR ,我去。。。

    32 条回复    2016-06-08 17:25:12 +08:00
    justanding
        1
    justanding  
       2016-06-01 17:29:42 +08:00
    不可饶恕,居然有一个 else if
    mahone3297
        2
    mahone3297  
       2016-06-01 17:36:39 +08:00
    @justanding 请教, else if 的问题是?
    manhere
        3
    manhere  
       2016-06-01 17:41:13 +08:00
    记得这样可以少写一对大括号,可以用的吧?
    bramblex
        4
    bramblex  
       2016-06-01 17:44:49 +08:00
    烂得在能够接受的程度内就懒得造轮子
    notgod
        5
    notgod  
       2016-06-01 17:45:07 +08:00
    按我的理解
    推崇的本身 并不是代码写的好不好 而是这种造物的精神 以及造出来以后开源给大家使用
    避免重复造轮子的问题

    在这个基础上 没人天生什么都会 一次性就能写好
    都是慢慢去完善 根据个人喜好 一种逻辑 10 个人可能有 100 种写法
    没有必要强加自己的逻辑 认为自己一定是正确的打开方式

    仅仅是个人喜好而已
    比如我 就喜欢做简单处理
    强迫症 别人的代码 缩进混淆了我都要修正 不然不舒服
    zsx
        6
    zsx  
       2016-06-01 17:50:25 +08:00
    @mahone3297 这里 throw 出来后后续不会执行, else 是多余的,直接 if 就好了。
    yzyzsun
        7
    yzyzsun  
       2016-06-01 8:00:29 +08:00
    看标题还以为是说 Ruby 的 Slim ……
    anewg
        8
    anewg  
       2016-06-01 18:10:14 +08:00
    @zsx throw 要上面的 if 成立才会进入啊, if 不成立就判断接下来的 else if ,跟直接 if 有什么关系?
    BOYPT
        9
    BOYPT  
       2016-06-01 18:12:22 +08:00
    看来我跟楼主水平差距太大,我硬是没看出问题在哪。
    不过 3.x 的 slim 已经不用他自己的 Log 模块了,扔了很多包袱给其他包。
    raincious
        10
    raincious  
       2016-06-01 18:15:26 +08:00
    @anewg

    他的意思是可以直接

    if (!isset(self::$levels[$level])) {
    throw new \InvalidArgumentException('Invalid log level supplied to function');
    }

    if (.....

    不过其实没什么,不影响稳定性,后面重构的时候修改下就行了,并不需要惊讶。
    zsx
        11
    zsx  
       2016-06-01 18:15:56 +08:00
    @anewg 我解释错了……上面 if 成立就不会到 elseif 而且还 throw 了;如果把 elseif 改成 if 也不会有问题,上面 if 不成立就会到 elseif ,和直接 if 也没区别。
    Slienc7
        12
    Slienc7  
       2016-06-01 18:23:22 +08:00
    @zsx
    明显 else if 更优雅。
    audi
        13
    audi  
       2016-06-01 18:24:19 +08:00
    lyf362345
        14
    lyf362345  
       2016-06-01 18:26:32 +08:00
    不知道这个是 slim2 还是 slim3, 我看过一部分 slim2 代码, 槽点更多.
    justanding
        15
    justanding  
       2016-06-01 19:22:29 +08:00
    @mahone3297 PSR2 里面是“应该使用关键词 elseif 代替所有 else if ,以使得所有的控制关键字都像是单独的一个词。”
    GG668v26Fd55CP5W
        16
    GG668v26Fd55CP5W  
       2016-06-01 19:34:12 +08:00 via iPhone
    意思是 else if 多加了一个空格,所以问题很大?
    shiny
        17
    shiny  
       2016-06-01 19:37:11 +08:00
    正是提 pull request 好机会呀
    orvice
        18
    orvice  
       2016-06-01 19:47:25 +08:00
    mahone3297
        19
    mahone3297  
       2016-06-01 21:25:18 +08:00
    @zsx 怎么会多余。。。又不一定进 if 流程
    看了你后面的解释,还是没明白。。。

    @justanding 原来如此,有可能是你说的这个。
    zsx
        20
    zsx  
       2016-06-01 21:38:15 +08:00
    @mahone3297 所以我貌似直接忽略了 PSR (然后 get 错点了(
    hylent
        21
    hylent  
       2016-06-01 21:46:44 +08:00 via Android
    psr 是一个问题
    另外 elseif 本身不需要 直接 if 不就可以了么
    反正我个人的习惯 很少用 elseif
    if 要么抛出异常 要么 return 跳出函数 主体流程都是保持在一个缩进里的 这样看起来更舒服
    对于实在要用 elseif 的 我宁可转为 switch
    alexapollo
        22
    alexapollo  
       2016-06-01 22:06:15 +08:00
    这个槽点明显不正确吧?

    if -> else if 这样的逻辑可以做著名的的火车选路,可以做更好的跳转的。运行起来会比多个 if 更快。
    arakashic
        23
    arakashic  
       2016-06-02 03:34:10 +08:00
    除非 code style 上有要求,要不然这个 case 里面
    if () {
    throw
    } else if {
    }

    if () {
    throw
    }
    if {
    }
    有啥区别?不能光凭这一点就吐槽“能写出这种代码的人,还有人推崇。。。”吧。
    xiamx
        24
    xiamx  
       2016-06-02 06:27:37 +08:00
    没啥不好,这种写法完整的描述了一个 state transition
    qhgongzi
        25
    qhgongzi  
       2016-06-02 09:10:53 +08:00
    确实是不用 else if ,增加了理解难度,可以在后面直接 if
    but....这么点小瑕疵,就上升到"能写出这种代码的人,还有人推崇。。。", 楼主酸味真浓。
    要不楼主亮亮你的代码,看看有多少值得推崇的好代码
    whatisnew
        26
    whatisnew  
    OP
       2016-06-02 10:35:47 +08:00
    @qhgongzi 这里只是举个典型的例子,你可以看看其他的代码,比如 Slim.php 之类的,随手翻一下
    Slienc7
        27
    Slienc7  
       2016-06-02 11:27:34 +08:00
    @whatisnew 能贴一下自己的代码让我们学习一下吗?
    hanzhao
        28
    hanzhao  
       2016-06-02 11:37:35 +08:00
    我也习惯这样写 有问题吗?
    ioven
        31
    ioven  
       2016-06-06 08:49:55 +08:00
    有其他小巧好用的逛街推荐不?
    jeffw
        32
    jeffw  
       2016-06-08 17:25:12 +08:00
    帖一篇王垠博客的文章,直接拉到页面最后面开始看,第 2 条。
    http://www.yinwang.org/blog-cn/2013/03/15/language-design-mistake1

    然后再读读他的这篇文章,我觉得他说的是很有道理的。
    http://www.yinwang.org/blog-cn/2015/11/21/programming-philosophy
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2637 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:54 PVG 22:54 LAX 07:54 JFK 10:54
    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