9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

なぜJavaのラムダ式の型を調べたのか(C#とJavaの違い)

Last updated at Posted at 2014-03-20

説明

なぜ私がJava8のラムダ式の型をわざわざ調べることになったのか説明する。

C#ではラムダ式の型としてFuncActionが用意されている。
一方Javaではさまざまな型が用意されており、それらの定義がまた様々なパッケージに分散している。このため必要な型を探すのが難しい。

例えば「intintを受け取りintを返すような関数」を引数に取る関数reduceを定義したくなったとする。
この時C#では、Func<int, int, int>を型として利用すればよいと容易に判断がつくが、JavaでIntBinaryOperatorを使えばよいと判断するのはJava8に慣れたプログラマでないと難しい。

そんな理由で、わざわざJava8のラムダ式の型を調べたり、それらの命名規則を探ってみたりしたのである。

おまけ

例示のため、JavaとC#でreduce関数を利用したプログラムを記述した。

Reducer.java
import java.util.function.IntBinaryOperator;

public class IntReducer {
    private static int reduce(int[] list, int initial, IntBinaryOperator func) {
        for (int num : list) {
            initial = func.applyAsInt(initial, num);
        }
        return initial;
    }

    public static void main(String[] args) {
        int[] values = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int sum = reduce(values, 0, (acc, num) -> acc + num);
        int prd = reduce(values, 1, (acc, num) -> acc * num);
        System.out.format("Sum = %d, Product = %d%n", sum, prd);
    }
}
Reducer.cs
using System;

public class IntReducer {
    private static int Reduce(int[] list, int initial, Func<int, int, int> func) {
        foreach (var num in list) {
            initial = func(initial, num);
        }
        return initial;
    }

    public static void Main() {
        var values = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        var sum = Reduce(values, 0, (acc, num) => acc + num);
        var prd = Reduce(values, 1, (acc, num) => acc * num);
        Console.WriteLine("Sum = {0}, Product = {1}", sum, prd);
    }
}

おまけのおまけ

ここで「バカめ、reduceはジェネリックを使い汎用的に作るのだ」などと言い出すと、Javaへのヘイトが止まらなくなるので避ける。
(このヘイトはJava5のジェネリックで型消去に決めたことに由来する)

9
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?