2011年12月14日 星期三

迴圈控制敘述(Loop Control Statements)

迴圈控制敘述(Loop Control Statements)

我們知道迴圈可以幫助程式,「反覆進行」同一個區塊內的運算,

但有時候我們會希望,迴圈能「跳過」某次運算,或是「轉向」其他程式區塊。

這個「跳過」或「轉向」的操作,就是這篇迴圈控制要說明的部分了。

靈活的迴圈控制能節省程式執行時間,

但必須謹慎的使用,避免程式結構被破壞而導致維護上的困難。

之前提過的forforeachwhileuntil

我們在控制敘述的重複執行有說明,

在這裡我們就討論,怎麼在這幾個迴圈內做操作吧!


last

顧名思義就是讓迴圈停止。

用法是寫在迴圈內,我們來用例子說明:

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

if($i==8) # 當$i為8時

{

last; # 終止迴圈

}

print $i; # 把$i印出來

}

執行結果就會看到 只印到7就不執行了。

如果要偷懶點的寫法,可以寫成:

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

last if($i==8); # 當$i為8時終止

print $i; # 把$i印出來

}

執行結果會是相同的。


redo

可以讓迴圈重複執行一次,

用法同樣是寫在迴圈內,來看例子:

$count=0; # 迴圈外放一個計數器

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

$count++;

redo if($count==8); # 當$count為8時重作"一次"迴圈

print $count; # 把$count印出來

}

執行結果就會看到,8多加了一次,結果就是8沒有印出來。


next

既然可以讓迴圈停止、重作,

當然,一樣就有「略過」的控制敘述,

用法同樣是寫在迴圈內,來看例子:

for ($i=0;$i<10;$i++)

{ # $i會先從0開始 每跑完一次就會累加1

next if($i==8); # 當$i為8時略過

print $i; # 把$i印出來

}

執行結果就會看到,8沒有被印出來。


知道了迴圈的「終止」、「重作」、「略過」之後,

最後一個我們要看的,是用來做「轉向」的標籤(Label)

標籤的作用是讓Perl知道接下來要跳到哪裡去,

很多程式設計師很反對使用標籤,因為會對程式架構上,有一定程度的破壞。

不過阿逸自己則是認為,適時的使用反而會增加方便性。

有時候單單利用nextlast無法逃離迴圈到正確的地方時,

就會使用到標籤(Label)。標籤使用方式為:

1.定義標籤所在位置及名稱,要大寫,並且要有冒號(:)。

2.使用時,加上goto 以及標籤名稱。

直接來看怎麼用吧:

@array= qw/123 456 789 246 468 135 357/; # 依序放入陣列

$pattern= 456; # 用來比對的樣式

foreach (@array)

{

print $_; # 印出每次讀取的陣列內容

if ($pattern== $_) # 比對成功時

{

goto LABEL; # 轉向到標籤點

}

}

LABEL: # 記住 這裡是使用冒號(:) 表示標籤的定位點

執行結果就會看到,符合條件後,程式就跳到迴圈外的標籤。


接下來就要加入一些檔案處理的觀念了,

要進行的部分是Perl的檔案存取

沒有留言:

張貼留言