关于使用for循环

有人喜欢使用for作类似while的循环:

ExpandedBlockStart.gif ContractedBlock.gif for (;;)  dot.gif { }

评论:这是一种风格,有一部分人使用,我个人觉得不如while来得直观。

究竟是++i,还是i++

ExpandedBlockStart.gif ContractedBlock.gif for  ( int  i  =   0 ; i  <  arrayA.Length;  ++ i)  dot.gif { }
None.gif
ExpandedBlockStart.gifContractedBlock.gif
for  ( int  i  =   0 ; i  <  arrayA.Length; i ++ dot.gif { }

以前我使用i++的写法,后来,看到一些优秀的代码中,大多使用++i,我就改用++i了。为什么使用++i,看到过一些理由,但觉得那些理由,不值一提。

使用i, j, k作多层循环

None.gif for  ( int  i  =   0 ; i  <  arrayA.Length;  ++ i) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  Object[] arrayB 
= arrayA[i];
InBlock.gif    
for (int j = 0; j < arrayB.Length; ++j)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Object b 
= arrayB[j]; //此处需要多加注意,一不留神就会写成Object b = arrayB[i];
ExpandedSubBlockEnd.gif
    }
 
ExpandedBlockEnd.gif}

使用i, j, k做多层循环时,很容易犯错误,如上述代码中的注释缩写的那样。我参加的代码评审(Code Review)中,或者开发过程中,经常有同事遇到这种BUG。我也曾经吃过亏,每次编写i, j, k多层for循环时,就会提醒自己,小心,别犯错误!

使用for的习惯,除了++i和i++的写法不同外,还有和if、while等语句一样的不同写法,如下:

第一种写法
a、关键字for后面有空格
b、二元表达式左右有空格
c、每个大括号,单独占一行
d、else关键字单独占一行

None.gif for  ( int  i  =   0 ; i  <  list.Count;  ++ i)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
ExpandedBlockEnd.gif}


第二种写法:
a、关键字if后面有空格
b、二元表达式左右有空格
c、大括号放在上一句的右边

ExpandedBlockStart.gif ContractedBlock.gif for  ( int  i  =   0 ; i  <  list.Count;  ++ i)  dot.gif {
ExpandedBlockEnd.gif}


需要优化是,可能你也会采用这种写法:

None.gif int  listCount  =  list.Count;
ExpandedBlockStart.gifContractedBlock.gif
for  ( int  i  =   0 ; i  <  listCount;  ++ i)  dot.gif { }

如果for循环中,不会添加或者删除list的元素,使用这种方式优化,可能得到一丁点(可能不值一提)的性能提升。

需要从list中删除元素时,可能你会使用反序的遍历。如下:

None.gif int  listCount  =  list.Count;
None.gif
for  ( int  i  =  listCount  -   1 ; i  >=   0 -- i) 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if (condition) 
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        list.RemoveAt(i);
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

如果list的实现是ArrayList,反序遍历可能比正序删除的性能更高一些。

此外,for还有一些其他的使用方式,如:

ExpandedBlockStart.gif ContractedBlock.gif for  (init(); condition(); incement())  dot.gif { }
ExpandedBlockStart.gifContractedBlock.gif
for  (; i  <  j;  ++ i,  -- j)  dot.gif { } ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值