Discussion:
[情報] Java 即將加入 Closure
(时间太久无法回复)
Test
2006-08-23 18:37:38 UTC
Permalink
http://blogs.sun.com/roller/resources/ahe/closures.pdf

暫時先不評論, 不過這個算是其他很多語言都有的就是了...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.34.34
godfat 真常
2006-08-23 23:03:23 UTC
Permalink
※ 引述《Schelfaniel (Test)》之銘言:
: http://blogs.sun.com/roller/resources/ahe/closures.pdf
: 暫時先不評論, 不過這個算是其他很多語言都有的就是了...

終於不需要愚蠢的 interface 了嗎?真是可喜可賀…
不過總有種,Java 越來越不 Java 的感覺 -_-b

節錄:

public interface Runnable {
void run();
}
public interface API {
void doRun(Runnable runnable);
}
public class Client {
void doit(API api) {
api.doRun(new Runnable(){
public void run() {
snippetOfCode();
}
});
}
}

我一直覺得這種做法真的是非常地愚蠢,
如果我沒記錯的話,這還會導致產生一堆莫名其妙的 .class 檔
用一個生一次,用一堆的話就等著被 .class 淹死…

public interface API {
void doRun(void() func);
}

public class Client {
void doit(API api) {
api.doRun(() {snippetOfCode(); });
}
}

這個看起來真的清爽太多了…
雖然我覺得有些地方好像不應該省略

() { snippetOfCode(); }
改成
void() { snippetOfCode(); }

看起來比較不會那麼神秘

--
By Gamers, For Gamers - from the past Interplay

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
帥哞哞
2006-08-27 00:12:52 UTC
Permalink
Post by godfat 真常
※ 引述《Schelfaniel (Test)》之銘言:
: http://blogs.sun.com/roller/resources/ahe/closures.pdf
: 暫時先不評論, 不過這個算是其他很多語言都有的就是了...
終於不需要愚蠢的 interface 了嗎?真是可喜可賀…
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
小弟是否可以順勢請益一下....
如照大大下面所言....
是不是說Interface會產生太多class所以不可取???
Interface不是用來彌補類別繼承不足用的嗎?
如他的多重繼承以及為類別增加特定方法等等.....
那如果說這是他的優點....
那大大認為他的缺點是啥呢??
歡營有想法的大大一起發表意見~~~
小弟只是想多了解Interface背後的設計哲學~~~~
Post by godfat 真常
不過總有種,Java 越來越不 Java 的感覺 -_-b
節錄:
public interface Runnable {
void run();
}
public interface API {
void doRun(Runnable runnable);
}
public class Client {
void doit(API api) {
^^^^^^^^^^^^^^^^^^^^^^^^^^
這裡我有個問題~~~~Interface可以直接當引數用嗎??他不是只有方法而已~~~
那方法可以直接當引數??
Post by godfat 真常
api.doRun(new Runnable(){
public void run() {
snippetOfCode();
}
});
}
}
我一直覺得這種做法真的是非常地愚蠢,
如果我沒記錯的話,這還會導致產生一堆莫名其妙的 .class 檔
用一個生一次,用一堆的話就等著被 .class 淹死…
public interface API {
void doRun(void() func);
}
public class Client {
void doit(API api) {
api.doRun(() {snippetOfCode(); });
}
}
這個看起來真的清爽太多了…
雖然我覺得有些地方好像不應該省略
() { snippetOfCode(); }
改成
void() { snippetOfCode(); }
看起來比較不會那麼神秘
--
┌─────◆KKCITY◆─────┐ KK免/費/撥/接 ◤
│ bbs.kkcity.com.tw │▏電話(1):449◤1999 電話(2):4058-6000
└──《From:140.131.95.183 》──┘▏帳號:kkcity 密碼:kkcity
--
godfat 真常
2006-08-29 23:38:48 UTC
Permalink
※ 引述《***@kkcity.com.tw (帥哞哞)》之銘言:
: ※ 引述《***@ptt.cc (godfat 真常)》之銘言:
: > 終於不需要愚蠢的 interface 了嗎?真是可喜可賀…
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 小弟是否可以順勢請益一下....
: 如照大大下面所言....
: 是不是說Interface會產生太多class所以不可取???
: Interface不是用來彌補類別繼承不足用的嗎?
: 如他的多重繼承以及為類別增加特定方法等等.....
: 那如果說這是他的優點....
: 那大大認為他的缺點是啥呢??

