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

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

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

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

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

    if (!isset(self::$levels[$level])) {
        throw new \InvalidArgumentException('Invalid 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 18: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 ,以使得所有的控制关键字都像是单独的一个词。”
    falcon05
        16
    falcon05  
       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   ·   实用小工具   ·   3016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:41 · PVG 21:41 · LAX 05:41 · JFK 08:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.