scala和groovy的優勢有哪些?

看完scala和groovy的語法,我完全沒有感覺到他們的優勢。一門語言吸引我的功能,應該具備下面的功能(1、2、3),但是groovy和scala都沒有。

還請喜歡scala和groovy的朋友詳細簡紹一下他們的優點。

1、類功能動態擴展能力

給一個對象動態添加方法和熟悉,比如js中的prototype繼承,我覺得這個功能很靈活地擴展了類功能,非常有用,groovy、scala我沒看到,我不確定有沒有,懂的回答

2、同步非同步轉換能力

這個功能可大可小,大部分語言都不提供,但是我非常期待這個功能,比如c#里的await,js里的async

3、方法切入切入功能

語言自帶切面編程功能,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怎麼可能不支持?

  1. 類功能動態擴展能力。參見Implicit Classes
  2. 同步非同步轉換能力。參見ThoughtWorksInc/each

    這個是我寫的,所以多說幾句。

    非同步編程只是monad的一種。

    ThoughtWorksInc/each可以把一切同步代碼轉換成一切monad代碼。

    如果你聽一下我做的這場演講(More than async),你就知道ThoughtWorksInc/each可能比C#和js里的async/await強一點點。

  3. 方法切面功能。參見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 |