作者Chikei ( )
看板java
標題Re: [新聞] Twitter 改用 Java/Scala 之後...
時間Mon Nov 26 15:47:50 2012
※ 引述《LaPass (LaPass)》之銘言:
: 看到有人也在找類似的功能,只不過他是在找類似function pointer的東西
: 那,看到他的解法是這樣
: interface IAcetion{
: void invoke();
: }
: 有什麼想執行的方法,包進去,當成變數傳出去就可以了
: 如果是有參數的,就用
: interface IAcetionT1<Tin1>{
: void invoke(Tin1 arg1);
: }
: interface IAcetionT1<Tin1,Tin2>{
: void invoke(Tin1 arg1,Tin2 arg2);
: }
: ......
: 如果需要傳回值的話
: interface IFunc<Tout>{
: Tout call();
: }
: ......
: 想要用閉包的話
: 直接寫個匿名物件繼承IFunc傳回去就可以了
因為
(arg1: Type1, arg2: Type2) => { exprs }
遠比
new IFunc2<T1, T2, T3>{
T3 apply(T1 arg1, T2 arg2){
statement;
}
}
乾淨易懂
: 然後,我實在搞不懂
: Java跟C#已經夠高階了
: 為什麼還要生個新語言去產生Java、C#? orz....
因為語言有(你不見得認同的)缺陷。
你的夠高階不代表其他人覺得夠高階,於是這些覺得不夠高階的人就去弄了新的語言。
以collection來舉例,最早是
int size = col_size;
for(int idx = 0; idx < size; idx++){
statement;
}
後來Java加了
for(ColType var: collection){
statement;
}
Scala變成
collection.map/foreach( mapping function )
你覺得Java很高階嘛?
functional lang.告訴你對collection處理根本不用管
索引值、新collection的暫存等零碎的事情,專心想要怎麼轉換/過濾裡面的元素就好
: 不知道我的理解有沒有錯誤
: Scala是一個新的語言,他最後的結果是生成Java Code
: 也就是說..... 得重新學一遍
對也不對,Scala會被很多學Java的人推薦一部分原因是
因為它跟Java的語法有足夠的相似度,所以上手快。
另外那叫JVM bytecode,並不是輸出成Java,
你這樣講會有很多弄JVM language的人很有意見的:p
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.72.92.133
推 LaPass:最後一點抱歉,我看到mars90226的推文才知道那到底是什麼。 11/26 16:27
推 PsMonkey:輸出成 Java 是我講的啦... 只是為了簡單讓人懂 [逃] 11/26 16:42
推 snaketsai:我可以推LLVM的bitcode嗎?(亂入) 11/27 00:38
推 snaketsai:被學校老師強推一票Lisp Family後我對命令式語言更有愛w 11/27 00:43
推 Schelfaniel:我是覺得Scala把static拆出來成object比較直覺說 11/27 09:22
→ Schelfaniel:而且最早是覺得寫一堆getter/setter頗煩的 :Q 11/27 09:25
→ LaPass:Java的確有不少地方很煩..... 11/27 09:26
→ Schelfaniel:Scala強調用val及Pattern Matching等程式出錯率較低 11/27 09:32
→ Schelfaniel:雖然Scala少了break和continue這兩個 11/27 09:35
推 LaPass:不會吧...... 連break和continue都拿掉了喔..... orz..... 11/27 09:39
推 swpoker:使用樣式的話~是不用break continue拉~ 11/27 10:02
推 Schelfaniel:另我覺得Scala的lazy很好用,比Clojure的delay好用 11/27 10:03
→ Schelfaniel:例lazy val a={println("a"); "a"}第一次用a時會印出a 11/27 10:04
→ Schelfaniel:Clojure: (def a (delay (println "a") "a")) 11/27 10:06
推 Schelfaniel:但Scala之後用a就直接用了,而Clojure必須要@a才行 11/27 10:10
→ Schelfaniel:Scala除錯也還好,比較難除錯的是implicit @o@ 11/27 10:13
→ Schelfaniel:不像Clojure除錯需要眼力(對括號)、推理力和運氣 >o< 11/27 10:15
推 PsMonkey:罪人恭請公子獻頭... 講錯,是恭請樓上撰寫專文介紹... 11/27 11:04