もっと Lambda その6

Java

今日はとても感動した記事があったので紹介します。

なんと日本語です!

Java 8を関数型っぽく使うためのおまじない

ちょっとおまじないの部分は私にとっては呪いの呪文のようにもとれました。(>_<。)

この記事の中でカリー化という技法が紹介されてました。

私はこの技法は初めてなので少し調べてみました。

Wikipedia では次のように解説されてました。

カリー化 (currying) とは、計算機科学分野の技法の一つ。複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること。

この技法は、クリストファー・ストレイチーにより論理学者ハスケル・カリーに因んで名付けられたが、実際に考案したのは Moses Schönfinkel とゴットロープ・フレーゲである。

f( a, b ) = c という関数 f があるときに、F( a ) = g ただし、g( b ) = c という関数 g が得られる関数 F を定義した場合、F は、f をカリー化したものである。

といことで自分でも試してみたくなりました。

決して疑ってる訳ではありません。新しい未知なるものへのあくなき好奇心からです。

ついでに、甘えと言っていた部分も自分なりに考えてみました。

いつものように未熟なコードですが以下のようにプログラムを組んでみました。

実行結果は期待通りに次のようになりました。

ジャワカレー
ジャワカレー
ジャワカレー甘口
ジャワカレー辛口

java.util.function.BiFunction を使ってみました。

引数が多くなったときの正しい処理が解らないので適当にしたら期待通りの結果となってしまいました。

間違っている、もしくは正しい方法があるのならご教示いただければ幸いです。

そう言えば、昔 JavaHouse 高木浩光さんのホームページに Java は ジャワカレーとは関係ないという注意書きがあったような気がします。

とてもまじめそうで冗談一つ言わなそうな雰囲気を醸し出していたのでそれがジョークなのか本気なにか聞きたかった覚えがあります。

どうでもいいことだけど

思いっきり思い出した(×_×)

JavaDoc をサラッといっときましょうか。

 

Function

java.​util.​function

@FunctionalInterface
public interface Function<T,R>

Apply a function to the input argument, yielding an appropriate result. A function may variously provide a mapping between types, object instances or keys and values or any other form of transformation upon the input.

パラメータ:

T – the type of the input to the apply operation
R – the type of the result of the apply operation

日付:

1.8

 

apply()

java.​util.​function.​Function

public R apply(T t)

Compute the result of applying the function to the input argument

パラメータ:

t – the input object

戻り値:

the function result

 

BiFunction

java.​util.​function

@FunctionalInterface
public interface BiFunction<T,U,R>

Apply a function to the input arguments, yielding an appropriate result. This is the two-arity specialization of Function. A function may variously provide a mapping between types, object instances or keys and values or any other form of transformation upon the input.

パラメータ:

T – the type of the first argument to the apply operation
U – the type of the second argument to the apply operation
R – the type of results returned by the apply operation

日付:

1.8

 

それでは、お約束の時間です。

この「もっと Lambda 」シリーズは、インターネット上で得た情報を元にそれを少し変更しているだけです。

よって私の推測で解釈された内容が部分的にありますので間違いがあると思います。

Java8 もまだ build86 を使用していますので API の変更により記述方法が変わるかもしれません。

早く正式リリースされて日本語でこの超便利で素敵な新機能を勉強したい今日この頃です。

 

Hatena タグ:

« »

Leave a Reply

* が付いている項目は、必須項目です!

次の HTML タグと属性を利用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*

Trackback URL