其實 interface 在這邊是兩回事
closure, lambda, anonymous/unnamed function(意思全部差不多)的
用意是用很簡易的方式產生一個 callback function
Java 現在沒有這個功能,所以只能用 interface 去模擬
而模擬的效果非常地爛,但又不得不用。簡單說就是這樣

: > public interface API {
: > void doRun(Runnable runnable);
: > }
: > public class Client {
: > void doit(API api) {
: ^^^^^^^^^^^^^^^^^^^^^^^^^^
: 這裡我有個問題~~~~Interface可以直接當引數用嗎??他不是只有方法而已~~~
: 那方法可以直接當引數??

可以,他可以 refer 到一個有實作 API 這個 interface 的 instance

--
Nobody can take anything away from him.
Nor can anyone give anything to him.

What came from the sea,
has returned to the sea.
Chrono Cross

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
a***@kkcity.com.tw
2006-08-30 12:08:14 UTC
Permalink
Post by godfat 真常
: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
: 小弟是否可以順勢請益一下....
: 如照大大下面所言....
: 是不是說Interface會產生太多class所以不可取???
: Interface不是用來彌補類別繼承不足用的嗎?
: 如他的多重繼承以及為類別增加特定方法等等.....
: 那如果說這是他的優點....
: 那大大認為他的缺點是啥呢??
其實 interface 在這邊是兩回事
closure, lambda, anonymous/unnamed function(意思全部差不多)的
用意是用很簡易的方式產生一個 callback function
Java 現在沒有這個功能,所以只能用 interface 去模擬
而模擬的效果非常地爛,但又不得不用。簡單說就是這樣
: ^^^^^^^^^^^^^^^^^^^^^^^^^^
: 這裡我有個問題~~~~Interface可以直接當引數用嗎??他不是只有方法而已~~~
: 那方法可以直接當引數??
可以,他可以 refer 到一個有實作 API 這個 interface 的 instance
如果加入了 closure, 會不會有機會也做到類似
C/C++ 那類 function pointer (C# 的 delegate?)
那種機制?

Alien
--
┌─────◆KKCITY◆─────┐▇─┐KKADSL→六星級優質連線服務
│ bbs.kkcity.com.tw │┴ └─▇ 馬上申請帶你上網環遊全世界!
└──《From:202.72.0.45 》──┘ KKADSL ┴  http://adsl.kkcity.com.tw 
--
qazxsw99
2006-08-30 04:45:11 UTC
Permalink
※ 引述《***@kkcity.com.tw ( )》之銘言:
: ※ 引述《***@ptt.cc (godfat 真常)》之銘言:
: > 其實 interface 在這邊是兩回事
: > closure, lambda, anonymous/unnamed function(意思全部差不多)的
: > 用意是用很簡易的方式產生一個 callback function
: > Java 現在沒有這個功能,所以只能用 interface 去模擬
: > 而模擬的效果非常地爛,但又不得不用。簡單說就是這樣
: > 可以,他可以 refer 到一個有實作 API 這個 interface 的 instance
: 如果加入了 closure, 會不會有機會也做到類似
: C/C++ 那類 function pointer (C# 的 delegate?)
: 那種機制?
: Alien

我想應該會吧~

而我想問一下,以下是Closure的基本應用嗎?

像javascript可以把function當作參數傳送
: ex:

function sayhello() {
alert('hello');
}

var f = sayhello
f(); //此時同等於呼叫sayhello function

這只是最基本的應用,我個人認為啦...

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.163.45
※ 編輯: qazxsw99 來自: 61.231.163.45 (08/30 20:45)
藍色爵士貓
2006-08-30 13:11:10 UTC
Permalink
※ 引述《***@ptt.cc (qazxsw99)》之銘言:
: 而我想問一下,以下是Closure的基本應用嗎?
: 像javascript可以把function當作參數傳送
: : ex:
: function sayhello() {
: alert('hello');
: }
: var f = sayhello
: f(); //此時同等於呼叫sayhello function
: 這只是最基本的應用,我個人認為啦...

function Robot() {
var createTime = new Date();

this.getAge = function() {
var now = new Date();
var age = now - createTime;
return age;
}
}

var robbie = new Robot();
window.onload = function() {
alert(robbie.getAge());
}

摘自Ajax in action 附錄 B。。。

--
 \,`/ / 。。。 嗨!
_).. `_
( __ -\
'`.
( \>_-_,
_||_ ~-/  http://caterpillar.onlyfun.net/
--
※ Origin: 臺大電機 Maxwell 站 ◆ From: 218-166-217-253.dynamic.hinet.net
godfat 真常
2006-08-30 05:09:02 UTC
Permalink
�� �ޭz�mqazxsw99 (qazxsw99)�n���ʨ��G
: �� �ޭz�***@kkcity.com.tw ( )�n���ʨ��G
: : �p�G�[�J�F closure, �|���|�����|�]��������
: : C/C++ ���� function pointer (C# �� delegate?)
: : ���ؾ���?
: : Alien

�����D�A����½�F�@�U���g�A�n���S�����o�^��
�άO�ں|�ݤF�A�i�o�q�Y����J�Ӭ�
�ڷQ�]�\�o�ӪF���˧����A�N�|�ˤU�@�˧a
�άO���L�a�����ꦭ�w�b���F�K @_@
�u�O�o�ˤ@�ӡA�n���ܪ��a���i�ٯu���֡K

: �ӧڷQ�ݤ@�U�A�H�U�OClosure��������ζ�?
: ��javascript�i�H��function���@�Ѽƶǰe
: : ex:
: function sayhello() {
: alert('hello');
: }
: var f = sayhello
: f(); //���ɦP�����I�ssayhello function
: �o�u�O�̰򥻪���ΡA�ڭӤH�{����...

���O�a @_@ �A�o�Ӥw�g�O�W���һ������� function pointer
�̰򥻪���δN�b���g�峹�̡K�K
�]�N�O�H�U�o�q�G

public interface API {
void doRun(void() func);
}

public class Client {
void doit(API api) {
api.doRun(() {snippetOfCode(); });
}
}

--
�ͦ��h�S�B���Y���w�B�@�u�ʮɡB�����U�U

�m�����n�Х@����

--
�� �o�H��: ���������~�{(ptt.cc)
�� From: 220.135.28.18
Believing is seeing! ^^
2006-08-31 12:51:54 UTC
Permalink
※ 引述《godfat (godfat 真常)》之銘言:
: 不知道,剛剛翻了一下那篇,好像沒提到這回事
: 或是我漏看了,懶得從頭到尾仔細看
: 我想也許這個東西弄完後,就會弄下一樣吧
: 或是其他地方其實早已在做了… @_@
: 只是這樣一來,要改變的地方可還真不少…

  有喔,它是先引入 function types 與 local functions,
  然後再把 local functions 簡化為 anonymous functions (closures) 的,
  以下是它的範例:

public static void main(String[] args) {
int plus2(int x) { return x+2; }
int(int) plus2b = plus2;
System.out.println(plus2b(2));
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.146.50
godfat 真常
2006-08-31 13:19:37 UTC
Permalink
※ 引述《jtmh (Believing is seeing! ^^)》之銘言:
:   有喔,它是先引入 function types 與 local functions,
:   然後再把 local functions 簡化為 anonymous functions (closures) 的,
:   以下是它的範例:
: public static void main(String[] args) {
: int plus2(int x) { return x+2; }
: int(int) plus2b = plus2;
: System.out.println(plus2b(2));
: }

這個不是 function pointer 的概念,沒有說明如何包裝物件方法
假設:

void print( int() f ){
System.out.println( f() );
}

下面這要怎麼做?

Integer i = new Integer(10);

print( i.hashCode );

還是會變成這樣:

print( int(){ return i.hashCode(); } );

這就是多此一舉了
不過我覺得 Java 的設計理念就是要你多打一點字
為了省幾個字換來更複雜的東西,似乎一直是 Java 避免的
也許 closure 就已經是很大的讓步了也說不定

--
Hear me exalted spirits. Hear me, be you gods or devils, ye who hold
dominion here:
I am a wizard without a home. I am a wonderer seeking refuge.

Sacrifice

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.28.18
a***@kkcity.com.tw
2006-09-01 02:11:48 UTC
Permalink
Post by godfat 真常
※ 引述《jtmh (Believing is seeing! ^^)》之銘言:
:   有喔,它是先引入 function types 與 local functions,
:   然後再把 local functions 簡化為 anonymous functions (closures) 的,
:   以下是它的範例:
: public static void main(String[] args) {
: int plus2(int x) { return x+2; }
: int(int) plus2b = plus2;
: System.out.println(plus2b(2));
: }
這個不是 function pointer 的概念,沒有說明如何包裝物件方法
jtmh 的例子是 function types 吧?

加上後面的部份, 和我想問的 function pointer
就差不多了.
Post by godfat 真常
假設:
void print( int() f ){
System.out.println( f() );
}
下面這要怎麼做?
Integer i = new Integer(10);
print( i.hashCode );
還是會變成這樣:
print( int(){ return i.hashCode(); } );
這就是多此一舉了
不過我覺得 Java 的設計理念就是要你多打一點字
為了省幾個字換來更複雜的東西,似乎一直是 Java 避免的
也許 closure 就已經是很大的讓步了也說不定
看不懂你在寫什麼.

提供了 function-pointer-like 的工具,
就是有它適用的地方, 而不是像你這裡硬
套進去用吧.

Alien
--
┌─────◆KKCITY◆─────┐ ◢╱ 只要你通過身份認證 ~ ◥█
│ bbs.kkcity.com.tw │ █▉─ 免經驗、五人連署即開班系板 ◥
└──《From:202.72.0.45 》──┘ ◥╲ 趕快為班上設個秘密基地吧! ◢
--
晉級!
2006-08-31 22:28:05 UTC
Permalink
不好意思亂入一下,這個標題已經討論到這有些開始看不太懂了?
各位現在只的是不是這篇文談到的東西哩?
→ http://0rz.net/ba1NA

※ 引述《***@kkcity.com.tw ( )》之銘言:
: ※ 引述《***@ptt.cc (godfat 真常)》之銘言:
: > print( int(){ return i.hashCode(); } );
: > 這就是多此一舉了
: > 不過我覺得 Java 的設計理念就是要你多打一點字
: > 為了省幾個字換來更複雜的東西,似乎一直是 Java 避免的
: > 也許 closure 就已經是很大的讓步了也說不定
: 看不懂你在寫什麼.
: 提供了 function-pointer-like 的工具,
: 就是有它適用的地方, 而不是像你這裡硬
: 套進去用吧.
: Alien

--
╮╭
 (′ε‵) 寫CASE (‵︿′) 翻好書 (╯口╰) 做試題 (●)皿(●)
 /●\ ─→ <●╯ ─→ \●╮ ─→ Θ●ψ
 || 小JP /\ (Step 1) >< (step 2) / > (小WCD)
  http://www.wretch.cc/blog/hougzou  

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.129.165.41
Believing is seeing! ^^
2006-09-01 00:26:34 UTC
Permalink
※ 引述《***@kkcity.com.tw ( )》之銘言:
: ※ 引述《***@ptt.cc (godfat 真常)》之銘言:
: > 這個不是 function pointer 的概念,沒有說明如何包裝物件方法

  它的確無法用作 "method pointer,"
  或許稱之為 local function pointer 會比較適當吧。

: jtmh 的例子是 function types 吧?

  是的,function type 搭配 local function 來使用。

: 加上後面的部份, 和我想問的 function pointer
: 就差不多了.
: > 假設:
: > void print( int() f ){
: > System.out.println( f() );
: > }
: > 下面這要怎麼做?
: > Integer i = new Integer(10);
: > print( i.hashCode );
: > 還是會變成這樣:
: > print( int(){ return i.hashCode(); } );
: > 這就是多此一舉了
: > 不過我覺得 Java 的設計理念就是要你多打一點字
: > 為了省幾個字換來更複雜的東西,似乎一直是 Java 避免的
: > 也許 closure 就已經是很大的讓步了也說不定
: 看不懂你在寫什麼.
: 提供了 function-pointer-like 的工具,
: 就是有它適用的地方, 而不是像你這裡硬
: 套進去用吧.
: Alien

  同意。

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.166.208
Believing is seeing! ^^
2006-09-01 00:52:39 UTC
Permalink
※ 引述《hougzou (晉級!)》之銘言:
: 不好意思亂入一下,這個標題已經討論到這有些開始看不太懂了?
: 各位現在只的是不是這篇文談到的東西哩?
: → http://0rz.net/ba1NA

  是的 :)

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.175.166.208
專注完美近乎顆球
2006-09-01 23:21:33 UTC
Permalink
※ 引述《godfat (godfat 真常)》之銘言:
: 我一直覺得這種做法真的是非常地愚蠢,
: 如果我沒記錯的話,這還會導致產生一堆莫名其妙的 .class 檔
: 用一個生一次,用一堆的話就等著被 .class 淹死…
: public interface API {
: void doRun(void() func);
: }
: public class Client {
: void doit(API api) {
: api.doRun(() {snippetOfCode(); });
: }
: }

目前考慮的 closure 內部 implementation 還是會產生 anonymous class,
所以一堆莫名奇妙的 .class 檔可能還是免不了,
closure 在 java 這邊算是 syntax candy 而已 ^^

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.248.205.166
加油加油!!^Q^
2006-09-02 17:29:42 UTC
Permalink
請問您會寫無線網路的模擬??

您可以幫幫我接case??

時間不趕滴

--


 pink小猴子︿︿

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.63.11

Loading...