サイトロゴ

Enjoy Creating
Web & Mobile Apps

MENU BOX
WEB
MOBILE
OPEN

ホーム

 > 

 > 

Kotlinで繰り返しの処理を行う3つの方法

Kotlinで繰り返しの処理を行う3つの方法

この記事にはプロモーションが含まれています。

プログラミングの世界では、同じ処理を繰り返し行いたいという場合が少なくありません。

たとえば、ゲームでプレイヤーがアイテムを購入する際の処理をイメージしてみましょう。

アイテムを1つ購入する処理を行う関数として、getItem() という関数があったとします。

購入するアイテムの数が1つだけであれば、getItem() を一回実行するだけで良いですが、10個購入したい場合は、getItem() を10回も記述しなければならなくなってしまいます。

さらに、100個購入したい場合を考えると…?さすがに面倒ですよね。😅

そんなことにならないよう、Kotlinをはじめとしたプログラミング言語は、繰り返しの処理を簡単に記述できるように設計されています。

この記事ではKotlinにおける繰り返しの処理にスポットライトを当てていきますが、基本的な記述法や流れは、他のプログラミング言語でも同じか、全く同じでなくてもよく似ています。

なので今回の記事は、Kotlinの基本について学びたい人はもちろんですが、これから何らかのプログラミング言語を学んでみたいと考えている方にも参考にして頂けるかと思います。

一方で、ある程度Kotlinの基本を学び終えた方には内容的にやや物足りないかと思いますので、予めご了承ください!

この記事を読むことで分かること
  • ・Kotlinにおける繰り返し処理の基本
  • ・repeat()の使い方
  • ・forループ、whileループの使い方

– 目次 –

repeat()

Kotlinにおいて、同じ処理を繰り返し行う最もシンプルな方法は、おそらく repeat() を使う方法だと思います。

後に紹介する forループ と異なり、あらかじめ繰り返したい回数が決まっている場合に特に有用です。

repeat() にはパラメータが2つ指定されており、一つは繰り返したい回数(整数)、もう一つは繰り返したい処理(関数)です。

例えばログにメッセージを繰り返し3回表示させたい場合、次のようになります。

Kotlin

repeat(3, {
    println("Print Message 3 times")
})

/** 
 * Output
 * 
 * Print Message 3 times
 * Print Message 3 times
 * Print Message 3 times
 */

使い方はシンプルでとても簡単ですね。

repeat() の最後のパラメータが関数なので、ラムダ式を利用して次のように記述することもできます。

Kotlin

repeat(3) {
    println("Print Message 3 times")
}

扱いが難しいポイントは特にないですが、引数を利用してインデックス番号を利用する際は、配列のインデックスと同様に0(ゼロ)から始まるので少し注意が必要です。

Kotlin

repeat(3) { index ->
    println("Print Message Index: $index")
}

/** 
 * Output
 * 
 * Print Message Index: 0
 * Print Message Index: 1
 * Print Message Index: 2
 */

ちなみに、特定の文字を繰り返すための repeat() も存在しますが、こちらの repeat() のパラメータは繰り返す回数(Int)のみで、処理(関数)を繰り返し実行するものではありません。

名称は同じ repeat() なのですが、使い方も使い道も全く異なるので混同しないようにしておきましょう。

参考までに、特定の文字を繰り返す方の repeat() の使用例を下に掲載しておきます。

Kotlin

val line = "-".repeat(5)
println(line) // Output: -----
    POINT!
  1. ・repeat()を使うと、指定した回数分、特定の処理を繰り返し実行できる!
  2. ・第一引数は繰り返しの回数(整数)、第二引数は実行する処理(関数)!
  3. ・特定の文字を繰り返すための repeat() も存在するので、混同しないように注意!

forループ

Kotlinに限らず、多くのプログラミング言語では ’for’ というキーワードを用いて、ループ(繰り返しの処理)を行うことができるように設計されています。

記述のルールはプログラミング言語によって異なりますが、基本的に for = 繰り返しの処理 と覚えてしまって良いかと思います。

Kotlinでは、繰り返し行いたい回数を指定したい場合は下のようにRange(範囲)を指定します。

Kotlin

for(i in 1..3) {
    println("Print Message 3 times")
}

/** 
 * Output
 * 
 * Print Message 3 times
 * Print Message 3 times
 * Print Message 3 times
 */

プログラミングを学び始めたばかりの方は、「forループに出てくる “i” って何?なんで “i” なの?」と疑問に思うかもしれませんが、これはプログラミングの世界の慣例のようなものです。

何故 i なのかについては諸説あるようですが、筆者的には、“indexの頭文字の i が由来である” という説がしっくりくるので、それで覚えているというか自分を納得させています。笑

あくまで慣例なので、i と記入しなければならないわけではなく、変数の命名規則に従っていれば何でも良いです。

i を利用してインデックス番号を得ると、ここでは範囲を 1..3 としているので、1〜3までの整数値を得ることができます。

Kotlin

for(i in 1..3) {
    println("Print Message Index: $i")
}

