scala和groovy的優勢有哪些?
看完scala和groovy的語法,我完全沒有感覺到他們的優勢。一門語言吸引我的功能,應該具備下面的功能(1、2、3),但是groovy和scala都沒有。
還請喜歡scala和groovy的朋友詳細簡紹一下他們的優點。1、類功能動態擴展能力給一個對象動態添加方法和熟悉,比如js中的prototype繼承,我覺得這個功能很靈活地擴展了類功能,非常有用,groovy、scala我沒看到,我不確定有沒有,懂的回答
2、同步非同步轉換能力這個功能可大可小,大部分語言都不提供,但是我非常期待這個功能,比如c#里的await,js里的async3、方法切入切入功能語言自帶切面編程功能,python里好像是有的,scala,groovy都沒有,求確定?
你要的三方面功能Scala都有。。。
1、類動態擴展能力
implicit class PoliteInt(i: Int){
def sayHello() = println(s"hello,I am $i")
}
1.sayHello()
scala&> 1.sayHello()
hello,I am 1
2、同步非同步轉換能力
不熟悉c#和js,我猜Scala里對應的是
Future {
//do something async
}
3、面向切面編程
可以簡單的利用函數式編程的特性實現,不用那麼Magic,
def withLog[A,B](funcName: String)(f: A =&> B): A =&> B = { x =&>
println(s"calling $funcName with $x")
val rs = f(x)
println(s"result is $rs")
rs
}
def add1(x:Int):Int = withLog("add1"){x:Int =&> x + 1}
add1(1) //自動在前後輸出日誌
scala&> add1(1)
calling add1 with 1
result is 2
res5: Int = 2
話說總覺得提問的人是偷偷站在Scala這邊的呢。。。
你說的那些功能都很簡單,Scala怎麼可能不支持?
- 類功能動態擴展能力。參見Implicit Classes
- 同步非同步轉換能力。參見ThoughtWorksInc/each這個是我寫的,所以多說幾句。非同步編程只是monad的一種。ThoughtWorksInc/each可以把一切同步代碼轉換成一切monad代碼。
如果你聽一下我做的這場演講(More than async),你就知道ThoughtWorksInc/each可能比C#和js里的async/await強一點點。
- 方法切面功能。參見Mixin Class Composition
Scala主要的缺點有兩個:第一、對dependent type支持不夠好。第二、不能根據type class的使用來自動聲明所需的type class,有一點繁瑣。
謝邀。scala 學不會,groovy 嘛可以看看這些
1、類功能動態擴展能力
3、方法切入切入功能
Runtime and compile-time metaprogramming
2、同步非同步轉換能力
3 Data Parallelism
groovy對我來說主要是把java 程序員從啰嗦代碼中拯救出來了,對 collection 的函數式編程風格的操作和對文件系統訪問都簡潔多了,以上動態編程等酷炫的東西用的其實不多。集 groovy 應用之大成的自然是 grails 框架,以前寫網站,現在寫 rest api 都很方便。舉個栗子:
The Grails Framework 3.1.1
python與js都不熟;scala對比於java來說的話,在於它的語法靈活,表達能力比java強很多,更適合於函數式編程(如monad等等);還有scala支持尾遞歸優化。就知道這麼多,你上面提到的三點都不太熟悉,見諒。總之,scala對於函數式的支持比python,js還是要厲害一些的。
無邀自來。在用scala寫spark程序。你的問題不太全面,要說優勢得有個對比對象。groovy不太了解,姑且回到scala,優勢嘛。。。spark的原生語言吧,這就是優勢。在大數據領域裡,scala就是優勢
推薦閱讀:
※python網路爬蟲(沒有使用scrapy)中如何克服封ip問題?
※怎樣自學Python?
※學習數據結構有什麼用?
※為什麼 Python 中的複數形式是 (a + bj) 而不是 (a + bi) ?
※py交易的梗是怎麼出現的?
TAG:JavaScript | Python | Java | Scala | Groovy |