Scala學(xué)習(xí)筆記(1)-快速起步

本文是對(duì)Scala語(yǔ)言的一個(gè)基本介紹和快速入門(mén)慢蜓,共包括如下章節(jié):

  • 概述
  • 安裝Scala
  • 交互式命令行工具
  • 文件方式
  • 基本語(yǔ)法規(guī)范
  • 開(kāi)發(fā)工具
  • 小結(jié)

參考資料:因?yàn)镾cala源碼是編譯成Java字節(jié)碼系洛,然后在jvm中執(zhí)行。并且scala和java可以相互無(wú)縫調(diào)用。因此scala語(yǔ)言和java語(yǔ)言有天然的關(guān)系,語(yǔ)法也比較類(lèi)似,所以熟悉JAVA語(yǔ)言對(duì)理解Scala語(yǔ)言有很大幫助催享。

一、概述

Scala是當(dāng)前熱門(mén)的現(xiàn)代編程語(yǔ)言之一哟绊,尤其在大數(shù)據(jù)領(lǐng)域,如spark,kafka等大數(shù)據(jù)技術(shù)的而核心代碼都是使用Scala語(yǔ)言編寫(xiě)的痰憎。scala由洛桑聯(lián)邦理工學(xué)院的Martin Odersky設(shè)計(jì)票髓,第一個(gè)版本發(fā)布于2003年,現(xiàn)在最新版本為2.12版本铣耘。

Scala語(yǔ)言有如下一些主要的特性:

  • 基于JVM運(yùn)行洽沟,可以和java相互無(wú)縫互操作
  • 靜態(tài)類(lèi)型,編譯型語(yǔ)言蜗细,編譯成java字節(jié)碼
  • 支持函數(shù)式編程范式
  • 純面向?qū)ο缶幊陶Z(yǔ)言裆操,所有值都是對(duì)象
  • 并發(fā)性怒详,使用Actor作為其并發(fā)模型
  • 自動(dòng)類(lèi)型推斷功能

二、安裝scala

從官方網(wǎng)站www.scala-lang.org/download下載二進(jìn)制版本踪区,如下圖所示:

如果要在window下安裝昆烁,下載windows下的安裝包 scala-2.12.8.msi,下載到本地后缎岗,雙擊運(yùn)行安裝即可静尼。安裝完成后,安裝程序會(huì)將scala安裝目錄下的bin目錄加入到Path環(huán)境變量中传泊,這樣可在dos命令行下的任何當(dāng)前目錄下運(yùn)行bin目錄下的可執(zhí)行腳本或程序鼠渺。

如果要在Linux下安裝,下載scala-2.12.8.tgz眷细,下載到本地后解壓即可拦盹,然后解壓目錄下的bin目錄加入到PATH環(huán)境變量中,便于任何當(dāng)前目錄下都可運(yùn)行bin目錄下的可執(zhí)行腳本或程序溪椎。

三掌敬、交互式命令行工具

scala提供了一個(gè)交互式命令行腳本(linux下文件名為scala,windows下文件名為scala.bat)池磁,可以快速的來(lái)簡(jiǎn)單學(xué)習(xí)scala的語(yǔ)法知識(shí)奔害。

打開(kāi)命令行,運(yùn)行scala地熄,出現(xiàn)交互式界面华临,就可以輸入代碼,輸入:quit退出交互式程序(注意quit前要有冒號(hào))端考。

C:\Windows\System32>scala
Welcome to Scala 2.12.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_40).
Type in expressions for evaluation. Or try :help.

scala> println("hello,world")
hello,world

scala> :quit

C:\Windows\System32>

四雅潭、文件方式

交互式命令行只是用來(lái)進(jìn)行編程練習(xí)的。實(shí)際的應(yīng)用開(kāi)發(fā)中却特,源代碼是保存在文件中的扶供,然后進(jìn)行源代碼編譯,再運(yùn)行裂明。scala提供了一個(gè)腳本文件scalac(windows下為scalac.bat)可以進(jìn)行源代碼的編譯椿浓,將源文件編譯成class文件,然后可以利用scala腳本來(lái)運(yùn)行闽晦。下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)舉例扳碍。

建立一個(gè)源碼文件,文件名如HelloWorld.scala保存到本地仙蛉,scala的源文件的擴(kuò)展名為scala笋敞。文件內(nèi)容如下:

object HelloWorld {
   def main(args: Array[String]) {
      println("Hello, world!")
   }
}

