自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Adobe架構(gòu)師談Scala:功能強(qiáng)大但令人困惑

原創(chuàng)
開發(fā) 后端
Scala是一個(gè)強(qiáng)類型語言。它可以直接在JVM(還有.NET平臺(tái))上運(yùn)行,很方便的與Java代碼和庫集成,而且有并行編程的重要武器Actor模型。一位Adobe架構(gòu)師抱著喜愛Scala的心情進(jìn)行了一些深入的了解,然而這個(gè)過程中卻產(chǎn)生了一些困惑。

【51CTO精選譯文】本文是Adobe架構(gòu)師Ricki在英文開發(fā)社區(qū)DZone上發(fā)布的一篇文章。Ricky專注SaaS,云計(jì)算以及使用Map/Reduce和Hadoop堆進(jìn)行并行編程。最近Ricki參加了一次Scala線下課程,并對(duì)Scala語言留下了自己的一些印象。

51CTO編輯推薦:Scala編程語言

對(duì)Scala語言的第一印象

關(guān)于 Scala 這個(gè)編程語言,我聽到很多正面的評(píng)論。我個(gè)人過去更多使用 Java,在過去兩年,我已經(jīng)轉(zhuǎn)用 Ruby(還會(huì)用一些 Erlang)。我聽到的那些 Scala 功能,對(duì)我很有吸引力,以下列出:

◆Scala 代碼可編譯為 Java 字節(jié)碼,直接在 JVM 上直接運(yùn)行。使用Scala寫的代碼能夠直接享受 Java 虛擬機(jī)技術(shù)所具有的性能和健壯性(robustness)

◆可以很方便地與 Java 代碼和庫進(jìn)行集成,能夠直接享受大量現(xiàn)有 Java 庫帶來的便利。

◆對(duì)于 Actor 模型,它提供了很好的支持,我認(rèn)為這一點(diǎn)對(duì)于多核計(jì)算機(jī)架構(gòu)是一種非常重要的編程范式。

深入了解,繼而困惑

所以我決定參加 Qcon 大會(huì)上 Dean Wampler 做的 Scala 課程。聽課之后,我對(duì) Scala 的印象,總結(jié)如下:

首先,Scala 是一個(gè)強(qiáng)類型語言。不過,它具有類型推理機(jī)制,所以你不是非要進(jìn)行類型聲明,它是可選的。

但在一些地方(如方法簽名),類型聲明是必須的。什么時(shí)候我必須聲明一個(gè)類型,對(duì)于我這點(diǎn)不是非常清楚。

具有變量中的“val”和“var”聲明是非常好的,因?yàn)樗梢允沟貌蛔冃裕╥mmutability)成為顯式的。在 Ruby 中,通過向?qū)ο蟀l(fā)送 freeze() 方法,你可以使一個(gè)對(duì)象成為不變的(immutable),但Scala做得更為顯式。

不過,我發(fā)現(xiàn)使用兩種不同的方式定義一個(gè)方法這點(diǎn)令人困惑。

  1. class A() {  
  2.  def hello {  
  3.  ...  
  4.  }  
  5. }  
  6.  
  1. class A() {  
  2.  def hello = {  
  3.  ...  
  4.  }  
  5. }  
  6.  

這個(gè) MyFunction[+A1, -A2] 對(duì)我來說真的不容易弄明白。我覺得無類型語言更為簡(jiǎn)單。

另外,刪除開始和結(jié)束的括號(hào)也讓我很困惑。

  1. class Person(givenName: String) {  
  2.  var myName = givenName  
  3.  def name =(anotherName: String) = {  
  4.  myName = anotherName  
  5.  }  
  6. }  
  7.  
  1. class Person(givenName: String) {  
  2.  var myName = givenName  
  3.  def name =(anotherName: String) = myName = anotherName  
  4. }  
  5.  

 

這個(gè)特別的“隱式”轉(zhuǎn)化方法提供了一種機(jī)制,即使用 Scala 開發(fā) DSL(領(lǐng)域?qū)S谜Z言:Domain Specific Language)。但對(duì)于我,它看起來很奇怪。從根本上說,你需要導(dǎo)入單個(gè)隱式轉(zhuǎn)化方法,后者需要處理所有可能的轉(zhuǎn)化。

#T#所有以“:”結(jié)尾的方法,調(diào)用順序都是顛倒的,這對(duì)我來說也是非常奇怪的東西。

