Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. Swift入門編 - while文とrepeat-while文について

while文とrepeat-while文について

みなさまどうも。

さて、続きまして『while文』と『repeat-while文』についてやっていきましょう。最初に『while文』から解説していきます。

『while文』は『for-in文』と同じような感じでループ処理を行える構文です。ループ処理を行うならば『for-in文』の方が遥かに使用頻度が高いですが「ループ回数が未定」のときは『while文』が使用されることが多い、といった感じになりますね。

ではまずサンプルを軽く見てみましょう。

var n = 0

while n < 3 { // 変数『n』が『3』未満の場合にループ処理を行います。
    print(n)
    n = n + 1
}

実行結果はこんな感じです。

0
1
2

変数『n』が『2』になるまでの間、ループ処理が行われていますね。これが『while文』になります。

というわけで文法を確認していきましょう。といっても基本的な文法はめっちゃ簡単です。『while』と記述してその隣に『条件式』を記述して、ループする際の処理を『{}』の中に記述するだけでOKです。

日本語で書くとこんな感じになりますね。

while 条件式 {
    // ここに処理...
}

『条件式』の演算結果が『true』の間はずっと処理を繰り返してくれる感じになります。

尚、『条件式』には演算結果が真偽値(『true』または『false』)になるようなものしか記述できません。他の言語ではOKだったりすることが多いのですがSwiftではNGですので気をつけてください。

while 1 { // 『条件式』に『1』を記述しているのでエラーです。

}

文法についてはこんな感じですね。かなりシンプルだったと思います。

さて、ここで超重要な注意点があります。

お察しの良い方は気がついたかと思いますが、『while文』には『条件式』の更新処理が構文そのものに組み込まれていません。

なので『while文』はシンプルな記述でさくっとループ処理を構築することができるのですが、その半面「無限ループ処理」も簡単に組めてしまうという側面があります。

というわけでサンプルをご紹介します。以下が『while文』で組んだ「無限ループ処理」になります。

// これは絶対に実行しないで下さい。
while true {
    // ここに処理...
}

『while文』の『条件式』に『true』と記述してるだけですね。たったこれだけで「無限ループ処理」が構築できてしまうので『条件式』の演算内容にはめっちゃ注意するようにして下さい。

『while文』を記述するときは必ず『条件式』の更新処理を入れる事と丸暗記しちゃうのも良しです。最初のサンプルだと『n = n + 1』って部分が更新処理に該当しますね。ここ忘れないようにして下さい。

(´-`).。oO(まあ最近のソフトウェアやデバイスはかなり良く出来ていますので...)

(´-`).。oO(『while文』の無限ループ如きで重大な問題に発展するという事態はないかと思いますが...)

(´-`).。oO(コンピューターに負担がかかってしまうことは事実ですのでお気をつけ下さいませ...)

さて、続きまして『repeat-while文』ってやつをやっていきましょう。ちょいと以下のサンプルを見てみて下さい。

while false {
    print("実行されました!")
}

上記の『while文』の『条件式』に『false』と直接記述されていますね。ということは『条件式』が常に『false』になるので上記の『while文』の中の処理は一度も実行されることはありません。

しかし「必ず一回だけは処理を行なわせるようにしたい」というセンチメンタルな気分になることもあるでしょう。

そんなときは『repeat-while文』を使用してみて下さい。記述は以下のような感じになります。

repeat {
    print("実行されました!")
} while false

これを実行してみるとこうなります。

実行されました!

このように「必ず一回だけは実行してくれる『while文』」が『repeat-while文』になります。

文法はまず『repeat』と書き、その隣に『{}』を記述しその中にループ時に実行したい処理を書きます。そしたら『while』と記述し、半角スペースとかをおいて『条件式』を記述すればOKです。

日本語にするとこんな感じになりますね。

repeat {
    // ここに処理...
} while 条件式

『while文』と比べてみると『条件式』を書く部分がうしろになっていますね。

他は特に変わっていないので特に問題はないかと思います。

あとちょっと全体的な注意点になりますが、何かのループ処理を構築するとなったときに『while文』と『for-in文』、どちらを使っても同じように処理を組める場合は『for-in文』を使用した方が無難です。

というのも『while文』は無限ループ処理を簡単に組めてしまうため、ちょっとした記述ミスで事故を起こしてしまうという危険性がちょっと高かったりするのです。これは他の言語でも言えることなので何となくでも覚えておいた方が良いかもしれません。

Swiftの『repeat-while文』は他の言語の『do-while文』と呼ばれる構文とほぼ同じです。

ちょっとややこしいのですが、ちょっと前のSwiftでは『repeat-while文』ではなく『do-while文』になってました。

// ちょっと前のSwiftではこう書いてました。
do {
    print("実行されました!")
} while false

最新のSwiftでは『do』が『repeat』に変わってしまったので要注意です。

まあ『do』が『repeat』って文言に変わっただけで他の変更点はないのですが間違えやすいところなんで気をつけて下さい。

というわけで『while文』と『repeat-while文』については以上になります。続いての記事では『break文』と『contine文』についてやっていきましょう。

ではこの辺で失礼いたします。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。