上面代碼雖少,但是一個(gè)完整的可獨(dú)立運(yùn)行的scala應(yīng)用程序荠瘪。一個(gè)獨(dú)立運(yùn)行的scala應(yīng)用程序的入口是一個(gè)單例對(duì)象(如上面用object關(guān)鍵字定義的HelloWorld對(duì)象)的main方法(如上面用def關(guān)鍵字定的方法)夯巷,類(lèi)似java中的main方法的入口赛惩。更詳細(xì)的scala語(yǔ)法參見(jiàn)《Scala學(xué)習(xí)筆記(2)-基礎(chǔ)語(yǔ)法》。

下面對(duì)源代碼文件進(jìn)行編譯趁餐,并運(yùn)行喷兼,整個(gè)過(guò)程如下:

D:\scaladev\demo>ls
HelloWorld.scala

D:\scaladev\demo>scalac HelloWorld.scala

D:\scaladev\demo>ls
'HelloWorld$.class'   HelloWorld.class   HelloWorld.scala

D:\scaladev\demo>scala HelloWorld
Hello, world!

編譯用到scala的scalac程序,類(lèi)似jdk中的javac澎怒,運(yùn)行使用scala程序褒搔,類(lèi)似jdk中的java程序。

需要特別說(shuō)明的是喷面,scala是一個(gè)純面向?qū)ο蟮木幊陶Z(yǔ)言星瘾,在編寫(xiě)scala程序時(shí),所有的語(yǔ)句(如函數(shù)定義惧辈、變量聲明和賦值)都必須被包含在類(lèi)或單例對(duì)象中琳状。我們前面看到在scala提供的交互式命令行程序中可以直接輸入語(yǔ)句(并沒(méi)有定義類(lèi))進(jìn)行執(zhí)行,是因?yàn)槊钚谐绦蛞呀?jīng)做了特殊的處理盒齿。

五念逞、基本語(yǔ)法規(guī)范

  • 區(qū)分大小寫(xiě),如變量边翁、函數(shù)名等都區(qū)分大小寫(xiě)

  • 單行語(yǔ)句后面可以加分號(hào)結(jié)尾(如java),也可以不加分號(hào)結(jié)尾

六翎承、開(kāi)發(fā)工具

可以有多種方式來(lái)編寫(xiě)scala程序,在正式項(xiàng)目開(kāi)發(fā)中我們一般使用可視化的IDE工具符匾,如IntelliJ叨咖。如果是學(xué)習(xí)scala的語(yǔ)法和相關(guān)的api,也可以使用scala提供的命令行工具(如前面介紹的)啊胶,或不需要任何工具直接使用一些在線的編程練習(xí)系統(tǒng)甸各。

(一)使用帶有Scala插件的IntelliJ IDE

  • 安裝
    1、首先下載并安裝IntelliJ Community Edition
    2焰坪、安裝scala插件趣倾。

  • 創(chuàng)建項(xiàng)目
    1、打開(kāi)IntelliJ并單擊File => New => Project
    2某饰、 在左側(cè)面板中儒恋,選擇Scala。在右側(cè)面板中露乏,選擇IDEA碧浊。
    3、在出現(xiàn)的對(duì)話框中瘟仿,將項(xiàng)目命名為HelloWorld
    4、假設(shè)這是您第一次使用IntelliJ創(chuàng)建Scala項(xiàng)目比勉,則需要安裝Scala SDK劳较。在Scala SDK字段的右側(cè)驹止,單擊“ 創(chuàng)建”按鈕。如果本地已經(jīng)有scala運(yùn)行環(huán)境观蜗,選擇所在的目錄即可臊恋;如果沒(méi)有,選擇下載墓捻。創(chuàng)建SDK并返回“新建項(xiàng)目”窗口抖仅。
    5、 單擊“ 完成”砖第。

  • 編寫(xiě)代碼
    1撤卢、在左側(cè)的“ 項(xiàng)目”窗格上,右鍵單擊src并選擇“ 新建” =>“ Scala類(lèi)”梧兼。
    2放吩、命名該類(lèi)Hello,并將Kind更改為object。
    3羽杰、將類(lèi)中的代碼更改為以下內(nèi)容:

object Hello {
   def main(args: Array[String]) {
      println("Hello, world!")
   }
}
  • 運(yùn)行程序

在左側(cè)的“ 項(xiàng)目”窗格上渡紫,右鍵單擊Hello節(jié)點(diǎn)并選擇Run'Hello'。
或在選中Hello節(jié)點(diǎn)考赛,按快捷鍵 ctrl+shift+F10 可運(yùn)行程序惕澎。