Scala 中的 trait 為 Scala 提供了 mixin,但我覺得 Ruby 語言中的“模塊”機(jī)制做得更好。

Scala 具有“函數(shù)”的概念,并且能夠?qū)?ldquo;函數(shù)”作為參數(shù)傳遞。同樣,我覺得 Ruby 中的 block 做得更好。

也許由于 JVM 對(duì)于動(dòng)態(tài)語言支持的局限性,Scala 在做元編程時(shí)并不是很強(qiáng),Scala 不提供“開放類”屬性,通過它用戶可以在運(yùn)行時(shí)修改現(xiàn)有的類(添加方法、更改方法實(shí)施,添加類等等。)

Scala 還模仿了一些 Erlang 語言的功能,但我不認(rèn)為它這活做得干凈漂亮。比如,它使用 case 類和 unapply() 模仿 Erlang 編程的模式匹配風(fēng)格,但對(duì)于我這有點(diǎn)奇怪。

Erlang 具有兩個(gè)很酷的功能,在 Scala 中我還沒有發(fā)現(xiàn)(也許是我期望太高了)。

◆能夠同時(shí)運(yùn)行類的兩個(gè)版本

◆能夠創(chuàng)建并傳遞函數(shù)對(duì)象到遠(yuǎn)程進(jìn)程(有點(diǎn)類似遠(yuǎn)程代碼加載)

總體印象

我不得不承認(rèn),我對(duì) Scala 的印象并沒有參加那個(gè)課程之前那樣好。Scala 試圖在 JVM 中放入不同的非常有用的編程范式,但對(duì)于我,有種勉強(qiáng)的感覺。當(dāng)然,與JVM的緊密關(guān)系仍是我們選擇Scala的一個(gè)原因。但從純正的編程角度,我更喜歡 Ruby 和 Erlang 的結(jié)合,而不是 Scala。

原文:Impression on Scala 作者:Ricky

編者后記:開發(fā)者對(duì)于語言的喜好在某種程度上和開發(fā)者的性格有很大關(guān)系,正如敏捷大師Dave Thomas所說的,就好像喜歡貓的往往不喜歡狗,喜歡狗的往往不喜歡貓一樣。而不知是否巧合,同樣是Ruby狂熱愛好者的Dave Thomas也曾在訪談中表示自己就是毫無理由的不喜歡Scala,對(duì)Scala的一些用法感到困惑。這樣看來就仿佛Ruby是只貓而Scala是只狗一樣。當(dāng)然也有反例,比如這位從Ruby出家到Scala的程序員,以及曾經(jīng)一直使用Ruby做后臺(tái)的Twitter后來投向了Scala,而其團(tuán)隊(duì)并沒有像上面兩位那樣表示困惑。看來開發(fā)者對(duì)語言的喜好真是一個(gè)難以琢磨的話題呢。

責(zé)任編輯:yangsai 來源: 51CTO.com
相關(guān)推薦

2023-12-08 11:05:00

GitLinux

2019-04-25 06:07:17

物聯(lián)網(wǎng)平臺(tái)物聯(lián)網(wǎng)IOT

2021-10-09 13:48:11

操作符Python運(yùn)算符

2022-06-23 10:17:00

Git技術(shù)Linux

2024-01-15 18:02:09

docker系統(tǒng)文件格式

2019-11-14 06:13:51

欺騙網(wǎng)絡(luò)威脅網(wǎng)絡(luò)安全

2020-06-19 09:35:58

備份Linux系統(tǒng)工具

2010-03-05 09:19:54

Android系統(tǒng)

2013-01-23 11:30:39

JSVirtualKeybjQuery

2020-12-07 16:56:35

Rails

2010-08-05 13:51:13

軟件架構(gòu)師

2011-04-15 09:27:09

Windows PhoWindows phoMango

2012-01-10 16:23:12

兄弟傳真機(jī)

2009-07-07 08:46:11

微軟Windows 7新功能

2010-02-24 17:58:28

Python 測(cè)試框架

2022-10-10 10:14:38

Python繪圖庫

2011-03-11 15:38:08

Java

2024-05-28 00:01:00

開發(fā)者Python模塊

2011-10-31 09:22:07

系統(tǒng)架構(gòu)

2012-02-02 10:23:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)