2012年 5月

はじめての Lambda

Java

Lambda のお試し版を使ってみた。

残念ながら NetBeans 7.2 開発版ではまだサポートされてないようです。

それでメモ帳でというのもちょっとあれなので・・・

昔、昔、お世話になった CPad for Java2 SDK というシンプルなエディタを使ってみた。

コンパイルと実行さえできればいいやってのりで。

と言いつつも NetBeans でコーディングして CPad for Java2 SDK にコピペですが( ̄。 ̄;)

まず日本語で Lambda について解説しているサイトを片っ端からググってみた。

あまりにも少なかった・・・

もう、あちこちにあって並行処理に使う方法などもあるかなって思っていたが

まだ開発途中ってことで仕様変更がされる可能性が高いからかな。

よってまだ Lambda の情報源は数少ないようです。

とりあえず新しいもの好きの私は基本中の基本 Hello World をくんでみた。

jp\yucchi\hello_lambda\Hello_Lambda.java

Hello Lambda

 

うっ! しまった(><)

HelloWorld になってる。スペースを入れ忘れてしまった。

とりあえず Lambda のありがたみが良く解らないはじめての Lambda でした。

Lambda の解説はよく解らないのと良く解らないのに触ってみたいという

好奇心のかたまりだけで始めたので他の親切なサイトで勉強してください。

ちなみに Lambda 式

HelloFunc hf = () -> {
            System.out.println(“HelloWorld”);
        };

上記の書き方以外にも

HelloFunc hf = () -> System.out.println(“HelloWorld”);

とか

HelloFunc hf = () –> (System.out.println(“HelloWorld”));

でも OK らしい情報があったのですが私の環境ではコンパイルエラーになりました。

情報があっても古くなっていて使えない場合もあるから難しいですね。

Hatena タグ:

       


Comparator 使って思ったこと

Java

Comparator を使ったプログラムをつくった。

そして、思った。

いつもながら・・・ だな。( ̄。 ̄;)

jp\yucchi\lambda_charenge_1\Bust.java

jp\yucchi\lambda_charenge_1\Lambda_charenge_1.java

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

run:
70: 貧乳
80: 普通乳
90: 巨乳
100: 爆乳
構築成功 (合計時間: 0 秒)

ここで、さらに思った。

Java 8 で採用される Lambda を使えば Comparator の部分がすっきりするんだろうか?

さらに思った。

ところで、Lambda って何?

よくよく考えたら Lambda の前にやろうとしていたクロージャとかいうものもさっぱり知らない。

そろそろ Lambda について調べ始めなければ JDK 8 がリリースされたとしても時代の波に乗れない。

ここで、さらに思った。

