1
Septembers 2015-05-08 23:38:33 +08:00
这图,这不算技巧把,这个逻辑优化在任何语言上都适用
|
2
greatyao 2015-05-08 23:41:58 +08:00 via Android
good
|
3
yukirock 2015-05-08 23:51:28 +08:00
|
4
laotaitai 2015-05-08 23:53:51 +08:00
我觉得第一个易读.
|
5
mimzy 2015-05-08 23:56:04 +08:00
感谢分享。写 C# 的时候 Resharper 有一个自选的功能叫 Invert "if" statement to reduce nesting,和楼主说的应该是同样的道理。
|
6
donghouhe 2015-05-09 00:51:17 +08:00 via Android
@yukirock 大哥你二了,用and不是&&吧
我也来个 ``` if all( is_for_sale(item), compute_cost(item) > wallet.money ): buy(item) ``` |
7
chevalier 2015-05-09 00:55:21 +08:00
<代码大全>里面专门有教这个,把多个嵌套的循环/判断改写的可读性好
|
8
zhengkai 2015-05-09 01:06:48 +08:00 2
是的,真有心想以编程为职业的话,还是去看下《代码大全》吧,这本书不会让你得到什么深奥的计算机知识,都是些基本常识,我觉得具备常识和不具备常识的人之间沟通是有障碍的。明明是花一个月时间就能整本书几百页看完都掌握的了知识,却要隔三差五去把其中的零碎的只言片语当成什么花哨技巧,从而一辈子都没法去学完
《代码大全》讲了减少缩进有很多种方法,还比方说,没有循环的情况下,如果 if 层数太多,可以加个 do { ... } while (false) ,然后每个 if 里都是 break |
9
powergx 2015-05-09 01:13:03 +08:00
代码短,好看 != 性能好
把自己当成解释器跑人脑跑一边就知道了 |
10
geeklian 2015-05-09 03:47:39 +08:00 via iPhone
为了代码的可读性,可维护性,应该优先选择接近业务逻辑和自然语言的,而不是代码好看。
|
11
ryd994 2015-05-09 04:51:00 +08:00
其实性能上是一样的
层数多又不影响大O |
12
puncsky 2015-05-09 05:59:32 +08:00
Code Complete +1
|
13
billgreen1 2015-05-09 10:48:53 +08:00
不应该用列表推导式吗?
[by(item) for item in items if is_for_sale(item) and compute_cost(item)<= wallet.money] |
14
erik0 2015-05-09 11:19:42 +08:00
教你学用continue
|
16
yukirock 2015-05-09 12:55:20 +08:00
|
18
Gandum 2015-05-09 15:01:18 +08:00 via iPhone
一猜就是continue
|
19
handleyan 2015-05-09 17:01:02 +08:00 via iPhone
楼主好不容易在编程的世界里迈出了可贵的一步,你们就不能给点掌声吗?谁当年不是这么一步一步过来的,楼主加油!
|
20
ctexlive 2015-05-09 17:20:32 +08:00 via Android
这个代码唯一好处就是改进了缩进样式。
|
21
fatestigma 2015-05-09 17:41:31 +08:00 via iPad
这个好像是叫德摩根定律。。
|
22
shierji 2015-05-09 21:19:19 +08:00 via Android
感觉很有用 谢谢
|
23
x88484532 2015-05-10 14:39:55 +08:00
前段代码只是加深了判断层次,并没有加深循环层次
|
24
hhstore 2015-05-13 10:24:31 +08:00
用continue除了让代码变得不直观,增加debug的麻烦.看不出有啥意义.
写可维护性高,易读,易debug,不易出错的代码,比炫技更重要. 代码少,你用continue还可控. 代码量大了,过段时间,估计你自己都不确信自己当初是否是想表达这样的逻辑. 个人不喜欢版本2的写法,团队里,谁滥用这种写法,估计是神烦的. 不过倒是引起一个好奇,有必要检索一下常见的框架源码(Django,Flask)中有多少continue关键词. 看看正经的项目,有多少滥用continue的. |
25
hhstore 2015-05-13 10:45:33 +08:00
我简单的在pycharm中检索了我的开发环境/Library/Python/2.7/site-packages目录下出现continue的包:
统计如下: ======================================= 项目 / 源码 / 单元测试 django /220次(口算求和,不一定准确) 10次 flask /2次 tornado /40次 /10次 bottle /9次 requests /16次 jinja2 /24次 httplib2 /6次 bs4 /7次 scrapy /13次 sqlalchemy /101次 /5次 ======================================= 简单挑了几个,可以看出来.大多数的项目,使用continue的关键字都是极少. 我检索了我所有的开发包,总共出现942次continue. 安装的很多包,都是0次~ ======================================= 感兴趣的小伙伴,自行看看自己的pycharm,做这个统计,还是很轻松的. |