我感觉这样代码看着有莫名的对称美感。虽然多打点字,但是看代码时逻辑更容易理解。
只有我这样觉得吗?
我感觉这样代码看着有莫名的对称美感。虽然多打点字,但是看代码时逻辑更容易理解。
只有我这样觉得吗?
|
xmbaoziSep 30, 2015
1
file.exists() == true
怎么觉得这样更符合逻辑 |
|
2
if (file.exists())
if (!file.exists()) |
|
blacktulipSep 30, 2015
3
英语而论 if file exists 显然更流畅
|
|
renderSep 30, 2015
4
这样写多此一举,没意义。
|
|
vietorSep 30, 2015 via Android
5
把缺点美化成优点。之前国内有些人写的编程类的书中推荐的方法、风格很多都是坑人的。
|
|
lsmgeb89Sep 30, 2015
6
@xmbaozi 是防止少写一个等号,造成 bug 。所以写在左边,这样如果少写了,就会编译错误。它还有个名字叫 Yoda 表示法,见:
http://www.yinwang.org/blog-cn/2013/04/14/yoda-notation/ |
|
aprikyblueSep 30, 2015
7
多此一举,而且实在看不出 哪里逻辑更容易理解。。。
还是习惯这样 > if ( file.exists() ) |
|
jydengSep 30, 2015
8
true 和 false 从来不写,都是 if(条件) 、 if(!条件)。
|
|
zenjayjaySep 30, 2015
9
true 写在前面是好的,不过语义化应该是“如果存在”,那个 true 就没必要写了吧。
|
|
echo1937Sep 30, 2015
10
其实是你习惯了而已,就好比 “朱逸之” 这样的名字。
|
|
YuJianrongSep 30, 2015
11
Yoda 表示法现在来看毫无意义,阅读起来明显 变量 == 常亮 更符合人类阅读习惯。至于写错的问题,现代软件开发的编译器或者语法检查器早就能解决这种无聊的问题了……
|
|
wdlthSep 30, 2015
12
以前总有人说 value == false 应该写成 false == value ,这样就算写成了一个=, value 不会被赋值。
不过很多 IDE 是不允许在判断时写一个=的,还有 Java 、 Python 等语言可以用 equals 、 is 等方法判断,看来还是要与时俱进。 |
|
88250Sep 30, 2015 via Android
13
看你们讨论,我又写了几行。😊
|
|
suduo1987Sep 30, 2015 via iPhone
14
null==?, true 不写
|
|
QuaintjadeSep 30, 2015
15
我觉得 Yoda conditions 中文可以翻译成智叟表示法(甚矣,汝之不惠)。。。
|
|
zjqzxcSep 30, 2015
17
if(file.exists()) ...;
else ...; 如果文件存在执行...;否则的话执行... 多自然语言~~一边说中文一边写。 |
|
matthewgaoSep 30, 2015
18
这个逻辑还没复杂到需要这样写,这么简单的直接写就好
|
|
19
看到有人说 if 写一个等号会有 IDE 提示错误的我也是醉了。在支持多种语言的 IDE 下,是否提示错误是根据语言来的。比如 if ($a = 1)这种语法在 php 中属于合法的,IDE 并不会提示错误, IDE 会提示错误,但在 golang 中这样写是会直接报错的。所以结论就是 yoda 并不是一竿子打死的的无意义,在某些语言里还是有重大意义的
|
|
crazystorySep 30, 2015
20
建议多去了解一下其他语言的规范再来说某种写法是否有意义
|
|
NoOneAISep 30, 2015
21
@YuJianrong 正解
|
|
dorentusSep 30, 2015 via iPad
22
@crazystory PHP 的 IDE 太多了我不知道, Objective-C 也一样,赋值表达式是有值的,并且大部分类型的值可以隐式转化为布尔值,于是你那种写法也是合法的语句,但是正常配置的 Xcode 还是会给一个警告。
我写这么多只是想说,和语言规范无关,编译器或者 IDE 只要想做到,就完全可以给用户可能出错的代码以警告。 |
|
xcv58Sep 30, 2015 via iPhone
23
反正编译器会给你优化掉
|
|
lincanbinSep 30, 2015
24
反正我在 PHP 中习惯这么写,并且还是用强类型比较符===,很多函数都是返回 mixed 。
只要有值,不一定是 bool true ,都能使 if 成立。 |
|
ryd994Sep 30, 2015
27
gcc warning 妥妥的
|
|
fengxiangSep 30, 2015 via Android
28
true,false =false,true
|
|
zhujinliangSep 30, 2015
29
if (脱裤子 == 放屁())
刚才脑中突然出现这句话,然后自己被自己逗笑了。。。 话说印象中以前 Basic 要写 if Something = false then ... 而不是 if !Something then ,具体怎么回事记不清了,或许是某些 Basic 解释器只认 if ... = ... then 的形式,也可能是我记错了 |
|
30
你这就和 if (true) return true else return false 差不多...
|
|
31
不是应该写成 if (false != file.exists()) 吗?
另外推荐这么写: if (false xor file.exists()),除了有莫名的对称美感外,还有莫名的专业感~ |
|
blue7wingsSep 30, 2015
32
这个是很久以前的方式了,《编写可执行代码》一书中,还专门说了这个问题,现在已经不提倡这么些了,影响代码的阅读,虽然自己看着舒服,如果别人看的话就莫名的难受了。
|
|
mimzySep 30, 2015
33
《编写可读代码的艺术》里提到了这个问题:
「比较的左侧:“被问询的”表达式,它的值更倾向于不断变化。比较的右侧:用来做比较的表达式,它的值更倾向于常量。」 「这条指导原则和英语的用法一致。我们会很自然地说:“如果你的年收入至少是 10 万美元”或者“如果你不小于 18 岁。”而“如果 18 岁小于或等于你的年龄”这样的说法却很少见。」 「遗憾的是,这种顺序的改变使得代码读起来很不自然(就像电影《星球大战》里的尤达大师的语气:“除非对此有话可说之于我”)。庆幸的是,现代编译器对 if (obj = NULL) 这样的代码会给出警告,因此“尤达表示法”是已经过时的事情了。」 |
|
mornlightOct 1, 2015
34
我们的编码规范里直接禁止写 == YES 这种
|
|
vikeriaOct 1, 2015 via Android
35
看着不觉得蛋疼吗?
|
|
gamexgOct 1, 2015
36
python 表示少一个=号直接报错。
|
|
tushinerOct 1, 2015
37
判断布尔类型值不用这样,判断数据值和类型是否相等用 equal ,直接用"=="在面向对象语言中的应用越少越好
|
|
oska874Oct 1, 2015
38
题主 C 出身吧。
|
|
ekouspOct 1, 2015
41
这样写 code review 不会通过的哟。
|
|
chmlaiOct 1, 2015
44
这种写法没任何好处.
搞不好还会出来 N 多变种: ``` if (true == file.exists()) if (true != file.exists()) if (false == file.exists()) if (false != file.exists()) ``` |
|
hualuogengOct 1, 2015
45
我只有在==的情况下才把常量写在左侧。
|
|
noliOct 1, 2015
46
这种情况 ( == 右边是中间变量的情况下)即使反过来写并且少打了一个等于号,绝大多数语言的编译器都是会 complain 的吧? 所以这么写完全没有意义。
|
|
absconOct 1, 2015 via iPhone
49
如果真的是存在文件
-------- 楼主你平时这样说话? |
|
crazystoryOct 1, 2015
50
@dorentus 合法的语法为何要警告。这不是多此一举。 就是需要这样写呢。
|
|
thxmemOct 1, 2015
51
记得有书推荐这种写法,不过看起来很别扭。
|
|
anjouslavaOct 2, 2015
52
@crazystory 合法的语法也会警告,因为在条件判断的地方写赋值语句是明显的无意义错误,高级 IDE 设计的时候就考虑到了
|
|
legendleeOct 2, 2015 via Android
53
我的习惯是:
bool 类型和指针的判断不用==号,直接 if ( file.valid())和 if(ptr)。 其他类型的使用常量==变量的形式。 |
|
gladuoOct 2, 2015
54
这个逼装的已经不流行了
|
|
orzflyOct 2, 2015 via Android
55
@crazystory 我见过的一些 IDE / 编译器是你再套一层括号,比如 if ((result = someMagic())) 他就不给你警告了……
|
|
limuxyOct 2, 2015 via Android
56
到底对称在哪里……
|
|
nozamaOct 2, 2015 via Android
57
我发现很多人自己根本不思考,书上说这样,就必须这样... 还有一种奇葩习惯是,任何指针使用前都加一句 if(ptr)…, 但是又忽略 else 的情况,结果虽然临时避免了 bug ,却隐藏了更多 bug
|
|
CRVVOct 2, 2015
58
@crazystory
建议自己把代码写出来用编译器编译一下再来说事 “合法的语法为何要警告”... 你是只写过 Go 么 警告就是在合法的语句里找不合适的地方 C 语言用 ‘ gcc -Wall ’ 编译,会对 if(a=1)给 Warning |
|
adonishongOct 3, 2015
59
楼主自己没发现这个写法最大的好处?这个写法最大的好处是如果把 if (true == file.exists()){} 错写成 if (true = file.exists()){}的时候,编译器会报错,编译直接过不去;如果是 if (file.exists() == true){}少写一个等号,编译器不会出错,跑起来会有不定期的错误,并且不太好查。。。
|
|
adonishongOct 3, 2015
60
|
|
yuchtingOct 3, 2015
61
这样的代码感觉有点蛋疼,之前遇到过老程序员看不管?:的语法,非得 if else
|
|
hjkl0001Oct 3, 2015
62
这样看着感觉不习惯,一直 if(file()) or if(!file())
|
|
63
我认为语言本身设计存在的某些问题和缺陷,锅应该让编译器和工具链来背,而不应该让你和阅读你代码的人来背。
|
|
GeoionOct 4, 2015
64
传说中的布林表达式?
|
|
jedihyOct 4, 2015
65
写 C 都是这样写的,怕写成等于。原来项目中出过这样的错之后,就都这样写了。
其实很大经典的库内部的代码风格也是这样( C )。 |
|
dqh3000Oct 4, 2015
66
我倒是有以后会想写
if (exists() == true) 我当然知道 true==exists()是避免把==写成=,但是正如楼上所说,这样毕竟和自然语言理解差别太大 然而我有时候觉得觉得如果写 if(exists())这样,不仔细看的话,可能会跟 if(!exists())弄混,更何况还可能有 if(notExists())和 if(!notExists())或者类似的东西 |