(二)使用SBT

sbt是類(lèi)似ANT、MAVEN的構(gòu)建工具颜骤,全稱(chēng)為Simple build tool唧喉,是Scala事實(shí)上的標(biāo)準(zhǔn)構(gòu)建工具。其主要特性有:

  • 原生支持編譯Scala代碼和與諸多Scala測(cè)試框架進(jìn)行交互复哆;
  • 使用Scala編寫(xiě)的DSL(領(lǐng)域特定語(yǔ)言)構(gòu)建描述
  • 使用Ivy作為庫(kù)管理工具
  • 持續(xù)編譯欣喧、測(cè)試和部署
  • 整合scala解釋器快速迭代和調(diào)試
  • 支持Java與Scala混合的項(xiàng)目

當(dāng)安裝配置好后SBT后,我們可以在命令行下使用SBT梯找,也可以在IntelliJ中使用SBT唆阿。關(guān)于SBT的詳細(xì)信息我們不在本文中介紹。

七锈锤、小結(jié)

本文并沒(méi)有對(duì)scala的語(yǔ)法進(jìn)行詳細(xì)介紹驯鳖,主要是介紹scala運(yùn)行環(huán)境和開(kāi)發(fā)工具的搭建。下面的文章是對(duì)scala語(yǔ)言的更多介紹久免。

1浅辙、《Scala學(xué)習(xí)筆記(2)-基礎(chǔ)語(yǔ)法》
2、《Scala學(xué)習(xí)筆記(3)-面向?qū)ο缶幊躺掀?/a>
3阎姥、
《Scala學(xué)習(xí)筆記(4)-面向?qū)ο缶幊滔缕?/a>
4记舆、
《Scala學(xué)習(xí)筆記(5)-函數(shù)式編程》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呼巴,隨后出現(xiàn)的幾起案子泽腮,更是在濱河造成了極大的恐慌御蒲,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诊赊,死亡現(xiàn)場(chǎng)離奇詭異厚满,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碧磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)碘箍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人鲸郊,你說(shuō)我怎么就攤上這事丰榴。” “怎么了严望?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵多艇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我像吻,道長(zhǎng)峻黍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任拨匆,我火速辦了婚禮姆涩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惭每。我一直安慰自己骨饿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布台腥。 她就那樣靜靜地躺著宏赘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪黎侈。 梳的紋絲不亂的頭發(fā)上察署,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音峻汉,去河邊找鬼贴汪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛休吠,可吹牛的內(nèi)容都是我干的扳埂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瘤礁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼阳懂!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤希太,失蹤者是張志新(化名)和其女友劉穎克饶,沒(méi)想到半個(gè)月后酝蜒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體誊辉,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年亡脑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堕澄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霉咨,死狀恐怖蛙紫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情途戒,我是刑警寧澤坑傅,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站喷斋,受9級(jí)特大地震影響唁毒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜星爪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一浆西、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顽腾,春花似錦近零、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漓摩,卻和暖如春裙士,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背幌甘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工潮售, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锅风。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓酥诽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親皱埠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肮帐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊閱讀 18,334評(píng)論 0 85
  • TITLE: 編程語(yǔ)言亂燉 碼農(nóng)最大的煩惱——編程語(yǔ)言太多莹菱。不是我不學(xué)習(xí),這世界變化快靶擦! 有時(shí)候還是蠻懷念十幾醉旦、二...
    碼園老農(nóng)閱讀 5,331評(píng)論 2 35
  • Scala語(yǔ)法 至于scala語(yǔ)法而言,大致上和Java的語(yǔ)法類(lèi)似恒界,增加了一些函數(shù)式編程睦刃,具體語(yǔ)法可以參考Scal...
    卡卡xx閱讀 2,840評(píng)論 0 1
  • 前言 最開(kāi)始接觸 Play Framework 是從 Android 開(kāi)發(fā)轉(zhuǎn)型為 Java 后端開(kāi)發(fā),公司有現(xiàn)成的...
    mrzhqiang閱讀 13,183評(píng)論 5 11
  • 寶貝十酣, 一切的物質(zhì)只是讓靈魂升華工具涩拙。 而不是束縛靈魂的枷鎖! 邁開(kāi)步子往前走吧! 管它 沼澤還是沙漠,我會(huì)用我最...
    summerwhatever閱讀 169評(píng)論 0 2