/** 
 * Output
 * 
 * Print Message Index: 1
 * Print Message Index: 2
 * Print Message Index: 3
 */

また、forループの便利なところは、repeat() と違ってコレクション(一般的には配列)をループ回数として指定できるところです。

たとえば、names と定義されたリストの、リストアイテムの数だけ処理を繰り返し行いたければ、in を使って下のように記述することができます。

Kotlin

val names = listOf("Tom","Marie","Edy") 

for(name in names) {
    println("$name")
}

/** 
 * Output
 * 
 * Tom
 * Marie
 * Edy
 */

names に含まれるリストのデータ(ここでは文字列)に順番にアクセスして name に格納し、それが println() によって出力される …という流れになっています。

変数 name は i と同様に、name という名称でなければならないわけではなく、自分やチームが分かりやすいものであれば何でも良いです。

慣例的には、たとえば (item in items) といったように、(単数系 in 複数形) というふうに命名することが多いです。

下に示すように、repeat() を使っても同じことができますが、forループと比べると若干コードが読みづらくなるというか、直感的に捉えづらくなります。

Kotlin

repeat(names.size) {
    println(names[it])
}

/** 
 * Output
 * 
 * Tom
 * Marie
 * Edy
 */

ただ、どちらの方が絶対的に良い(正しい)・悪い(間違い)というものではないので、明確な目的があって意図されたコードであれば、どちらでも良いかと思います。

    POINT!
  1. ・forループの範囲を指定することで、任意の回数分、同じ処理を繰り返すことができる!
  2. ・インデックスは指定した範囲の整数になる(配列番号のように必ずしも0から始まるとは限らない)ので注意!
  3. ・コレクション(配列)をループ回数として指定することができるのが便利!!

whileループ

最後に紹介するのは、特定の条件を満たすまで処理を繰り返し行いたい場合に使える、whileループです。

たとえば、冒頭で紹介した『アイテムを一度に大量購入する処理』は、このwhileループを使って処理することができます。

whileループでは、( )(かっこ)で指定した条件がtrueである間、繰り返し処理が行われます。

ということは、100個のアイテム購入を処理する場合、所持アイテムの個数が100未満の状態を繰り返しの条件として指定すれば良いことになりますね。

アイテムの所持数を itemCount 、アイテムを一つ購入する処理を getItem() とすれば、下のように記述することができます。

※プレイヤーの所持金の処理は考えなくて良いものとし、アイテムの個数の初期値は0とします。

Kotlin

var itemCount = 0;

fun getItem() {
    itemCount++
}

while(itemCount < 100) {
    getItem()
}

println(itemCount) // Output: 100

というわけで、無事に getItem() を100回も記述せずに済ませることができました。

ちなみに、Kotlinではwhileループの書き方はもう一つあり、do-while という形があります。

通常のwhileループは条件判定が先に行われるのに対し、do-whileは処理が先に行われます。

なので、最初から while( ) の条件を満たさない場合でも、少なくとも1回は処理が行われることになります。

下のコードでは、既にアイテムを100個所持している状態にして、while() の条件が満たされないようにしていますが、do{ } の処理が1回実行され、アイテムの所持数が101個になっていることが確認できます。

Kotlin

var itemCount = 100;

fun getItem() {
    itemCount++
}

do {
    getItem()
}
while(itemCount < 100)

println(itemCount) // Output: 101

この仕様は、特定の条件を満たす or 満たさないに関係なく、少なくとも1回以上処理が実行されることを保証したい場合などに利用できます。


この記事で紹介したforループとwhileループは、他のプログラミングにも用意されていることが多く、使い方や記述法も似通っています。

なので、ループ処理に関してはKotlinならではの機能・特徴として捉えるよりも、プログラミングの基本形として捉えた方が、プログラミングの理解につながるかもしれません。

まずは身につけたいプログラミング言語をしっかり学んで習得することが大切ですが、ある程度身につけることができたら、他のプログラミング言語も学んでみるのもオススメです。

プログラミング言語間の共通点や違いを発見できて、より深くプログラミングを理解できますよ!😀

    POINT!
  1. ・whileループは、特定の条件を満たすまで繰り返し処理を行う!
  2. ・do-whileでは、条件を満たさなくても1回は処理が実行される!
  3. ・ある程度プログラミングに慣れてきたら、他のプログラミングの基本を学んでみるのも良い勉強になる!

« »

カテゴリーリンク

著者について- author profile -

ROYDOプロフィール写真
Michihiro

モバイルアプリ(iOS・Android)ディベロッパー&デザイナー

これまでに、可読性の高いカラーパターンを自動で生成するアプリや、『第3火曜日』といった形式で通知をスケジュールできるアプリなどを制作。

サブでWebデザイン・フロントエンドエンジニアとしても活動しています。

📝ツール・言語:JavaScript/React Native/Kotlin/Android Studio/Swift/SwiftUI

🎓資格:基本情報技術者/ウェブデザイン技能検定3級

Twitterアイコン Instagramアイコン