如题。
特别是在需要 return 的函数里面,真 TM 爽!
|  |      1Akiyu      2018-06-06 17:21:24 +08:00 不懂什么意思, 直接在 do while 里面写 false   不就和没有写循环控制语句一样么 | 
|  |      2rootx      2018-06-06 17:22:21 +08:00 via iPhone 怎么个爽法 | 
|      4jjianwen68      2018-06-06 17:24:35 +08:00 没明白好处 | 
|  |      5opengps      2018-06-06 17:24:56 +08:00 我也没看懂,需要跳出时候跟直接 return 有啥区别? | 
|  |      6ysc3839      2018-06-06 17:29:05 +08:00 via Android 第一次见这种用法好像是在微软的代码里?因为返回之前要释放一些资源,所以不能直接 return。 也有不用这种写法直接用 goto 的,但是 goto 只有 C/C++ 可以用。 | 
|  |      7ChristopherWu      2018-06-06 17:30:15 +08:00  1 一般是 用在宏里面吧? | 
|      8remarrexxar      2018-06-06 17:30:41 +08:00  4 是不是这个意思 do{ blockA if(...){ break; } blockB }while(false) blockC blockA 执行后满足某条件则不执行 blockB,直接执行 blockC,类似于 goto 的作用 | 
|  |      9kran      2018-06-06 17:31:08 +08:00 via iPhone 解决代码嵌套很管用 | 
|      10c3824363      2018-06-06 17:33:01 +08:00 goto 就挺好 有些语言自以为去掉 goto 就不会产生非常混乱的代码了 | 
|      11wplct      2018-06-06 17:36:25 +08:00 为啥不再定义个方法? | 
|  |      12grantonzhuang      2018-06-06 17:38:13 +08:00 via Android @remarrexxar 大 js 的立即执行函数也可以这么搞😂 | 
|  |      13ryd994      2018-06-06 17:43:03 +08:00 via Android 所以啊,实际上 goto 该用还是得用 而且你这样也只能考虑一种 bailout 实际上还会遇到多层嵌套的情况,比如到一半的时候拿了 xx 锁,过了一会又拿了 yy 内存。如果只有一层 bailout 的话就只能在出口判断自己要不要释放。 有 goto 的话加一个 cleanup xx 的 label 就好 | 
|  |      14zhuangzhuang1988      2018-06-06 17:44:45 +08:00 有好看的异常不用 用这货。 | 
|  |      15ryd994      2018-06-06 17:46:28 +08:00 via Android 等等,没有 goto 的语言一般是有 throw catch exception 的。用 exception 来代替的好处是,可以不用一层层检查返回值,直接扔给上层。用 goto 退的话,你还是跑不掉要检查返回 | 
|      16reself      2018-06-06 18:24:21 +08:00 看是啥语言。貌似还能对付宏定义的问题 | 
|      17Mitt      2018-06-06 18:28:55 +08:00 via iPhone @zhuangzhuang1988 异常代价高啊 | 
|      18notreami      2018-06-06 18:31:24 +08:00 想不明白,什么场景非要这样写,大部分语言都有对应的跳出当前代码块 | 
|  |      19cuzfinal      2018-06-06 18:41:46 +08:00 菜鸡前端无法理解 | 
|      20jiang42      2018-06-06 18:47:07 +08:00 via iPhone C 里头宏的一种惯用法 | 
|  |      21xiangyuecn      2018-06-06 18:50:42 +08:00 前端后端习惯性使用 while(true){........; break;}, 你这个少 3 个字符, 算你牛 套一层之后的最大好处是,不支持 goto、break 的代码段,可以随意 break 跳出去(滑稽 | 
|  |      22Enivel      2018-06-06 19:03:20 +08:00 return early 的一种写法,  多个 return 会使代码变得混乱, 通过 do while 进行流程控制可以 做到一个入口 一个出口. 而且可以避免 if else 嵌套 阻止箭头形代码的形成.  好处多的数不过来 大家了解一下吧 | 
|      23Loren      2018-06-06 19:29:55 +08:00 via Android C 语言的宏里也常用 | 
|  |      24bumz      2018-06-06 19:42:35 +08:00 ``` a(); do { b(); if (c()) break; d(); } while (false); e(); ``` 等价于 ``` a(); b(); if (!c()) { d(); } e(); ``` 但前者更令人费解 | 
|  |      25hsuan      2018-06-06 20:03:30 +08:00 via Android C 里非常常见的写法,居然这么多人不知道?看来 C 真是没落了。 | 
|      26VDimos      2018-06-06 20:27:36 +08:00 via Android 让我想起了 react 里面的用抛出错误的方式中断,有种异曲同工之妙 | 
|  |      27thedrwu      2018-06-06 20:33:30 +08:00 via Android  2 在古老的 C 技巧中常常用来写在宏里当作简单而正确的的 inline (比如 linux 内核中) 若是如楼上所说用作 break,那一般是编码有问题,应该试着把其中内容封装成一个函数。装成函数还能有利于单元测试。 | 
|      28iceheart      2018-06-06 20:56:45 +08:00 via Android 直接用 lambda 会更爽 | 
|      29fuxiuyin      2018-06-07 00:42:20 +08:00 via iPhone 这算是 goto 吧 | 
|  |      30takeoffyoung      2018-06-07 00:45:01 +08:00 @ysc3839 golang 的 defer 就是为这个需求量身定做 | 
|      31mon6912640      2018-06-07 01:36:48 +08:00 via Android 感谢,学到了一个实用技巧,真是巧妙 | 
|  |      32redsonic      2018-06-07 02:03:50 +08:00 竟然这么多人不知道,记得是内核开发面试必问的一道题。。 | 
|  |      33FrankFang128      2018-06-07 02:36:08 +08:00 还不如 goto 好读…… | 
|  |      34guanhui07      2018-06-07 08:25:44 +08:00 虽然我也喜欢用 goto ,很多企业 不会让用 goto 吧 - | 
|      35wanderpoet      2018-06-07 08:30:01 +08:00 via iPhone 对于 goto 的因噎废食真是够了 滥用当然不行 但也没必要一刀切的禁用 goto | 
|  |      36AV1      2018-06-07 08:32:47 +08:00  1 @xiangyuecn JS 有可读性更好的方法…… // Using a labeled block with break foo: { console.log('face'); break foo; console.log('this will not be executed'); } console.log('swap'); // this will log: // "face" // "swap | 
|      37ytlm      2018-06-07 08:44:30 +08:00 在某些情况下这种写法还是比较有用处的 | 
|      38grewer      2018-06-07 09:36:01 +08:00 在 do 里面的 break 相当于一个匿名函数的 return | 
|      39dychenyi      2018-06-07 09:37:03 +08:00 @LevineChen  对的, 这种函数开始是初始化,最后是析构,释放内存的代码,如果写 return,相当于每一个 return 前都要释放 | 
|  |      41xiangyuecn      2018-06-07 09:57:19 +08:00 @DOLLOR #36 第一次见到这个语法 只知道 for while 可以用标签 js 果然厉害 学习了 | 
|  |      42twotiger      2018-06-07 11:26:42 +08:00 class MyException(Exception): pass try: print('a1') raise MyException() print('a2') except MyException: pass print('a3') 那么在 python 里面是这种写法么? 还是经验太少了,没发现有什么亮点 | 
|  |      43stackexplode      2018-06-07 11:32:18 +08:00 这么经典的安全资源释放方法居然那么多人不知道,还批判了起来 | 
|      44dbpe      2018-06-07 11:34:25 +08:00 不是很理解...中午去跟一下... |