• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xiusedelang
V2EX  ›  程序员

只有我习惯写 if (true == file.exists()) 这样的代码吗?

  •  
  •   xiusedelang · Sep 30, 2015 · 9851 views
    This topic created in 4052 days ago, the information mentioned may be changed or developed.

    我感觉这样代码看着有莫名的对称美感。虽然多打点字,但是看代码时逻辑更容易理解。
    只有我这样觉得吗?

    67 replies  •  2015-10-05 15:11:48 +08:00
    xmbaozi
    xmbaozi
    Sep 30, 2015
    1
    file.exists() == true
    怎么觉得这样更符合逻辑
    lsmgeb89
    lsmgeb89
    Sep 30, 2015❤️2
    2
    if (file.exists())

    if (!file.exists())
    blacktulip
    blacktulip
    Sep 30, 2015
    3
    英语而论 if file exists 显然更流畅
    render
    render
    Sep 30, 2015
    4
    这样写多此一举,没意义。
    vietor
    vietor
    Sep 30, 2015 via Android
    5
    把缺点美化成优点。之前国内有些人写的编程类的书中推荐的方法、风格很多都是坑人的。
    lsmgeb89
    lsmgeb89
    Sep 30, 2015
    6
    @xmbaozi 是防止少写一个等号,造成 bug 。所以写在左边,这样如果少写了,就会编译错误。它还有个名字叫 Yoda 表示法,见:
    http://www.yinwang.org/blog-cn/2013/04/14/yoda-notation/
    aprikyblue
    aprikyblue
    Sep 30, 2015
    7
    多此一举,而且实在看不出 哪里逻辑更容易理解。。。

    还是习惯这样
    > if ( file.exists() )
    jydeng
    jydeng
    Sep 30, 2015
    8
    true 和 false 从来不写,都是 if(条件) 、 if(!条件)。
    zenjayjay
    zenjayjay
    Sep 30, 2015
    9
    true 写在前面是好的,不过语义化应该是“如果存在”,那个 true 就没必要写了吧。
    echo1937
    echo1937
    Sep 30, 2015
    10
    其实是你习惯了而已,就好比 “朱逸之” 这样的名字。
    YuJianrong
    YuJianrong
    Sep 30, 2015
    11
    Yoda 表示法现在来看毫无意义,阅读起来明显 变量 == 常亮 更符合人类阅读习惯。至于写错的问题,现代软件开发的编译器或者语法检查器早就能解决这种无聊的问题了……
    wdlth
    wdlth
    Sep 30, 2015
    12
    以前总有人说 value == false 应该写成 false == value ,这样就算写成了一个=, value 不会被赋值。
    不过很多 IDE 是不允许在判断时写一个=的,还有 Java 、 Python 等语言可以用 equals 、 is 等方法判断,看来还是要与时俱进。
    88250
    88250
    Sep 30, 2015 via Android
    13
    看你们讨论,我又写了几行。😊
    suduo1987
    suduo1987
    Sep 30, 2015 via iPhone
    14
    null==?, true 不写
    Quaintjade
    Quaintjade
    Sep 30, 2015
    15
    我觉得 Yoda conditions 中文可以翻译成智叟表示法(甚矣,汝之不惠)。。。
    samael
    samael
    Sep 30, 2015
    16
    @vietor 0bug 是吧?:D
    zjqzxc
    zjqzxc
    Sep 30, 2015
    17
    if(file.exists()) ...;
    else ...;

    如果文件存在执行...;否则的话执行...
    多自然语言~~一边说中文一边写。
    matthewgao
    matthewgao
    Sep 30, 2015
    18
    这个逻辑还没复杂到需要这样写,这么简单的直接写就好
    crazystory
    crazystory
    Sep 30, 2015❤️2
    19
    看到有人说 if 写一个等号会有 IDE 提示错误的我也是醉了。在支持多种语言的 IDE 下,是否提示错误是根据语言来的。比如 if ($a = 1)这种语法在 php 中属于合法的,IDE 并不会提示错误, IDE 会提示错误,但在 golang 中这样写是会直接报错的。所以结论就是 yoda 并不是一竿子打死的的无意义,在某些语言里还是有重大意义的
    crazystory
    crazystory
    Sep 30, 2015
    20
    建议多去了解一下其他语言的规范再来说某种写法是否有意义
    NoOneAI
    NoOneAI
    Sep 30, 2015
    21
    @YuJianrong 正解
    dorentus
    dorentus
    Sep 30, 2015 via iPad
    22
    @crazystory PHP 的 IDE 太多了我不知道, Objective-C 也一样,赋值表达式是有值的,并且大部分类型的值可以隐式转化为布尔值,于是你那种写法也是合法的语句,但是正常配置的 Xcode 还是会给一个警告。

    我写这么多只是想说,和语言规范无关,编译器或者 IDE 只要想做到,就完全可以给用户可能出错的代码以警告。
    xcv58
    xcv58
    Sep 30, 2015 via iPhone
    23
    反正编译器会给你优化掉
    lincanbin
    lincanbin
    Sep 30, 2015
    24
    反正我在 PHP 中习惯这么写,并且还是用强类型比较符===,很多函数都是返回 mixed 。
    只要有值,不一定是 bool true ,都能使 if 成立。
    ncwhale
    ncwhale
    Sep 30, 2015
    25
    @lincanbin 那是因为 PHP 是世界上最好的语言啊喵~
    zmj1316
    zmj1316
    Sep 30, 2015
    26
    @lsmgeb89 这应该是在没有 Bool 类型的时候或者比较常量的时候才使用,如果语言支持 bool 类型那就是多此一举
    ryd994
    ryd994
    Sep 30, 2015
    27
    gcc warning 妥妥的
    fengxiang
    fengxiang
    Sep 30, 2015 via Android
    28
    true,false =false,true
    zhujinliang
    zhujinliang
    Sep 30, 2015
    29
    if (脱裤子 == 放屁())
    刚才脑中突然出现这句话,然后自己被自己逗笑了。。。

    话说印象中以前 Basic 要写 if Something = false then ... 而不是 if !Something then ,具体怎么回事记不清了,或许是某些 Basic 解释器只认 if ... = ... then 的形式,也可能是我记错了
    huanglexus
    huanglexus
    Sep 30, 2015❤️1
    30
    你这就和 if (true) return true else return false 差不多...
    RemRain
    RemRain
    Sep 30, 2015❤️1
    31
    不是应该写成 if (false != file.exists()) 吗?

    另外推荐这么写: if (false xor file.exists()),除了有莫名的对称美感外,还有莫名的专业感~
    blue7wings
    blue7wings
    Sep 30, 2015
    32
    这个是很久以前的方式了,《编写可执行代码》一书中,还专门说了这个问题,现在已经不提倡这么些了,影响代码的阅读,虽然自己看着舒服,如果别人看的话就莫名的难受了。
    mimzy
    mimzy
    Sep 30, 2015
    33
    《编写可读代码的艺术》里提到了这个问题:
    「比较的左侧:“被问询的”表达式,它的值更倾向于不断变化。比较的右侧:用来做比较的表达式,它的值更倾向于常量。」
    「这条指导原则和英语的用法一致。我们会很自然地说:“如果你的年收入至少是 10 万美元”或者“如果你不小于 18 岁。”而“如果 18 岁小于或等于你的年龄”这样的说法却很少见。」
    「遗憾的是,这种顺序的改变使得代码读起来很不自然(就像电影《星球大战》里的尤达大师的语气:“除非对此有话可说之于我”)。庆幸的是,现代编译器对 if (obj = NULL) 这样的代码会给出警告,因此“尤达表示法”是已经过时的事情了。」
    mornlight
    mornlight
    Oct 1, 2015
    34
    我们的编码规范里直接禁止写 == YES 这种
    vikeria
    vikeria
    Oct 1, 2015 via Android
    35
    看着不觉得蛋疼吗?
    gamexg
    gamexg
    Oct 1, 2015
    36
    python 表示少一个=号直接报错。
    tushiner
    tushiner
    Oct 1, 2015
    37
    判断布尔类型值不用这样,判断数据值和类型是否相等用 equal ,直接用"=="在面向对象语言中的应用越少越好
    oska874
    oska874
    Oct 1, 2015
    38
    题主 C 出身吧。
    pseudo
    pseudo
    Oct 1, 2015
    39
    @echo1937 请问朱逸之是个什么梗,一直没弄清楚
    angkec
    angkec
    Oct 1, 2015
    40
    @pseudo 猪一只?
    ekousp
    ekousp
    Oct 1, 2015
    41
    这样写 code review 不会通过的哟。
    chiu
    chiu
    Oct 1, 2015
    42
    @xmbaozi 一般把常量放在左边,这样在“==”误打成“=”的情况下,编译器会报错。
    honeycomb
    honeycomb
    Oct 1, 2015 via Android
    43
    @chiu 这个习惯没坏处
    chmlai
    chmlai
    Oct 1, 2015
    44
    这种写法没任何好处.
    搞不好还会出来 N 多变种:
    ```
    if (true == file.exists())
    if (true != file.exists())
    if (false == file.exists())
    if (false != file.exists())
    ```
    hualuogeng
    hualuogeng
    Oct 1, 2015
    45
    我只有在==的情况下才把常量写在左侧。
    noli
    noli
    Oct 1, 2015
    46
    这种情况 ( == 右边是中间变量的情况下)即使反过来写并且少打了一个等于号,绝大多数语言的编译器都是会 complain 的吧? 所以这么写完全没有意义。
    pseudo
    pseudo
    Oct 1, 2015
    47
    @angkec 谢谢原来是这个 OTL
    echo1937
    echo1937
    Oct 1, 2015
    48
    @pseudo "猪一只"啊,“朱逸之” 这取名外表看着非常大气有才学吧,实际就是个蠢主意。
    abscon
    abscon
    Oct 1, 2015 via iPhone
    49
    如果真的是存在文件
    --------
    楼主你平时这样说话?
    crazystory
    crazystory
    Oct 1, 2015
    50
    @dorentus 合法的语法为何要警告。这不是多此一举。 就是需要这样写呢。
    thxmem
    thxmem
    Oct 1, 2015
    51
    记得有书推荐这种写法,不过看起来很别扭。
    anjouslava
    anjouslava
    Oct 2, 2015
    52
    @crazystory 合法的语法也会警告,因为在条件判断的地方写赋值语句是明显的无意义错误,高级 IDE 设计的时候就考虑到了
    legendlee
    legendlee
    Oct 2, 2015 via Android
    53
    我的习惯是:
    bool 类型和指针的判断不用==号,直接 if ( file.valid())和 if(ptr)。
    其他类型的使用常量==变量的形式。
    gladuo
    gladuo
    Oct 2, 2015
    54
    这个逼装的已经不流行了
    orzfly
    orzfly
    Oct 2, 2015 via Android
    55
    @crazystory 我见过的一些 IDE / 编译器是你再套一层括号,比如 if ((result = someMagic())) 他就不给你警告了……
    limuxy
    limuxy
    Oct 2, 2015 via Android
    56
    到底对称在哪里……
    nozama
    nozama
    Oct 2, 2015 via Android
    57
    我发现很多人自己根本不思考,书上说这样,就必须这样... 还有一种奇葩习惯是,任何指针使用前都加一句 if(ptr)…, 但是又忽略 else 的情况,结果虽然临时避免了 bug ,却隐藏了更多 bug
    CRVV
    CRVV
    Oct 2, 2015
    58
    @crazystory
    建议自己把代码写出来用编译器编译一下再来说事
    “合法的语法为何要警告”... 你是只写过 Go 么
    警告就是在合法的语句里找不合适的地方

    C 语言用 ‘ gcc -Wall ’ 编译,会对 if(a=1)给 Warning
    adonishong
    adonishong
    Oct 3, 2015
    59
    楼主自己没发现这个写法最大的好处?这个写法最大的好处是如果把 if (true == file.exists()){} 错写成 if (true = file.exists()){}的时候,编译器会报错,编译直接过不去;如果是 if (file.exists() == true){}少写一个等号,编译器不会出错,跑起来会有不定期的错误,并且不太好查。。。
    adonishong
    adonishong
    Oct 3, 2015
    60
    @lincanbin

    re 。。。转到 php 之后,掉了几次坑,然后就习惯写===和!==了
    yuchting
    yuchting
    Oct 3, 2015
    61
    这样的代码感觉有点蛋疼,之前遇到过老程序员看不管?:的语法,非得 if else
    hjkl0001
    hjkl0001
    Oct 3, 2015
    62
    这样看着感觉不习惯,一直 if(file()) or if(!file())
    secondwtq
    secondwtq
    Oct 3, 2015❤️1
    63
    我认为语言本身设计存在的某些问题和缺陷,锅应该让编译器和工具链来背,而不应该让你和阅读你代码的人来背。
    Geoion
    Geoion
    Oct 4, 2015
    64
    传说中的布林表达式?
    jedihy
    jedihy
    Oct 4, 2015
    65
    写 C 都是这样写的,怕写成等于。原来项目中出过这样的错之后,就都这样写了。

    其实很大经典的库内部的代码风格也是这样( C )。
    dqh3000
    dqh3000
    Oct 4, 2015
    66
    我倒是有以后会想写
    if (exists() == true)

    我当然知道 true==exists()是避免把==写成=,但是正如楼上所说,这样毕竟和自然语言理解差别太大

    然而我有时候觉得觉得如果写 if(exists())这样,不仔细看的话,可能会跟 if(!exists())弄混,更何况还可能有 if(notExists())和 if(!notExists())或者类似的东西
    abscon
    abscon
    Oct 5, 2015 via iPhone
    67
    @dqh3000 写成 if( !exists() )就不会弄混了,感叹号前空一格,后面紧挨标识符。

    把否定词弄到标识符里不是好主意
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5371 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 198ms · UTC 01:53 · PVG 09:53 · LAX 17:53 · JFK 20:53
    ♥ Do have faith in what you're doing.