もっと 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 タグ:

もっと Lambda その5

Java

早いものでもう五月なんですね。

世間一般はゴールデンウィークなんでしょうが私はまだまだ働かなくてはいけません。

明日の夜勤(長時間)が終われば世間一般より短いけどゴールデンウィークが始まります。

だから何かイベントがあるのかって言われると何もないですね。

運転手 + 召使い + α で隙をみてゴロゴロするくらいかな。

さて、世間がゴールデンウィークに浮かれている今日この頃ですが今日のブログネタはいつもの Java8 の新機能です。

これは Twitter 上でつぶやかれていたネタです。

Twitter と言えばまだベーシック認証が使える頃に自分用のクライアントを作りかけていた時にアカウントをとってました。

ある日突然ベーシック認証が使えなくなりそれでクライアントの制作中止と Twitter 自体も使ってない状態だったのですが、何気に再開したら美味しい情報もあるので復活中です。

今回のネタはわずか 140 文字以内という制限の Twitter からいただきました。

1 から 10 まで表示させるだけのプログラムです。

これってありなんですかね?

実行結果は次のようになります。

1
2
3
4
5
6
7
8
9
10

All’s well that ends well. なんてねw

JavaDoc をサラッと・・・ 今回は優秀な翻訳支援ソフトを使わないのでご自分で翻訳するかお気に入りの翻訳ソフトをつかってね(ヲヒ

 

Streams

java.​util.​stream

public final class Streams extends Object

Utility methods for operating on and creating streams.

Unless otherwise stated, streams are created as sequential streams. A sequential stream can be transformed into a parallel stream by calling the parallel() method on the created stream.

日付:

1.8

 

intRange()

java.​util.​stream.​Streams

public static IntStream intRange(int start, int end)

Creates a sequential IntStream from start (inclusive) to end (exclusive) by an incremental or decremental step of 1.

パラメータ:

start – the (inclusive) initial value
end – the exclusive upper bound

戻り値:

A sequential IntStream for a range of int elements

 

Twitter でも Good な情報を入手できることが嬉しい!

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

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

悲しいことにその情報源は英語なので詳しい内容はわかりません。

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

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

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

 

Hatena タグ: