顯示具有 迴圈控制敘述(Loop Control Statements) 標籤的文章。 顯示所有文章
顯示具有 迴圈控制敘述(Loop Control Statements) 標籤的文章。 顯示所有文章

2011年12月14日 星期三

迴圈控制敘述(Loop Control Statements)

迴圈控制敘述(Loop Control Statements)

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

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

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

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

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

之前提過的for、foreach、while、until,

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

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


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知道接下來要跳到哪裡去,

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

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

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

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

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

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

直接來看怎麼用吧:

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

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

foreach (@array)

{

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

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

{

goto LABEL; # 轉向到標籤點

}

}

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

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


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

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