do...while 语句 ,做了一年开发,从来没用到过,是不是我太菜了。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
k8ser
V2EX    程序员

do...while 语句 ,做了一年开发,从来没用到过,是不是我太菜了。

  •  
  •   k8ser 2019-03-27 13:19:33 +08:00 9302 次点击
    这是一个创建于 2466 天前的主题,其中的信息可能已经有所发展或是发生改变。
    68 条回复    2019-03-28 17:47:56 +08:00
    Kaiv2
        1
    Kaiv2  
       2019-03-27 13:29:07 +08:00 via Android
    这。。。怎么联想的。不自信?
    whoami9894
        2
    whoami9894  
       2019-03-27 13:33:50 +08:00 via Android
    用哪种循环结构还不是看个人习惯,而且 Go 里只有个 for
    baronOvO
        3
    baronOvO  
       2019-03-27 13:34:34 +08:00 via Android
    有什么必然关系吗?
    适用场景的问题吧
    fngtz
        4
    fngtz  
       2019-03-27 13:36:18 +08:00 via iPhone   36
    没用过这个语句不能说明你菜。

    但是你这样想,大概率还是能说明你菜的。
    terence4444
        5
    terence4444  
       2019-03-27 13:41:15 +08:00
    我会尽量少用这种不确定循环次数的语句,用到就要非常小心退出条件。
    k8ser
        6
    k8ser  
    OP
       2019-03-27 14:04:41 +08:00
    谢谢大家,发帖前没有谨慎思考。本意是想知道大家有没有用到。挺常见但是自己几乎没有用到。
    watzds
        7
    watzds  
       2019-03-27 14:04:56 +08:00
    do {…} while(false) 见过吗
    th1nk
        8
    th1nk  
       2019-03-27 14:05:03 +08:00
    laravel 框架从来不用 else,牛逼不牛逼。
    k8ser
        9
    k8ser  
    OP
       2019-03-27 14:07:44 +08:00
    @watzds 没有
    @th1nk NB$L
    charliecheng
        10
    charliecheng  
       2019-03-27 14:13:41 +08:00
    我一般都用 try{} catch{}
    sugars
        11
    sugars  
    PRO
       2019-03-27 14:14:27 +08:00
    不要为了用而用
    Raymon111111
        12
    Raymon111111  
       2019-03-27 14:15:29 +08:00
    4L 说的对
    Variazioni
        13
    Variazioni  
       2019-03-27 14:17:54 +08:00
    三年了。。表示也没用过。。甚至有时候需要先执行过程也想不起 do while。。一直都是用 for。。线程里的永真循环就用 while。。
    k9982874
        14
    k9982874  
       2019-03-27 14:19:35 +08:00
    do..while 在某些情况下函数内代码分块,划分变量作用域,替代 goto 还是很好用的
    binux
        15
    binux  
       2019-03-27 14:19:48 +08:00 via Android
    可以用来优化代码结构,但是不必要。
    arthas2234
        16
    arthas2234  
       2019-03-27 14:24:42 +08:00
    Java。。。一直用 foreach
    Febers
        17
    Febers  
       2019-03-27 14:26:48 +08:00 via iPhone
    用过一次,Java 的 readLine 判空读取文件,用 Kotlin 的时候只能写成 do...while
    Febers
        18
    Febers  
       2019-03-27 14:35:36 +08:00 via iPhone
    @Febers 其实也可以在循环里边 break,但是还是用了 do...while ~倒也说明了很不常用~~~
    zhuangzhuang1988
        19
    zhuangzhuang1988  
       2019-03-27 14:39:23 +08:00
    除了 c /c ++ 里 宏用过 别的地方从来没用过
    Mac
        20
    Mac  
       2019-03-27 14:40:27 +08:00 via Android
    还有人用几百万条 if then 开发游戏呢,能跑就行
    duql
        21
    duql  
       2019-03-27 14:46:20 +08:00
    很不喜欢在 do..while 里 break 来代替 goto 那种代码,增加了一层缩进,也没比 goto 清晰多少
    pkookp8
        22
    pkookp8  
       2019-03-27 14:53:17 +08:00 via Android   1
    真想打死说 goto 不好的人,代码结构是看写法,不是看关键字的
    逻辑混乱不用 goto 也混乱
    逻辑清晰 setjump 都能看的明明白白
    darknoll
        23
    darknoll  
       2019-03-27 14:56:12 +08:00
    do...while 不是用来循环的,用来写宏函数的
    mortonnex
        24
    mortonnex  
       2019-03-27 14:57:19 +08:00
    do {}
    while(false)

    这种写法爽的一匹
    dfourc
        25
    dfourc  
       2019-03-27 14:57:40 +08:00
    一直用 for 从来没用过 do...while
    des
        26
    des  
       2019-03-27 15:08:34 +08:00 via Android
    do {} while(false) 加 break,只用过这种
    notreami
        27
    notreami  
       2019-03-27 15:15:21 +08:00
    golang 码农表示,完全不知道还有这个玩法。。
    SuperMild
        28
    SuperMild  
       2019-03-27 15:21:22 +08:00
    其实基本上都用 for,连 while 都很少用到( C 语言除外)。
    LiHaiWordGe
        29
    LiHaiWordGe  
       2019-03-27 15:28:19 +08:00
    do {}
    while(false)

    shangfabao
        30
    shangfabao  
       2019-03-27 15:31:19 +08:00
    那你单用过 while 么?
    AV1
        31
    AV1  
       2019-03-27 15:32:13 +08:00
    其他语言不做评论,但是如果在 JS 里用 do{break}while(false)的话,那就真的太菜了,因为 JS 有更优雅的 labeled block 用法。
    k8ser
        32
    k8ser  
    OP
       2019-03-27 15:32:25 +08:00
    @shangfabao 记得用过,哈哈
    marsgt
        33
    marsgt  
       2019-03-27 15:33:25 +08:00
    是。
    下一个问题。
    marsgt
        34
    marsgt  
       2019-03-27 15:35:18 +08:00
    其实用不用无所谓吧,for 已经基本能满足 90%的场景了。前两天学 c 才知道,Go 语言里连 while 关键字都省了,直接抓 for 来兼职(不分段形式就是 while )……
    jinksw
        35
    jinksw  
       2019-03-27 15:35:22 +08:00
    C 语言会把这个用在定义宏上面
    因为 用别的实现不了

    具体我忘了,不过我在书上看到过,在哪看到的忘了
    R4mble
        36
    R4mble  
       2019-03-27 15:36:01 +08:00
    我都不怎么用 while
    attackonFourier
        37
    attackonFourier  
       2019-03-27 15:38:13 +08:00
    js 循环都可以拿掉 用递归来代替
    cortexm3
        38
    cortexm3  
       2019-03-27 16:06:29 +08:00
    do {} while(0)
    firebroo
        39
    firebroo  
       2019-03-27 16:24:34 +08:00
    c/c++的宏吧。。
    qianji201712
        40
    qianji201712  
       2019-03-27 16:35:56 +08:00
    for foreach while 这三个就够了,do while 个人感觉使用怪怪的,主次颠倒了
    avenger
        41
    avenger  
       2019-03-27 16:39:18 +08:00 via iPhone
    goto 用过吗?;-)
    uleh
        42
    uleh  
       2019-03-27 17:09:35 +08:00
    说明你不是一个 C 程序员 :doge:
    0x11901
        43
    0x11901  
       2019-03-27 17:19:20 +08:00
    虽说这么想确实有点菜,不过讲道理的话还是要看看你用的是什么语言,如果需要编译开编译器优化的话,三种常见的循环结构最终机器码应该是一致的,不一致请去砍写编译器的人
    0x11901
        44
    0x11901  
       2019-03-27 17:20:10 +08:00
    @0x11901 所以只是一个品味问题。
    bravecarrot
        45
    bravecarrot  
       2019-03-27 17:20:56 +08:00 via iPhone
    只用过 for 和 while
    工作一年了 do while 从没用过
    cpp 程序员
    zwh2698
        46
    zwh2698  
       2019-03-27 17:29:06 +08:00 via Android
    可以取消 goto 语句,优化流程。
    RyougiShiki
        47
    RyougiShiki  
       2019-03-27 17:31:52 +08:00
    所以 python 里没有它
    iffi
        48
    iffi  
       2019-03-27 17:34:28 +08:00
    可以用来重试,比较适合语意,即至少执行 1 次。do{请求}while(在重试次数限制范围内 && 第一次请求失败)
    inoki
        49
    inoki  
       2019-03-27 17:48:42 +08:00 via Android
    @watzds PHP src 里 zend engine 的 macro ?
    Akiyu
        50
    Akiyu  
       2019-03-27 17:54:15 +08:00
    我在真实环境下用到的 do{}while(false) 是为了那个 break
    在某一条件不成立的时候可以立马 break 出去
    Joyboo
        51
    Joyboo  
       2019-03-27 18:03:40 +08:00
    golang 一招 for 走天下
    YuTengjing
        52
    YuTengjing  
       2019-03-27 18:27:39 +08:00 via Android
    do while 场景有限,不过一年开发,如果是业务开发,讲道理是应该会碰到过
    xiangyuecn
        53
    xiangyuecn  
       2019-03-27 18:52:40 +08:00
    @watzds #7 do {…} while(false) 用的少,因为多了一个 do,记不住这么多语法。。。不过 while(true){... break}用的炒鸡多。
    herozzm
        54
    herozzm  
       2019-03-27 18:54:13 +08:00
    并不是,go 直接没有 do while,说明这个没有多少存在感
    Nicoco
        55
    Nicoco  
       2019-03-27 18:56:42 +08:00
    表示主力用 for,用 do { } while () 较少
    dremy
        56
    dremy  
       2019-03-27 18:57:21 +08:00 via iPhone
    do … where 用来做重试逻辑很方便啊,where 里面做是否需要重试的判断就好了
    meiyoumingzi6
        57
    meiyoumingzi6  
       2019-03-27 20:13:27 +08:00 via Android
    没用过

    可能因为我是个 python 猿
    bp0
        58
    bp0  
       2019-03-27 23:07:19 +08:00
    有些公司的编程规范要求函数不能多个 return,这时可以用 do{}while(0)加 break 模拟。

    另外一种情况就是正宗的 do while 用法,确实某些情况下需要先执行一次,然后再进行判断。
    yim7
        59
    yim7  
       2019-03-28 09:35:35 +08:00
    python 太菜了,没见过 do while
    qsbaq
        60
    qsbaq  
       2019-03-28 10:35:53 +08:00
    php 中从没用过 do while
    freedomshi
        61
    freedomshi  
       2019-03-28 11:00:27 +08:00
    chtcrack
        62
    chtcrack  
       2019-03-28 12:00:02 +08:00
    do while 和 for 差别很小的..for 写起来会比 do while 简单一些..看个人习惯吧.举例 int i=0;
    while(i<10)
    {
    i++;
    }
    上面的 while 和下面 for 其实执行的都是一个鸟样.
    for(int i=0;i<10;i++)
    {
    }
    jadeity
        63
    jadeity  
       2019-03-28 12:29:04 +08:00
    这就是个冗余的表达方式,存在但是没必要,所以 golang 只有一个 for (非褒非贬)。
    gamexg
        64
    gamexg  
       2019-03-28 12:50:33 +08:00
    go 里面只剩下了 for ...

    另外 c 里面虽然知道,但是印象真没用过。
    Paual
        65
    Paual  
       2019-03-28 13:13:06 +08:00
    do,while {} 可以进行重试机制吧,这个也是看大神的代码的时候看到的
    do {

    //进行相关操作

    } while ($this->result() !=0 $count<3) 可以进行重试机制,当函数 result 的结果不为 0,进行 do while 循环中的内容,也就是当函数结果没有执行成功的时候可以进行循环代码中的代码,也即重试机制
    Paual
        66
    Paual  
       2019-03-28 13:14:58 +08:00
    代码应该是这个:
    $count = 0;
    do {

    //进行相关操作

    } while ($this->result() !=0 && $count<3) 可以进行重试机制,当函数 result 的结果不为 0,进行 do while 循环中的内容,也就是当函数结果没有执行成功的时候可以进行循环代码中的代码,也即重试机制
    viger
        67
    viger  
       2019-03-28 14:54:12 +08:00
    do{}while(0)用的最多,主要是为了解决多层嵌套判断问题。
    当然如果有时候需要先执行一波再来判断的循环也会用到,不过这种场景比较少
    dearmymy
        68
    dearmymy  
       2019-03-28 17:47:56 +08:00
    我就是这么搞的,
    int liRet = -1
    do
    {
    liRet = doSomething()
    if(liRet !=0)
    break
    .....
    liRet = 0
    }while(false)
    return liRet
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5269 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 08:50 PVG 16:50 LAX 00:50 JFK 03:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86