第一章 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) 為目标運作環境并将![]()
大資料技術之_16_Scala學習_01_Scala 語言概述 和
面向對象
的最佳特性結合在一起的
函數式程式設計
。(運作之前一定知道類型是什麼)
靜态類型程式設計語言
1.3 Scala 和 Java 以及 jvm 的關系分析圖
一般來說,學 Scala 的人,都會 Java,而 Scala 是基于 Java 的,是以我們需要将 Scala 和 Java 以及 JVM 之間的關系搞清楚,否則學習 Scala 你會蒙圈。
建議:如果沒有任何 Java 基礎的同學,先學 Java,至少要學習 JavaSE,再學習 Scala。
我們分析一下:Scala 和 Java 以及 jvm 的關系 (重要!!!)
![]()
大資料技術之_16_Scala學習_01_Scala 語言概述
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_HOMEexport SCALA_HOME=/opt/module/scala/scala-2.11.8export 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 的開發。
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 就可以看到運作效果。
注意
:通過 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 類似。但是語句後面不需要加上分号。
- 簡述:在配置環境、編譯、運作各個步驟中常見的錯誤。
Copyright ©2018-2019
【轉載文章務必保留出處和署名,謝謝!】