#9 Scalaで学ぶ関数の基本

Scalaの関数は、関数型プログラミングを重視する言語らしく、非常に柔軟な書き方ができます。この記事では、Scalaにおける関数の基本と、関数を値として扱う考え方を解説します。

関数を作ってみる

Scalaではdefというキーワードを使います。

def greet(name: String): Unit = {
    println(s"こんにちは、$name さん")
}

戻り値がない場合はUnitという型を書きます。

値を返す関数

def add(a: Int, b: Int): Int = a + b

val result = add(3, 5)
println(result) // 8

波かっこを省略し、=の後ろに処理を直接書ける簡潔な書き方が特徴です。returnを書く必要もありません。

デフォルト引数

def greet(name: String, honorific: String = "さん"): Unit = {
    println(s"こんにちは、$name$honorific")
}

greet("太郎")        // こんにちは、太郎さん
greet("太郎", "様")  // こんにちは、太郎様

関数を値として扱う

Scalaでは、関数そのものを変数に入れたり、他の関数に渡したりできます。

val addFunction: (Int, Int) => Int = (a, b) => a + b
println(addFunction(3, 5)) // 8

def applyTwice(f: Int => Int, x: Int): Int = f(f(x))
println(applyTwice(n => n * 2, 3)) // 12

これは関数型プログラミングと呼ばれる考え方の中心的な機能で、Scalaを学ぶ上で重要なポイントになります。applyTwiceのように、関数を引数として受け取る関数は「高階関数」と呼ばれます。

可変長引数

いくつ引数が渡されるか決まっていない場合は、型の後ろに*を付けます。

def sum(numbers: Int*): Int = numbers.sum

println(sum(1, 2, 3, 4)) // 10

Scalaならではの注意点

「関数を値として扱う」という考え方は、他の言語の経験だけでは直感的に理解しづらい部分です。最初はdefを使った通常の関数定義に慣れ、余裕が出てきたら関数を値として扱う書き方にも挑戦してみましょう。以前の記事で触れたmapやfilterも、実は「関数を引数として受け取る関数」の一種であり、この考え方を理解すると、Scalaの標準ライブラリ全体への理解が深まります。

まとめ

Scalaの関数はdefで定義し、Unit型や簡潔な書き方、デフォルト引数が特徴です。関数を値として扱えることも、Scalaらしい重要な考え方として覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Scalaをもっと学びたい方には「実践Scala入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本