while制御構文

【連載】

PowerShell Core入門 - 基本コマンドの使い方

【第31回】while制御構文

[2018/12/14 07:00]後藤大地 ブックマーク ブックマーク

  • サーバ/ストレージ

サーバ/ストレージ

while制御構文

プログラミング言語としてPowerShell Coreを使う場合に欠かせない機能が繰り返し構文だ。繰り返し構文はプログラミング的な処理の基本の一つと言える。

今回はPowerShell Coreの中でももっともシンプルなwhile制御構文を取り上げる。while制御構文は条件に一致する限りブロックの中の処理を繰り返すというもので、基本的に次のような書き方をする。

while制御構文

while (条件) {
    処理
}

PowerShellではfor制御構文やforeach制御構文といった繰り返し制御構文が用意されている。whileはそうした制御構文の中でもっともシンプルで、もっとも応用の幅の広い機能となっている。シンプルな例を通じてwhile制御構文の書き方を追ってみよう。

while制御構文の使い方

「while (条件)」で指定する条件はif制御構文のときと同じような条件だ。if制御構文のときに紹介した条件は次のとおり。

演算子 内容
-eq 等価
-ne 等価ではない
-gt よりも大きい 
-ge よりも大きいまたは等しい
-lt よりは少ない
-le よりは少ないまたは等しい
-like ワイルドカードパターンに一致する
-notlike ワイルドカードパターンに一致しない
-match 正規表現パターンに一致する
-notmatch 正規表現パターンに一致しない
-contains 参照値がコレクションに含まれている
-notcontains 参照値がコレクションに含まれていない
-in テスト値がコレクションに含まれている
-notin テスト値がコレクションに含まれていない
-is 同じオブジェクト型である
-isnot 同じオブジェクト型ではない

メジャーなプログラミング言語の条件に慣れていると、この書き方は違和感を抱くと思う。==ではなく-eqだし、>ではなく-gtだ。しかし、/bin/shなどのシェルスクリプトではtestコマンドまたは[コマンドで条件を指定し、そこでは-eqや-gtといった指定をする。コマンドに与えるオプションといった位置づけで比較していると考えるとわかりやすいかもしれない。このあたりは慣れなので、使っていけば気にならなくなると思う。

この比較演算子を使って実際にwhile制御構文を動かしてみよう。次の処理では、変数iの値が10よりも小さいという条件を満たす限り、変数iの値に1を加算するといった内容になっている。もっともシンプルなwhile制御構文の使い方だ。いずれは条件を満たさなくなり、繰り返し処理は終了となる。

while制御構文の実行例

PS /Users/daichi> $i=0
PS /Users/daichi> while ($i -lt 10) 
>> {
>>     Write-Host $i
>>     $i++
>> }
0
1
2
3
4
5
6
7
8
9
PS /Users/daichi>

次の例はwhile制御構文の中でbreakを使っている。switch制御構文のときにbreakを取り上げたが、ここでも同じような動きをする。while制御構文の中でbreakを実行すると、そこで繰り返しは終了となり、while制御構文を抜けるようになる。特定の条件に一致したら繰り返しを抜けたいといった場合に利用する。

breakを使ったwhile制御構文の実行例

PS /Users/daichi> $i=0             
PS /Users/daichi> while ($i -lt 10)
>> {                
>>     Write-Host $i  
>>     if ($i -eq 5) {
>>         break;
>>     }   
>>     $i++
>> }
0
1
2
3
4
5
PS /Users/daichi>

次の例はwhile制御構文の条件に1を指定することで無限ループを構築し、内部でif制御構文を使って条件判定を行ってcontinueまたはbreakに処理を切り分けている。continueはループの先頭に戻るという処理で、breakはループから抜けるという処理だ。

continueでループの先頭に戻っているため、$i+=100という処理に到達していないことがわかるだろうか。continueとbreakは繰り返し処理におけるジャンプ的な機能として使われることが多い。うまく利用するとソースコードをスッキリと書くことができる。

break、continue、無限ループを使ったwhile制御構文の実行例

PS /Users/daichi> $i=0
PS /Users/daichi> while (1)
>> {
>>     Write-Host $i
>>     if ($i -lt 10) {
>>         $i++
>>         continue 
>>     }
>>     else {
>>         break
>>     }
>> 
>>     $i+=100
>> }
0
1
2
3
4
5
6
7
8
9
10
PS /Users/daichi>

while制御構文の基本的な機能はこんなところだ。特にbreakの使い方は覚えておきたい。必要な条件に到達したらbreakを実行してループを抜けるというのは繰り返し構文でよく利用する処理だし、使われているシーンも多い。この処理をbreakを使わないで実現しようとするとif制御構文が入り組んできたり、whileの条件が入り組んだりと読みにくくなってしまう。

breakを使うことでスッキリとした繰り返し処理を記述できる。

参考資料

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

もっと知りたい!こちらもオススメ

【連載】RPA入門 - ツールで学ぶ活用シーン

【連載】RPA入門 - ツールで学ぶ活用シーン

AIには、ルールベース、機械学習、深層学習(ディープラーニング)の3つのレベルがあり、レベルが上がるに連れてより高度な人工知能を実現しますが、AIのスピンオフという位置付けで、Digital Labor(仮想知的労働者)によるホワイトカラー業務の自動化を実現するRPAが注目されています。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
Kubernetes入門
RPA入門
ソフトウェア開発自動化入門
PowerShell Core入門
Swagger 3.0 入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る