プログラムを調べていると、「ラムダ式」や「メソッド参照」で記述されているコードに出会うことがよくありますよね。
特に初心者は「なんだか難しそう…」と感じてしまい、とっつきにくいと感じるかもしれません。
この記事では、そんなラムダ式とメソッド参照をわかりやすく解説します!
ラムダ式やメソッド参照をマスターして、今日からスマートに扱えるようになっちゃいましょう!
\\この記事で学べることはこちら//
・ラムダ式の概要と記述方法
・メソッド参照の概要と記述方法
・ラムダ式とメソッド参照を使いこなすためのポイント
初心者でも安心して理解できるよう解説しているので、ぜひ最後まで読んでみてくださいね!
ラムダ式の概要を理解する
「ラムダ式」は、Java8から追加された、匿名関数(名前を持たない関数)のこと。
「関数型インタフェース」と呼ばれるインタフェースや、「StreamAPI」と呼ばれるAPIと併用して利用することで、従来の記述方法よりも簡単にプログラムを書くことができます!
ラムダ式を利用するメリットとは?
匿名クラス等を利用した記述に比べてプログラムのソース量を減らすことができるんです!
特に主にコレクションやストリーム処理でラムダ式を活用することで、驚くほど処理を大幅に減らすことができちゃいます。
通常の記述:
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println("こんにちは、ラムダ式!");
}
};
r1.run();
ラムダ式での記述:
Runnable r2 = () -> System.out.println("こんにちは、ラムダ式!");
r2.run();
「ラムダ式」を使うと、こんなにコードが短くなるんです!
アロー演算子(->)の役割とは?
ラムダ式を記述する際に使用される構文要素で、「引数」と「メソッド本体」を区切る役割役割を果たします。
アロー演算子を使うことで、処理の流れが直感的に理解しやすくなり、プログラムの可読性が向上させることができます!
ほかのプログラミング言語(JavaScriptやC#)でもアロー演算子は使われてます。この機会にマスターしちゃいましょう!
ラムダ式の記述方法
コードを簡潔に記述できるのがラムダ式の最大の魅力!
簡潔な記述でスマートにコーディングできれば、効率的な開発ができること間違いなしです!
ラムダ式の構文
特徴的なのは、メソッドを呼び出すような形に似ていますが、引数の型を省略できる点です。
型情報はコンパイラが自動で推測してくれます。
(引数1, 引数2, ・・・) -> {return 処理内容;}
サンプル
2つの値を足し算する処理をラムダ式で記述。
BiFunction<Integer, Integer, Integer> add = (a, b) -> { return a + b; };
System.out.println(add.apply(5, 10)); // 出力: 15
※BiFunction:関数インターフェース
処理が1行の場合の記述例
「{}」、「return」、「;」を省略できます。
(引数1, 引数2, ・・・) -> return 処理内容
サンプル
2つの値を使用して掛け算する処理をラムダ式で記述。
BiFunction<Integer, Integer, Integer> multiply = (a, b) -> a * b;
System.out.println(multiply.apply(5, 10)); // 出力: 50
※BiFunction:関数インターフェース
引数が1つの場合の記述例
「()」を省略できます。
引数 -> 処理内容
サンプル
1つの文字列(name
)を受け取り、「こんにちは、(名前)さん!」と出力する処理ををラムダ式で記述。
Consumer<String> greeter = name -> System.out.println("こんにちは、" + name + "さん!");
greeter.accept("太郎"); // 出力: こんにちは、太郎さん!
※Consumer:関数インターフェース
今回のサンプルの場合、「メソッド参照」を使用することでもっと簡潔に書くことができちゃいます!
Consumer<String> greeter = System.out::println;
greeter.accept("こんにちは、太郎さん!"); // 出力: こんにちは、太郎さん!
メソッド参照を学ぼう
メソッド参照とは、既存のメソッドをラムダ式の代わりに利用するための構文です。
ラムダ式でメソッドをそのまま呼び出すだけの場合、このメソッド参照を利用することでさらに簡潔に記述することができます!
メソッド参照のメリットとは?
コードをさらに簡潔に
ラムダ式の記述を省略できて処理内容がわかりやすくなる
コードの可読性の向上
メソッド名を直接参照するので処理がどのメソッドを呼び出しているのかわかりやすい。
既存メソッドの再利用性を高める
汎用的なメソッドを簡単に利用できて重複したコードを減らすことができる
メソッド参照の使い方を徹底解説
メソッド参照を理解することで、コードの可読性を大幅に向上させることができます!
シンプルで分かりやすいコードを書けるようになれば、周囲をあっと言わせること間違いなしです!
メソッド参照の構文
呼び出したいメソッド名の直前に「::」を、さらにその前にはクラス名を記述して、メソッドの引数部分の「()」は省略する型になります。
クラス名 :: メソッド名 // クラスメソッドを参照
オブジェクト名::メソッド名 // インスタンスメソッドを参照
種類 | メソッド参照 | ラムダ式例 | 従来記述例 |
---|---|---|---|
クラスメソッド | String::valueOf | (x) -> String.valueOf(x) | String.valueOf(引数) |
インスタンスメソッド | System.out::println | (x) -> System.out.println(x) | System.out.println(引数) |
メソッド参照の適用条件
static
なメソッドであること
静的なメソッドであれば、メソッド参照が可能。
引数が1つまたは不要な場合であること
メソッド参照は引数の数が少ないときに使いやすい。
インスタンスメソッドであること
オブジェクト名を明示して、インスタンスメソッドを参照できる。
メソッド参照を使用できない例
static
ではないメソッドをクラス名で参照する場合
インスタンスメソッドをクラス名から直接参照することはできない。
引数が複数ある場合
メソッド参照の形では対応不可。ラムダ式や従来の記述方法を使用する必要がある。
ラムダ式とメソッド参照を使いこなす
実装方法を見ても、いつ使えばよいのわからないですよね。
ラムダ式とメソッド参照の使い分けや記述方法の選択、ラムダ式をこんな時に使ってみよう!というのをまとめて見ました!
ぜひ参考にしてみてくださいね!
ラムダ式とメソッド参照を使い分ける見分け方
ラムダ式とメソッド参照を選ぶ際の簡単な指針をまとめました!
処理に着目
処理の内容が複数行 | 「{}」、「return」、「;」の記述が必要 |
処理の内容が1行 | 「{}」、「return」、「;」を省略 |
引数に着目
引数が複数 | 「()」の記述が必要 |
引数が1つ | 「()」を省略 |
引数が1つ かつ 既存メソッドを利用する | メソッド参照を使用 |
ラムダ式とメソッド参照を使用するタイミング
こんな時にラムダ式を使ってみる
カスタム処理を記述するfilter
やmap
を使用してコレクションを操作するときにラムダ式を使用する
テストコードを書く
テストコードでは、同じような処理が繰り返ので、ラムダ式で簡潔に可変の処理を渡す
こんな時にメソッド参照を使ってみる
コレクションで既存メソッド使用するfilter
やmap
を使用してコレクションを既存メソッドを使用して操作するときにメソッド参照を使用する
初心者がラムダ式とメソッド参照を使い始めるタイミング
そうはいっても、初心者にはいきなりラムダ式やメソッド参照を使って処理を記述するのは少しハードルが高いですよね。
そこで、次のようなタイミングで使い始めるのがおすすめです!
ストリーム処理をする場合
ストリームを使うときには、ラムダ式で処理を記述するのが一般的なので、一番挑戦しやすいのではないでしょうか?
「ストリームを使うぞ!」となったら、「こういう処理を行いたいからラムダ式を使うとどうなるんだろう」と考えると、とても挑戦しやすいです。
例えば、リストの中から特定の条件に合う要素を取り出したり、データを変換したりする場合に試してみるなど、シンプルな処理から始めることで、だんだんと慣れていけます!
テストコードを書く場合
テストコードでは、似たような処理を何度も繰り返すことが多いので、ラムダ式を使うとコードをスッキリと簡素化できます。
1からテストコードを組み立てる際には、まずは通常通りの処理を記述してみてください。
そのあとで、「これをラムダ式で書くとどうなるだろう?」と試していくと良いです。
そうすることで、処理結果を担保しつつ、ラムダ式やメソッド参照を練習できます。
少しずつ挑戦していくことで、「ここでラムダ式が使えるな!」と自然にわかるようになります。
品質を維持しつつ、挑戦していくことが大事ですね!
ラムダ式とメソッド参照を使う際の注意点
ラムダ式とメソッド参照は便利なのですが、以下の点で注意が必要です。
処理が複雑になる場合
ラムダ式で複雑なロジックを書くと可読性が低下する。処理が長くなる場合は、メソッドを分けて記述するほうが良い。
メソッド参照の制限
引数の数や型が一致しない場合は、メソッド参照を使用できないため、ラムダ式で記述する。
まとめ
今回はラムダ式とメソッド参照について解説しました。
使いこなせるようになると、コードの簡潔さと可読性が飛躍的に向上します。特に、メソッド参照を適切に活用することで、「スマートなコーディング」を実現できます!
ご紹介した通り、最初は少しとっつきにくいかもしれないですが、習得すれば「この人、できるな…!」と思わせることもできちゃいます。ぜひマスターしてみてくださいね!
コメント