Lambda も無かったことにならないかなぁ・・・(後ろ向き・・・

で、このプログラムを Lambda を使ってすっきりさせることができるのか?

私には絶対無理(>_<)

いったい、何をどうすればいいのか解らない。

当然といえば当然だ。

Lambda を知らないからね。

ただ、本当にこのプログラムを Lambda を使えばすっきりしたコードに変更可能なのかが知りたい。

誰か教えてけろ。(いつもながら努力は嫌い (^_^;)

Hatena タグ:


static static Fantastic! vol.5

Java

今朝投稿した記事だけど誰も釣られてくれないからプログラムを少し変更してみた。

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

VAL の値を標準出力させてみました。

run:
main() atart VAL = 1
CALL hoge
VAL = 10000
10000* 2 = 20000
main() end VAL = 1
構築成功 (合計時間: 0 秒)

hoge クラスの calc() メソッドが呼ばれてます。

main() メソッドの中にある calc() メソッドの引数の値は1のようです。

そして、calc(VAL) メソッドでよばれるのが hoge クラスなのは何故?

その答えは単純です。

static import 文をよく見てください。

chage クラスは static 変数である VAL だけをインポートしています。

よって、chage クラスの calc(VAL) メソッドは呼ばれることは無いんです。

hoge クラスの calc(VAL) が呼ばれて hoge クラスの VAL の値で計算されてしまいます。

なかなか面白いことになってますね。

引数の値よりクラスの static 変数が優先されてしまう。

chage クラスの calc(VAL) メソッドを実行させたかったら

次のようにインポート文を変更したらいい。

っていうか・・・ hoge クラス使わなきゃいいじゃん(^_^;)

Hatena タグ:

static static Fantastic! vol.4

Java

今回も static static Fantastic! だぜ!

今回もなんだこの仕様は(゜o゜; というものが最後にあります。

間違ってるかもしれないけど興味のある方は実際に動かしてみてください。

では static メソッドのインポートについて見てみましょう。

次のコードは static メソッドをインポートして使おうとしています。

しかし、メソッド名が同じなのでコンパイルエラーになります。

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

なんか前回とよく似ていますね。

ってことは・・ ワイルドカードでのインポートをやめてきっちり指定したほうのメソッドが実行されるに違いない。

Static_sample_4.java を次のように変更してみた。

コンパイルされちゃんと実行されるようになります。

run:
100* 2 = 200
構築成功 (合計時間: 0 秒)

疑り深い私はワイルドカードのインポートを次のよう逆に入れ替えてみました。

これで実行結果が 300 となれば間違いない。

run:
100* 3 = 300
構築成功 (合計時間: 0 秒)

間違いなかった。めでたし、めでたし、とここまでだったら前回から想像される内容だ。

では次のコードではどうだろう?(同じじゃないかよ!)

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

コンパイルエラー!

calc() メソッドがどちらを使えばいいのか解らないからですよね。

先述のようにインポート文を変更すれば解決できるのですが今回はちょっと違ったみかたをします。

calc() メソッドの引数を変更してみます。

メソッドオーバーロードで解決できるか試してみます。

次のようにコードを変更します。

jp\yucchi\static_sample_4\chage.java

このように chage クラスの calc() めそっどの引数を long に変更してみました。

main() メソッドから呼ばれる calc() メソッドの引数は int なのでこれでいけるはず。

さて、どうでしょう?

run:
100* 2 = 200
構築成功 (合計時間: 1 秒)

コンパイルも実行も問題ないですね(^^)

疑り深い私は次のように calc() メソッドの呼び出しを long でやってみました。

コンパイル、実行がちゃんとできるでしょうか?

run:
100* 3 = 300
構築成功 (合計時間: 0 秒)

問題ないですね。ばっちりOKです。

では、最後に面白いコードを(^^)

ゆっくり画面をスクロールさせてどうなるか考えてみてください。

このプログラムの動作が理解できたらあなたは static import を良く理解できているでしょう。

 

jp\yucchi\static_sample_4\hoge.java

jp\yucchi\static_sample_4\chage.java

jp\yucchi\static_sample_4\Static_sample_4.java

run:
10000* 2 = 20000
構築成功 (合計時間: 0 秒)

コンパイルも実行もされます。

calc() メソッドの引数は int で同じなのにね(゜o゜;

でも、実行結果が・・・

chage クラスの VAL が優先されるから実行結果は 2 となると思っていた。

static import 奥が深いぜ!

誰か詳しく優しく説明しておくれ~

Hatena タグ:

 


static static Fantastic! vol.3

Java

今回も static static Fantastic だぜ!

前回、 static import の使い方を覚えた。

しかし、次のようなコードだとコンパイルエラーになる。

jp\yucchi\static_sample_3\Kyouko.java

jp\yucchi\static_sample_3\Meisa.java

jp\yucchi\static_sample_3\Static_sample_3.java

上記のように変更してもコンパイルエラーになると思っているあなた!なんと、コンパイルされてしかもちゃんと実行されます。(゜o゜;

run:
Kyouko のバストは 86センチです。
構築成功 (合計時間: 0 秒)

なんか不思議だ。

どうしてこんな仕様になったのか猿でも解る説明を誰かしておくれ。

Hatena タグ:

« 古い記事 新しい記事 »