大家难道不觉得滥用三元运算符的用法很艹蛋么

2015-09-10 12:20:49 +08:00
 abcfyk
以下代码出自medoo,(php 一个数据库操作类)。总体写得不错,在看源码的时候其中有些写法让我蛋疼。。

foreach ($relation as $key => $value ){
$joins[] = (
strpos ($key, '.') > 0 ?
'"' . str_replace ('.', '"."', $key ) . '"' :
$table . '."' . $key . '"'
) .
' = ' .
'"' . (isset ($match[5]) ? $match[5] : $match[3]) . '"."' . $value . '"';
}

能一次过看懂以上代码的码农请举手。。
7076 次点击
所在节点    问与答
33 条回复
sandideas
2015-09-10 12:22:54 +08:00
让我想起来一个梗。
a==b?a:b
leavic
2015-09-10 12:25:25 +08:00
全世界最好的语言可读性真 tm 高
laoyur
2015-09-10 12:27:16 +08:00
其实还好了,人家还很贴心地把 ? 和 : 单独作为一行
Felldeadbird
2015-09-10 12:30:56 +08:00
没看出滥用啊。
shuimugan
2015-09-10 12:32:50 +08:00
三目运算符,凡是超过一行的,或者一行长达 70 个字符左右的,看到一个就重写一个

php 的替代语法也是蛋疼,简直是坑队友神器:
phpstrom 无法高亮逻辑边界
netbeans 对于逻辑开始的边界只高亮个冒号,对于代码过长时上下翻动不方便,sublime text 的 BracketHighlighter 插件还好

但是共同的缺点都是无法直接一个快捷键匹配括号来快捷跳转,都得用肉眼去区分逻辑块
凡是用了替代语法的,见一个改一个
chmlai
2015-09-10 12:34:09 +08:00
又没有嵌套, 这有什么问题.
catfan
2015-09-10 12:39:34 +08:00
人家明明在源代码换行处还写了注释的...怎么把它给删除了?
ffffwh
2015-09-10 12:49:10 +08:00
if (xx ){yy}else{zz} <-- 这个叫 if 语句
xx?yy:zz <-- 请称呼为 if 表达式 /条件表达式

不再多说
jhdxr
2015-09-10 12:51:18 +08:00
我也没觉得有什么问题,相比之下如果拆成两个 if 我觉得会更蛋疼些
cin
2015-09-10 12:52:14 +08:00
为什么不格式化下代码, 你这样发的帖看一眼就想 x 掉.
lianyue
2015-09-10 13:06:17 +08:00
还好 来看看我写的。。我找找。。
// 不需要该表的
if ($tables && !($table->alias ? in_array ($table->alias, $aliasUse, true ) : ($table->expression || in_array ($table->value, $aliasUse, true ))) && (is_array ($table->column ) && !array_intersect ($table->column, $columnUse ))) {
continue;
}
lianyue
2015-09-10 13:06:30 +08:00
在 if 里面里面用 。。。
ck65
2015-09-10 13:10:56 +08:00
medoo 猫不服请大家不要忽略啊 xD
ChiangDi
2015-09-10 13:47:47 +08:00
我讨厌这个三元运算符,除了最简单的情况基本上不用。
raincious
2015-09-10 14:00:23 +08:00
我能看懂……

第一行:判断是否有. <=点
第二行:如果有,就将字符串组合成"something"."blabla"(话说不应该是`么喂 4 ?)
第三行:否则,就拼成 table."col"( table 是自己拿参数补的,自己之前已经包好了")

果然是 PHP 写太多了。
realpg
2015-09-10 14:01:51 +08:00
是不是你把缩进干掉了……
源代码除了换行还是有缩进的吧……
有缩进的话看起来不难看啊
Xrong
2015-09-10 14:11:51 +08:00
我觉得这个还好吧,又不是嵌了 5 、 6 层
jin5354
2015-09-10 14:14:02 +08:00
我觉得用三元运算符节省代码行数完全没有必要
除了极简单的操作我会用,其他都用 if
mcfog
2015-09-10 14:24:09 +08:00
这里主要坑在长字符串拼接吧
msg7086
2015-09-10 14:40:04 +08:00
首先这里的问题根本不是三元运算符而是字符串拼接。

$keyformat = ... ? ... : ...;
$key = sprintf ($keyformat, str_replace (......, $key ));
$valformat = ... ? ... : ...;
$val = sprintf ($valformat, $value );
$joins[] = sprintf ("%s=%s", $key, $val );

同样是 2 个三元运算符,这样写你看着有困难么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX