第一章 Scala 語言概述1.1 why is Scala 語言?1.2 Scala 語言誕生小故事1.3 Scala 和 Java 以及 jvm 的關系分析圖1.4 Scala 語言的特點1.5 Windows 下搭建 Scala 開發環境1.6 Linux 下搭建 Scala 開發環境1.7 Scala 的開發工具1.7.1 IDEA介紹1.7.2 Scala 插件安裝1.8 Scala 的開發快速入門1.8.1 windows 下開發步驟1.8.2 linux 下開發步驟1.8.3 IDEA 下開發步驟1.8.4 使用 java 寫一段模擬代碼,來模擬 scala 的執行流程1.8.5 Scala 執行流程分析1.8.6 Scala 程序開發注意事項(重點)1.9 Scala 語言轉義字符1.10 Scala 語言輸出的三種方式1.11 Scala 源碼的查看的關聯1.12 注釋1.12.1 介紹1.12.2 Scala 中的注釋類型1.12.3 文檔注釋案例1.12.4 scala 的代碼規范說明1.12.5 正確的注釋和注釋風格1.12.6 正確的縮進和空白1.12.7 Scala 官方編程指南1.13 本章知識回顧
第一章 Scala 語言概述
1.1 why is Scala 語言?
1、Spark--新一代
內存級大數據計算框架,是大數據的重要內容。
2、Spark 就是使用 Scala 編寫的。因此為了更好的學習 Spark, 需要掌握 Scala 這門語言。
3、Scala 是 Scalable Language 的簡寫,是一門多范式(范式=編程方式[面向對象/函數式編程])的編程語言。
4、聯邦理工學院洛桑(EPFL)的 Martin Odersky(馬丁·奧德斯基) 於 2001 年開始設計 Scala(斯卡拉)。
5、Spark 的興起,帶動 Scala 語言的發展!
1.2 Scala 語言誕生小故事
創始人馬丁·奧德斯基 (Martin Odersky) 是編譯器及編程的狂熱愛好者,長時間的編程之后,希望發明一種語言,能夠讓寫程序這樣的基礎工作變得高效、簡單。所以當接觸到 JAVA 語言后,對 JAVA 這門便攜式、運行在網絡、且存在垃圾回收的語言產生了極大的興趣,所以決定將函數式編程語言的特點融合到 JAVA 中,由此發明了兩種語言(Pizza & Scala)。 (大量使用遞歸)
jdk5.0 的泛型、for 循環增強,、自動類型轉換等,都是從 Pizza 引入的新特性。
jdk8.0 的類型推斷、Lambda 表達式 就是從 scala 引入的特性。
Pizza 和 Scala 極大地推動了 Java 編程語言的發展。[如何理解?]
且現在主流 JVM 的 javac 編譯器就是 馬丁·奧德斯基 編寫出來的。並被 JAVA 編程人員廣泛的使用,所以 Scala 語言起源於 Java,卻推動着 Java 的發展,它們是相輔相成的。Jdk5.0、Jdk8.0 的編譯器就是 馬丁·奧德斯基 寫的,因此 馬丁·奧德斯基 是一個人的戰斗力抵得上一個 Java 開發團隊。
![]()
正是基於上面的原因,所以 Scala 源代碼 (.scala) 會被編譯成 Java 字節碼 (.class),然后運行於 JVM 之上,並可以調用現有的 Java 類庫,實現兩種語言的無縫對接,因此,對於已經掌握 JAVA 語言的我們來講,學習起來一定會略顯輕松。
Scala 是一門以 java 虛擬機(JVM) 為目標運行環境並將面向對象和函數式編程的最佳特性結合在一起的靜態類型編程語言。(運行之前一定知道類型是什么)
1.3 Scala 和 Java 以及 jvm 的關系分析圖
一般來說,學 Scala 的人,都會 Java,而 Scala 是基於 Java 的,因此我們需要將 Scala 和 Java 以及 JVM 之間的關系搞清楚,否則學習 Scala 你會蒙圈。
建議:如果沒有任何 Java 基礎的同學,先學 Java,至少要學習 JavaSE,再學習 Scala。
我們分析一下:Scala 和 Java 以及 jvm 的關系 (重要!!!)
![]()
1.4 Scala 語言的特點
Scala 是一門以 java 虛擬機(JVM) 為運行環境並將
面向對象和函數式編程的最佳特性結合在一起的靜態類型編程語言(編譯型語言)。(動態類型語言:javascript、python、php 解釋型語言)
Scala 是一門多范式 (multi-paradigm) 的編程語言,Scala 支持面向對象和函數式編程。
Scala 源代碼 (.scala) 會被編譯成 Java 字節碼 (.class),然后運行於 JVM 之上,並可以調用現有的 Java 類庫,實現兩種語言的無縫對接。[案例演示]
scala 單作為一門語言來看,非常的簡潔高效。[對 三元運算,++,-- 等進行簡化]
Scala 在設計時,馬丁·奧德斯基 是參考了 Java 的設計思想,可以說 Scala 是源於 java,同時 馬丁·奧德斯基 也加入了自己的思想,將函數式編程語言的特點融合到 JAVA 中, 因此,對於學習過 Java 的同學,只要在學習 Scala 的過程中,搞清楚 Scala 和 java 相同點和不同點,就可以快速的掌握 Scala 這門語言。
快速有效掌握 Scala 的建議 [1、學習 scala 特有的語法。2、搞清楚 scala 和 java 區別。 3、如何規范的使用 scala。]
1.5 Windows 下搭建 Scala 開發環境
安裝&配置
1、Scala 需要 Java 運行時庫,安裝 Scala 需要首先安裝 JVM 虛擬機並配置好,推薦安裝 JDK1.8。
2、在 http://www.scala-lang.org/ 下載 Scala2.11.8 程序安裝包
3、配置 Jdk 的環境變量
4、配置 SCALA_HOME,SCALA_HOME= D:\program\scala-2.11.8
5、將 Scala 安裝目錄下的 bin 目錄加入到 PATH 環境變量,在 PATH 變量中添加:%SCALA_HOME%\bin
6、在終端中輸入 “scala” 命令打開 scala 解釋器
1、
2、
3、
1.6 Linux 下搭建 Scala 開發環境
在實際開發中,我們的項目是部署到 linux 上,因此,我們需要在 Linux 下搭建 scala 的環境。Linux 下安裝 Scala 的原理機制一樣,操作的具體步驟:
1、下載對應的 scala 的安裝軟件 scala-2.11.8.tgz
2、通過遠程登錄工具,將安裝軟件上傳到對應的 Linux 系統(xshell6 和 xftp6)
3、mkdir /opt/module/scala 創建目錄
4、解壓:$ tar -zvxf /opt/software/scala-2.11.8.tgz -C /opt/module/scala/
5、配置環境變量 vim /etc/profile
在該文件中配置 scala 的 bin 目錄 /opt/module/scala/scala-2.11.8/bin
#SCALA_HOME
export SCALA_HOME=/opt/module/scala/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin
6、使配置文件生效 source /etc/profile
7、測試,命令:scala
Scala 的 REPL:
上面打開的 scala 命令行窗口,我們稱之為 REPL,是指:Read Evaluation Print Loop,也稱之為交互式解釋器。類似於 MySQL 的默認客戶端工具。在命令行窗口中輸入 scala 指令代碼時,解釋器會讀取指令代碼並計算(Evaluation)對應的值,然后將結果打印(Print)出來,接着循環等待用戶輸入指令(Loop)。
從技術上講,這里其實並不是一個解釋器,而是指令代碼被快速的編譯成 Java 字節碼並被 JVM 加載執行。最終將執行結果輸出到命令行中。
1.7 Scala 的開發工具
1.7.1 IDEA介紹
IDEA 全稱 IntelliJ IDEA,是用於 java 語言開發的集成環境(也可用於其他語言),IntelliJ 在業界被公認為最好的 java 開發工具之一。IDEA 是 JetBrains 公司的產品,這家公司總部位於捷克共和國的首都布拉格。
java 開發工具很多,比如 netbean、eclipse 等等,單開發 Scala 可選的工具不多,主要使用 IDEA。
Idea 工具開發 Scala 的快捷鍵也不是很多,所以使用相對比較簡單。
IDEA 不是專門用於開發 Scala 的 IDE,但是確是最適合開發 Scala 的工具,因為在我們實際工作中,大部分是開發項目,而大數據項目不可避免的會使用到 Java, 所以會進行 Java 和 Scala 兩種語言的混合編程。 而 Idea 可以很好的支持 Java 和 Scala 的開發。
IDEA 的安裝與配置詳解:https://www.cnblogs.com/chenmingjun/p/10290183.html
1.7.2 Scala 插件安裝
默認情況下 IDEA 不支持 Scala 的開發,需要安裝 Scala 插件。
操作的具體步驟:
1、下載插件:scala-intellij-bin-2017.2.6.zip,下載地址:https://plugins.jetbrains.com/plugin/1347-scala,找到對應的版本
2、建議該插件文件放到 scala 的安裝目錄,我們新建文件夾 /plugin,方便我們管理
3、將插件安裝到 idea
4、打開 idea,先找到安裝插件的位置 File -> Settings -> Plugins -> Installplugin from disk… -> 選擇插件的路徑 -> OK -> OK
5、點擊 OK,重啟 idea
1.8 Scala 的開發快速入門
需求說明:要求開發一個 Hello.scala 程序,可以輸出 “hello world!" [對 scala 程序基本結構說明]。
1.8.1 windows 下開發步驟
步驟如下:
1、可以直接使用文本開發工具[Sublime Text 3]。
2、將 Scala 代碼編寫到擴展名為 HelloScala.scala 的文件中。[ 說明: 比如將源碼在目錄 D:\demo\ScalaDemo 下 ]
3、通過 scalac 命令對該 scala 文件進行編譯,生成 .class 文件。[和javac類似]
4、命令行下執行 scala HelloScala 就可以看到運行效果。
5、注意:scala HelloScala 命令可以直接運行 HelloScala.scala 程序。[內部會有編譯和運行過程]
效果截圖:
對 scala 程序基本結構說明:
1.8.2 linux 下開發步驟
步驟如下:
1、直接使用 vim 開發,一個遍歷數組的案例。
2、將 Scala 代碼編寫到擴展名為 HelloScala.scala 的文件中。[代碼說明]
3、通過 scala 命令對該 scala 文件進行編譯,生成 .class 字節碼文件。
4、在終端執行 scala HelloScala 就可以看到運行效果。
5、注意:通過 scala HelloScala 命令可以直接運行 HelloScala.scala 程序。
代碼如下:
/**
* 只要以后看到 object HelloScala,我們就應該有如下認識:
* 1、object HelloScala 對應的是一個 HelloScala$ 類型的靜態對象 MODULE$。
* 2、object HelloScala 在程序運行中是單例存在的。
*/
object HelloScala {
def main(args: Array[String]): Unit = {
println("hello scala")
}
}
1.8.3 IDEA 下開發步驟
使用文本工具開發項目可以很好的理解運行原理,但是不利於開發綜合項目,所以在實際開發中我們要使用 Idea 來開發。
步驟如下:
1、新建一個 Maven 工程,在工程的 main 目錄下新建一個 scala 文件夾,將該文件夾標記為【源碼文件夾】,方便管理。右鍵 scala -> Mark Directory as -> Sources Root
2、默認情況下,不能寫 scala 程序,需要我們引入 scala 框架(即將該工程關聯上 scala),選中該項目右鍵 -> Add Framework Support… -> 勾選左側 Scala -> 指定 Scala 安裝的主目錄 -> OK。
3、在 scala 文件夾上右擊,選擇新建一個 Scala 類,勾選 Kind 為 Object,如下圖所示:
4、開發一個 HelloScala.scala 程序。
5、運行后,就可以看到輸出。
1.8.4 使用 java 寫一段模擬代碼,來模擬 scala 的執行流程
代碼如下:
package com.atguigu.chapter01.Test;
/**
* @author chenmingjun
* 2019-03-22 18:25
*/
/**
* 可以理解我們在 main 中寫的代碼放在 HelloScala$ 的 mian 里,即 scala 在底層運行的時候,編譯器做了一個包裝。
*/
public class HelloScala {
public static void main(String[] paramArrayOfString) {
HelloScala$.MODULE$.main(paramArrayOfString);
}
}
final class HelloScala$ {
public static final HelloScala$ MODULE$;
static {
MODULE$ = new HelloScala$();
}
public void main(String[] args) {
System.out.println("hello scala");
}
}
1.8.5 Scala 執行流程分析
1.8.6 Scala 程序開發注意事項(重點)
注意事項:
1、Scala 源文件以 “.scala" 為擴展名。
2、Scala 程序的執行入口是 main() 函數。
3、Scala 語言嚴格區分大小寫。
4、Scala 方法由一條條語句構成,每個語句后不需要分號(Scala 語言會在每行后自動加分號),這也體現出 Scala 的簡潔性。
5、如果在同一行有多條語句,除了最后一條語句不需要分號,其它語句需要分號。
1.9 Scala 語言轉義字符
\t :一個制表位,實現對齊的功能
\n :換行符
\\ :一個\
\" :一個"
\r :一個回車 println("hello\rk");
1.10 Scala 語言輸出的三種方式
1、字符串通過+號連接(類似java)。
2、printf 用法(類似C語言)字符串通過 % 傳值。
3、字符串通過 $ 引用(類似PHP)。
示例代碼:
package com.atguigu.chapter01
/**
* @author chenmingjun
* 2019-03-22 19:14
*/
object PrintDemo {
def main(args: Array[String]): Unit = {
val str1: String = "hello"
val str2: String = "world"
// 連接打印
println(str1 + str2)
val name: String = "tom"
val age: Int = 10
val sal: Float = 10.67f
val height: Double = 180.75
// 格式化輸出
printf("名字=%s 年齡=%d 薪水=%.2f 身高=%.3f", name, age, sal, height)
// scala 支持使用 $ 輸出內容
println(s"個人信息如下1:\n 名字$name\n 年齡$age\n 薪水$sal\n")
// 如果字符串中出現了類似 ${age + 10} ,則表示 {} 是一個表達式
println(s"個人信息如下2:\n 名字${name}\n 年齡${age + 10}\n 薪水${sal}\n")
}
}
輸出結果:
helloworld
名字=tom 年齡=10 薪水=10.67 身高=180.750
個人信息如下1:
名字tom
年齡10
薪水10.67
個人信息如下2:
名字tom
年齡20
薪水10.67
1.11 Scala 源碼的查看的關聯
在使用 scala 過程中,為了搞清楚 scala 底層的機制,需要查看源碼,下面看看如果關聯和查看 scala 的源碼包。
1、查看源碼, 選擇要查看的方法或者類, 輸入 Ctrl + B 或者 雙擊
當我們沒關聯源碼時,會看到如下圖:
我么可以點擊 Download… 自動下載源碼,也可以手動關聯源碼。
2、手動關聯源碼
源碼包下載地址:https://www.scala-lang.org/download/2.11.8.html,修改我們下載的源碼包 scala-2.11.8.tar.gz 包名為 scala-sources-2.11.8.tar.gz,為了方便識別
步驟一:將我們的源碼包拷貝至 scala/lib 文件夾下(scala-sources-2.11.8.tar.gz),這樣為了方便管理,然后進行解壓(因為 IDEA 不識別 xxx.tar.gz 這種格式的壓縮包)
步驟二:關聯即可,點擊 Attach Sources…,選中 scala-sources-2.11.8 這個文件夾,進行關聯,最后,可以看到源碼
1.12 注釋
1.12.1 介紹
用於注解說明解釋程序的文字就是注釋,注釋提高了代碼的閱讀性。
注釋是一個程序員必須要具有的良好編程習慣。將自己的思想通過注釋先整理出來,再用代碼去體現。
1.12.2 Scala 中的注釋類型
1、單行注釋:格式:// 注釋文字
2、多行注釋:格式: /* 注釋文字 */
3、文檔注釋:注釋內容可以被工具 scaladoc 所解析,生成一套以網頁文件形式體現的該程序的說明文檔。
1.12.3 文檔注釋案例
1、打開文件所在的目錄,選中文件右鍵 -> Show in Explorer
2、在命令行窗口中輸入 scaladoc -d d:/mydoc Comment.scala 可以生成對應的文檔說明。
示例代碼如下:
package com.atguigu.chapter01
/**
* 文檔注釋案例
* @author chenmingjun
* 2019-03-23 0:22
*/
object Comment {
def main(args: Array[String]): Unit = {
println("hello world")
}
/**
* @deprecated 過期
* @example
* 輸入 n1 = 10 n2 = 20 return 30
* @param n2
* @return 求和
*/
def sum(n1: Int, n2: Int): Int = {
return n1 + n2
}
}
1.12.4 scala 的代碼規范說明
1.12.5 正確的注釋和注釋風格
查看 Scala 源碼。
1.12.6 正確的縮進和空白
1、使用一次 tab 操作,實現縮進,默認整體向右邊移動,使用 Shift + Tab 整體向左移。
2、或者使用 Ctrl + Alt + L 來進行格式化代碼。
3、運算符兩邊習慣性各加一個空格。比如:2 + 4 * 5。
4、一行最長不超過 80 個字符,超過的請使用換行展示,盡量保持格式優雅。
1.12.7 Scala 官方編程指南
API 下載地址:https://www.scala-lang.org/download/2.11.8.html
1.13 本章知識回顧
- Scala 語言的 sdk 是什么?答:Scala 的類庫。
- Scala 環境變量配置及其作用。
配置SCALA_HOME=D:\learn\Scala\scala-2.11.8
配置Path=%SCALA_HOME%\bin - Scala 程序的編寫、編譯、運行步驟是什么?能否一步執行??
編寫:就是使用工具,開發 scala 程序。
編譯:就是將 .scala 文件編譯成 .class 【命令:scalac]】。
運行:就是使用 scala 來將 .class 文件加載到 jvm 並運行,可以直接運行 .scala, 但是速度慢。【命令:scala xxx.scala】。 - Scala 程序編寫的規則。
// 規范基本上和 java 類似。但是語句后面不需要加上分號。 - 簡述:在配置環境、編譯、運行各個步驟中常見的錯誤。
