カテゴリ: Kotlin 更新日: 2026/02/04

Kotlinのfold・reduceを使った累積計算テクニック

Kotlinのfold・reduceを使った累積計算テクニック
Kotlinのfold・reduceを使った累積計算テクニック

先生と生徒の会話形式で理解しよう

生徒

「Kotlinで合計や文字の連結みたいな累積計算をする方法ってありますか?」

先生

「はい、Kotlinではfoldreduceという関数を使えば、コレクションの要素を順番に処理して累積的な結果を作ることができますよ。」

生徒

「どっちも似てそうですが、違いはあるんですか?」

先生

「あります。foldは初期値を自分で決められる、reduceは最初の要素を初期値として使うという違いです。では詳しく見ていきましょう。」

1. foldの基本:初期値を決めて計算をスタートする

1. foldの基本:初期値を決めて計算をスタートする
1. foldの基本:初期値を決めて計算をスタートする

fold(フォールド)は、日本語で「折りたたむ」や「たたみ込み」という意味です。バラバラにあるリストの要素を、一つの結果にギュッとまとめ上げるイメージですね。

最大の特徴は、計算を始めるための「初期値」を自由に設定できることです。たとえば、0から計算を始めるのか、100から始めるのかを自分で選べます。

まずは、プログラミング未経験の方でもイメージしやすいように、4つの数字が入った箱(リスト)を全部足す例を見てみましょう。


fun main() {
    // 1. 計算したい数字のリストを用意
    val numbers = listOf(1, 2, 3, 4)

    // 2. foldを使って合計を出す(初期値は0)
    val sum = numbers.fold(0) { acc, num ->
        println("現在の合計(acc): $acc, 次に足す数字(num): $num")
        acc + num
    }

    println("最終的な答え: $sum")
}

現在の合計(acc): 0, 次に足す数字(num): 1
現在の合計(acc): 1, 次に足す数字(num): 2
現在の合計(acc): 3, 次に足す数字(num): 3
現在の合計(acc): 6, 次に足す数字(num): 4
最終的な答え: 10

このプログラムで登場する2つのキーワードを覚えておくと、一気に理解が深まります。

  • acc(アキュムレータ):これまでの計算結果を貯めておく「合計ボックス」のようなものです。最初は指定した初期値(今回は0)から始まります。
  • num(要素):リストから順番に取り出される「今の数字」です。

foldの便利なポイントは、もしリストが空(中身が何もない状態)であっても、エラーにならずに最初に決めた初期値をそのまま返してくれることです。そのため、システム開発の現場では、予期せぬエラーを防げる「安全な計算方法」として非常によく使われています。

2. reduceの基本

2. reduceの基本
2. reduceの基本

reducefoldに似ていますが、初期値を与えずに最初の要素を初期値として使います。


fun main() {
    val numbers = listOf(1, 2, 3, 4)
    val sum = numbers.reduce { acc, num -> acc + num }
    println(sum)
}

10

ただし、空のリストで実行するとエラーになるため、必ず要素が1つ以上あることを確認してから使う必要があります。

3. foldとreduceの違い

3. foldとreduceの違い
3. foldとreduceの違い
  • fold → 初期値を自由に設定でき、空リストでも安全
  • reduce → 初期値なしで最初の要素を利用、空リストはエラー

安全性を重視するならfold、コードを短く書きたい場合はreduceを選びましょう。

Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

4. 文字列の連結にも使える

4. 文字列の連結にも使える
4. 文字列の連結にも使える

数値だけでなく文字列を累積して結合することもできます。


fun main() {
    val words = listOf("Kotlin", "is", "fun")
    val sentence = words.fold("") { acc, word -> "$acc $word" }.trim()
    println(sentence)
}

Kotlin is fun

このように、累積計算は数値計算だけでなく文字列操作にも応用できます。

5. 条件付き計算の例

5. 条件付き計算の例
5. 条件付き計算の例

例えば、偶数だけを足し合わせたい場合はfilterと組み合わせます。


fun main() {
    val numbers = listOf(1, 2, 3, 4, 5, 6)
    val evenSum = numbers.filter { it % 2 == 0 }.reduce { acc, num -> acc + num }
    println(evenSum)
}

12

このように、事前に条件で絞り込みをしてから累積処理を行うことで、柔軟な集計が可能です。

6. 実用例:買い物かごの合計金額

6. 実用例:買い物かごの合計金額
6. 実用例:買い物かごの合計金額

買い物かごの中の商品合計金額を計算する例です。


data class Item(val name: String, val price: Int)

fun main() {
    val cart = listOf(
        Item("りんご", 120),
        Item("バナナ", 80),
        Item("牛乳", 150)
    )
    val total = cart.fold(0) { acc, item -> acc + item.price }
    println(total)
}

350

このように、foldreduceを使うと複雑な計算処理を簡潔に書くことができます。

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New2
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
New3
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
New4
Swift
Swiftでエラー原因を可視化!ログとトレースのベストプラクティスを初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのChannelでデータをやり取りする方法を完全ガイド!初心者にもわかる非同期通信の基本
No.2
Java&Spring記事人気No2
Go言語
Go言語でのDB接続情報を環境変数で管理する方法|初心者でも安全に設定
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Kotlin
Kotlinでテキスト表示・編集!初心者でもわかるTextViewとEditTextの使い方
No.7
Java&Spring記事人気No7
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.8
Java&Spring記事人気No8
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク