可擴展的編程語言——Scala

一、Scala是什么

Scala是一種多范式的編程語言,其設計的初衷是要集成面向對象編程和函數式編程的各種特性。Scala運行于Java平臺(Java虛擬機),并兼容現有的Java程序。

? Scala語言的名稱來自于"可伸展的語言"。之所以這樣命名,是因為它被設計成可以隨著使用者的需求而擴展。Scala的應用范圍很廣,從編寫簡單腳本,到建立大型系統。
? 它在許多方面體現了面向對象和函數式編程的熔合;或許這種熔合比其他那些廣泛使用的語言體現得還要深入。在可伸展性方面,這兩種編程風格具有互補的力量。SCala 的函數式編程簡化了用簡單部件搭建實際應用的過程。它的面向對象特性又使它便于構造大型系統并使它們適應新的需求。Scala中這兩種風格的組合使得表達新的編程模式和新的組件抽象成為可能。同樣也讓這種易讀、簡潔的編程風格成為順理成章的事。而且由于 SCala 良好的延展性,因此用它來編程也充滿樂趣。

二、Scala能做什么

從技術層面上講,Scala是一種把面向對象和函數式編程理念加入靜態類型語言的混合體,它可以

  • 運行在標準的Java平臺上,可以與所有的Java庫無縫交互;
  • 可以編寫腳本,把Java組建組合起來;
  • 更能發揮它力量的地方,在于用它來建立大型系統或可重用控件的架構。

三、Scala的優點

1.優雅:這是框架設計師第一個要考慮的問題,框架的用戶是應用開發程序員,API是否優雅直接影響用戶體驗。

2.速度快:Scala語言表達能力強,一行代碼抵得上Java多行,開發速度快;Scala是靜態編譯的,所以和JRuby,Groovy比起來速度會快很多。

3.能融合到Hadoop生態圈:Hadoop現在是大數據事實標準,Spark并不是要取代Hadoop,而是要完善Hadoop生態。JVM語言大部分可能會想到Java,但Java做出來的API太丑,或者想實現一個優雅的API太費勁。

四、Scala的特征

  • 一致性: 盡管Scala融合了靜態類型系統、面向對象、函數式編程等語言特性,但卻很少能看出融合的痕跡。Scala是我見到融合最多語言特性而又不顯得雜亂的編程語言之一。
  • 類型安全:Scala創始人是教授,他先帶領創建了Java 5編譯器,而后覺得Java有太多羈絆而發明了Scala。 Scala編譯器和類型系統非常強大,它的目標是盡量把軟件錯誤消滅在編寫過程中。 Scala類型系統是圖靈完備的,甚至可以在編譯期間解決問題。
  • 面向對象: Scala是面向對象的編程語言,所有的變量和方法都封裝在對象中,可以把信息封裝起來供外部使用。
  • 函數式編程:Scala同時又是函數式編程語言,函數可以獨立存在,可以定義一個函數作為另一個函數的返回值,也可以接受函數作為函數的參數。這給組合函數帶來了很大的便利。如何把面向對象編程形容成搭積木的話,函數式編程就像拼線條,更靈活和更有創意。
  • 異步編程: 由于函數式編程提倡變量不可變,使異步編程變得非常容易。同時Scala提供的Future, 和akka類庫,使得異步編程變得非常容易。
  • 基于JVM: Scala會被編譯成為jvm bytecode,所以Scala能無縫集成已有的Java類庫。你可以非常自然的使用已經存在的非常龐大且穩定的Java類庫,比如小巧好用的apache.common.*, 或者Java上的各種工具類庫。

五、總結

Scala的追求不在于Ruby的“好玩”,Python的“簡單“,Scala的追求在于速度與性能的提升,怎樣有效率就怎樣弄。Scala不把程序員當傻子,Scala "Don Giovanni"項目創始人馬丁·奧德斯基在視頻中說的很清楚:“Scala現在是為聰明人創造的,以后也是為聰明人服務的。”所以不同于Python讓程序員用一種方法做所有事情,Scala提供一整套工具,讓程序員自由選擇,無論是mutable數據結構,immutable數據結構,并行(parallel)數據結構。然后在這些選擇中,Scala再針對他們進行算法層面的特殊優化。Scala相信程序員的聰明才智,讓程序員自行選擇合適的結構,以針對變化萬千的任務需求,這點是Scala做得極好的地方。

本文部分內容參考

什么嗎是Scala?為什么要學Scala?

Scala 是一門怎樣的語言,具有哪些優缺點?

編程語言scala有哪些特點

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535675.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu7.10 apache+php+mysql配置

本篇文章 經過許多次的測試和修改已經完成了在Ubuntu7.10 下 安裝配置 ApachePHPMySQL的所有的工作. 1、在Ubuntu7.10 下安裝 Apache2PHP5MySQL sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd mysql-server php5-mysql phpmyadmin在下載來自動安裝配置的時候…

Spark-大規模數據處理計算引擎

官網:http://spark.apache.org 一、Spark是什么 Spark是一種快速、通用、可擴展的大數據分析引擎,2009年誕生于加州大學伯克利分校AMPLab,2010年開源,2013年6月成為Apache孵化項目,2014年2月成為Apache頂級項目。項目是…

MySQL Replace INTO的使用

