V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
esolve
V2EX  ›  问与答

仅在循环内使用的相同的声明赋值语句放在循环内还是循环外?

  •  
  •   esolve · 2017-06-21 11:26:57 +08:00 · 2086 次点击
    这是一个创建于 2713 天前的主题,其中的信息可能已经有所发展或是发生改变。

    譬如

    Integer i = cal(x,y);
    for(...){
        int k = i*j;
        ....
    }
    
    还是
    
        
    for(...){
        Integer i = cal(x,y);
        int k = i*j;
        ....
    }
    

    i 仅仅在 for 内使用

    7 条回复    2017-07-02 17:06:34 +08:00
    nybux
        1
    nybux  
       2017-06-21 12:14:42 +08:00
    要看你的 x,y 会不会随着循环发生变化。如果会变,那必须要放里面。
    如果不会的话,而且循环次数很多,那放外面可以提高性能。
    如果循环次数不多,cal 计算也很简单,那就看可读性了
    rrfeng
        2
    rrfeng  
       2017-06-21 12:21:28 +08:00
    这就体现出 for 的初始化语句的作用了啊。

    for (Interger i = cal(x, y); i<=10; i++) {
    ...
    }
    vvchen
        3
    vvchen  
       2017-06-21 15:06:04 +08:00
    你能这么问,代表每次迭代 i 的值都固定。既然 i 值固定,为何还要在循环里每次重复计算?很明显放在外面更好,计算一次就可以。
    esolve
        4
    esolve  
    OP
       2017-06-21 16:09:50 +08:00
    @nybux
    stackoverflow 上说定义 The scope of local variables should always be the smallest possible
    说编译器会优化
    不过对于赋值的话可能不成立?
    msg7086
        5
    msg7086  
       2017-06-22 05:54:20 +08:00
    @esolve Smallest possible,在这里应该就是 for 循环的初始化区了,可以把变量限制在 for 块中,而且不会重复计算。
    esolve
        6
    esolve  
    OP
       2017-07-02 04:58:48 +08:00
    @msg7086 还有那个 k
    实在 for 循环外定义一个 k 好
    还是在里面定义好?
    msg7086
        7
    msg7086  
       2017-07-02 17:06:33 +08:00
    如果固定,那也可以放在 for 的初始化区。要看你用的语言( Java ?)是否支持,支持就尽管放就好了。
    虽然我觉得吧,只是一个循环而已,编译器应该是足够聪明去优化的,放在循环外面也可以的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1239 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:36 · PVG 01:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.