LoginSignup
4
3

More than 5 years have passed since last update.

オブジェクト指向の人たちに向けた関数型プログラミングへの足がかり

Posted at

本記事の立ち位置

 この記事は「関数型プログラミング?ナニソレ?美味しいの?」と言うオブジェクト指向な人たちに

 「食べてみなよ!美味しいから!ほら、一口。」と食べさせて
 「あ、美味しいねコレ。店員さーんコレお願いしまーす。」と言わせたい。
 そんな立ち位置の記事です。

本題

例として、Javaを使っていきます。

public static int plus10 (int val) {
    return val + 10;
}

public static int minus5 (int val) {
    return val - 5;
}
int input = 100;
int output = plus10(input);
output = minus5(output);
// output = 105

 コードの善し悪しはさておき、いつものJavaって感じですし
100 + (10 - 5) = 100 + 5 = 105 です。簡単ですね。

しかし、

このコードoutput が3つもあってキモい

 そのように思ったあなた、どのようにリファクタリングしますか?

 マジックナンバーを止めろとか言う話は脇に置いておくと、メソッドの引数にメソッドを渡すような形になりませんか?

int output = minus5(plus10(100));

「せめて、もうちょっと良いメソッド名にしてよ!」もっともな意見ですね。

public static int plus5(int v) {
    return minus5(plus10(v));
}

// int output = plus5(100);

実はこれだけ

 と言い切ってもいいでしょう。

さらっと補足すると

今までやったことは、
圏論で言うところの「射の合成」と呼ばれるモノで、
高校数学、高校物理では「ベクトルの合成」とか「力の合成」と呼ばれるようなモノです。

4
3
0

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
4
3