REPLACE的運行與INSERT很相像。只有一點除外,如果表中的一個舊記錄與一個用于PRIMARY KEY或一個UNIQUE索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。請參見13.2.4節,“INSERT語法”。 注意,除非表有…

CentOS7下Spark集群的安裝

從物理部署層面上來看,Spark主要分為兩種類型的節點,Master節點和Worker節點,Master節點主要運行集群管理器的中心化部分,所承載的作用是分配Application到Worker節點,維護Worker節點,Driver,Ap…

Scala中class與object區別

calss scala編譯器會字段幫我們生產一個私有字段和2個公有方法get和set scala 中沒有 static 關鍵字,所以 對于一個class來說,所有的方法和成員變量在實例被 new 出來之前都是無法訪問的 因此在class中的main方法沒什么用了 scala 的object 中所有成員…

如何編寫一個shell腳本

本文結合大量實例闡述如何編寫一個shell腳本。 為什么要進行shell編程 在Linux系統中,雖然有各種各樣的圖形化接口工具,但是sell仍然是一個非常靈活的工具。Shell不僅僅是命令的收集,而且是一門非常棒的編程語言。您可以通過使用shell使大量的…

Scala變量和常用數據類型

一、 聲明值和變量 Scala聲明變量有兩種方式,一個用val,一個用var。 聲明方式:val / var 變量名 : 變量類型 變量值 val定義的值是不可變的,它不是一個常量,是不可變量,或稱之為只讀變量。 val示例&am…

ubuntu7.10下的vi用的怪怪的

到網上查了一下,原來是ubuntu7.10默認安裝的是vim-tiny.可以重新安裝vim-full #dpkg -l 如果是vim-tiny #apt-get install vim-full

(轉)JVM監控工具介紹

2008年03月04日 16:57原作者: stone2083 原文地址:http://www.blogjava.net/stone2083/archive/2008/02/25/182081.htmljstatd啟動jvm監控服務。它是一個基于rmi的應用,向遠程機器提供本機jvm應用程序的信息。默認端口1099。實例:…

Scala的控制結構

一、 if else表達式 scala中沒有三目運算符,因為根本不需要。scala中if else表達式是有返回值的,如果if或者else返回的類型不一樣,就返回Any類型(所有類型的公共超類型)。 例如:if else返回類型一樣 scal…

【Kubernetes】控制器Statefulset

Statefulset控制器 一、概念二、Statefulset資源清單文件編寫技巧2.1、查看定義Statefulset資源需要的字段2.2、查看statefulset.spec字段如何定義2.3、查看statefulset的spec.template字段如何定義 三、Statefulset使用案例:部署web站點3.1、編寫一個Statefulset資…

Scala 函數

scala定義函數的標準格式為: def 函數名(參數名1: 參數類型1, 參數名2: 參數類型2) : 返回類型 {函數體} 函數示例1:返回Unit類型的函數 def shout1(content: String) : Unit {println(content) }函數示例2:返回Unit類型的函數&#xff0…

ubuntu7.10中的apache的一些設置

在/etc/apache2/mods-available目錄下是apache2可用的模塊.出現在這里的模塊不代表你可以用.只是表明你的apache2已經安裝了這些模塊.可用的模塊在/etc/apache2/mods-enabled這個目錄下.(從redhat系列轉過來看ubuntu,雖然感覺不習慣,但覺得ubuntu的這種分目錄的方法很不錯.) 如…

Java并發篇_Java內存模型

在并發編程中,我們通常會遇到以下三個問題:原子性問題,可見性問題,有序性問題。那么它們產生的原因和在Java中解決的辦法又是什么呢? 一、內存模型的相關概念 ? 計算機在執行程序時,每條指令都是在CPU中執…

rz的安裝

以前,在redhat系列的linux中,通過終端工具操作服務器,經常使用rz來上傳小文件.但是有些系統默認情況下不能使用此命令.今天通過ubuntu.看到這條命令.即使ubunt沒有裝這個命令,你輸入此命令時,它會提示你進行安裝. rootubuntu:~# rzThe program rz is currently not installed. …

Java并發篇_synchronized

synchronized是Java語言的關鍵字,當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多只有一個線程執行該段代碼。本文給大家介紹java中的用法。 一、為什么要使用synchronized 在并發編程中存在線程安全問題,主要原因有&…

mysqlreport的學習

mysqlreport是一個腳本. 需要先安裝perl-DBI和perl-DBD-MySQL這2個包 mysqlreport 使用DBI 需要有http://hackmysql.com/mysqlreportdocperl ./mysqlreport --help 看幫助 perl ./mysqlreport --user root --password 密碼mysqlreport 文檔mysqlreport 以很友好的方式顯示 My…

Java并發篇_volatile

volatile是Java提供的一種輕量級的同步機制。Java 語言包含兩種內在的同步機制:同步塊(或方法)和 volatile 變量,相比于synchronized(synchronized通常稱為重量級鎖),volatile更輕量級&#xff…

vi 語法著色

我所在部門的經理極其鄙視我用vi,這到不是說他看不慣vi,而是因為那句話"只有黑客級的人才用VI".而我只是一只小小萊鳥.所以只好被他們鄙視了. 現在說一說vi 著色的問題. 首先安裝 vim-enhanced , # yum -y install vim-enhanced 然后, # vi ~/…

Docker Dockerfile詳解

一、什么是Dockerfile Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Doc…