欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:后端 Scala的基礎(chǔ)

柚子快報(bào)激活碼778899分享:后端 Scala的基礎(chǔ)

http://yzkb.51969.com/

目錄

1.什么是Scala

2.安裝Scala

3.Scala基礎(chǔ)

4.數(shù)據(jù)類型

5.方法與函數(shù)

5.1.方法的定義使用def關(guān)鍵字,語法:

5.2.函數(shù)

6.抽象類和特質(zhì)

1.什么是Scala

????????Scala是一種將面向?qū)ο蠛秃瘮?shù)式編程結(jié)合在一起的高級語言,設(shè)計(jì)初衷是要集成面向?qū)ο缶幊毯秃瘮?shù)式編程的各種特性,旨在以簡潔、優(yōu)雅和類型安全的方式表達(dá)通用編程模式。Scala功能強(qiáng)大,不僅可以編寫簡單腳本,還可以構(gòu)建大型系統(tǒng)。

????????由于Spark主要是由Scala語言編寫的,為了后續(xù)更好的學(xué)習(xí)Spark以及使用Scala編寫Spark應(yīng)用程序,需要首先學(xué)習(xí)使用Scala語言。

2.安裝Scala

????????由于Scala運(yùn)行于Java平臺,因此安裝Scala之前需要確保系統(tǒng)安裝了JDK。此處使用的Scala版本為2.12.7,要求JDK版本為1.8。

Scala 依賴 jdk,jdk 下載:Java Downloads | Oracle

Sclal下載:https://www.scala-sbt.org/download.html

解壓到指定目錄:

$ tar -zxvf scala-2.12.7.tgz -C /opt/modules/

配置環(huán)境變量:?

export SCALA_HOME=/opt/modules/scala-2.12.7/

export PATH=$PATH:$SCALA_HOME/bin

3.Scala基礎(chǔ)

????????最初學(xué)習(xí)Scala的時(shí)候建議在Scala命令行模式中操作,最終程序的編寫可以在IDE中進(jìn)行。在Windows CMD窗口中或CentOS的Shell命令中執(zhí)行“scala”命令,即可進(jìn)入Scala的命令行操作模式。

4.數(shù)據(jù)類型

????????Any是Scala類層次結(jié)構(gòu)的根,也被稱為超類或頂級類。Scala執(zhí)行環(huán)境中的每個(gè)類都直接或間接地從該類繼承。該類中定義了一些通用的方法,例如equals()、hashCode()和toString()。Any有兩個(gè)直接子類:AnyVal和AnyRef。 AnyVal表示值類型。有9種預(yù)定義的值類型,它們是非空的Double、Float、Long、Int、Short、Byte、Char、Unit和Boolean。Unit是一個(gè)不包含任何信息的值類型,和Java語言中的void等同,用作不返回任何結(jié)果的方法的結(jié)果類型。Unit只有一個(gè)實(shí)例值,寫成()。 AnyRef表示引用類型。所有非值類型都被定義為引用類型。Scala中的每個(gè)用戶定義類型都是AnyRef的子類型。AnyRef對應(yīng)于Java中的Java.lang.Object。 Nothing是所有類型的子類,在Scala類層級的最低端。Nothing沒有對象,因此沒有具體值,但是可以用來定義一個(gè)空類型,類似于Java中的標(biāo)示性接口(如:Serializable,用來標(biāo)識該類可以進(jìn)行序列化)。舉個(gè)例子,如果一個(gè)方法拋出異常,則異常的返回值類型就是Nothing(雖然不會返回)。 Null是所有引用類型(AnyRef)的子類,所以Null可以賦值給所有的引用類型,但不能賦值給值類型,這個(gè)和Java的語義是相同的。Null有一個(gè)唯一的單例值null。

5.方法與函數(shù)

Scala中有方法與函數(shù)。Scala 方法是類或?qū)ο笾卸x的成員,而函數(shù)是一個(gè)對象,可以將函數(shù)賦值給一個(gè)變量。換句話說,方法是函數(shù)的特殊形式。

5.1.方法的定義使用def關(guān)鍵字,語法:

def 方法名 (參數(shù)列表):返回類型={

方法體

}

例如,將兩個(gè)數(shù)字求和然后返回,返回類型為Int:

def addNum( a:Int, b:Int ) : Int = {

var sum = 0

sum = a + b

return sum

}

代碼簡寫,去掉返回類型和return關(guān)鍵字:

def addNum( a:Int, b:Int ) = {

var sum = 0

sum = a + b

sum

如果方法沒有返回結(jié)果,可以將返回類型設(shè)置為Unit,類似Java中的void:

def addNum( a:Int, b:Int ) : Unit = {

var sum = 0

sum = a + b

println(sum)

}

在定義方法參數(shù)時(shí),可以為某個(gè)參數(shù)指定默認(rèn)值,在方法被調(diào)用時(shí)可以不為帶有默認(rèn)值的參數(shù)傳入實(shí)參:

def addNum( a:Int=5, b:Int ) = {

var sum = 0

sum = a + b

sum

}

5.2.函數(shù)

函數(shù)的定義與方法不一樣,語法:

(參數(shù)列表)=>函數(shù)體

定義一個(gè)匿名函數(shù),參數(shù)為a和b,且都是Int類型,函數(shù)體為a+b:

( a:Int, b:Int ) =>a+b

如果函數(shù)體有多行,可以將函數(shù)體放入一對{}中,并且可以通過一個(gè)變量來引用函數(shù),變量相當(dāng)于函數(shù)名稱:

val f1=( a:Int, b:Int ) =>{ a+b }

對上述函數(shù)進(jìn)行調(diào)用:

f1(1,2)

函數(shù)也可以沒有參數(shù):

val f2=( ) =>println("hello scala")

對上述函數(shù)進(jìn)行調(diào)用:

f2()

定義一個(gè)方法m1,參數(shù)f要求是一個(gè)函數(shù),該函數(shù)有兩個(gè)Int類型參數(shù),且函數(shù)的返回類型為Int,方法體中直接調(diào)用該函數(shù):

def m1(f: (Int, Int) => Int): Int = {

f(2, 6)

}

定義一個(gè)函數(shù)f1:

val f1 = (x: Int, y: Int) => x + y

調(diào)用方法m1,并傳入函數(shù)f1:

val res = m1(f1)

println(res)

輸出結(jié)果為8。

當(dāng)把一個(gè)方法作為參數(shù)傳遞給其它的方法或者函數(shù)時(shí),系統(tǒng)將自動將該方法轉(zhuǎn)換為函數(shù)。

例如,有一個(gè)方法m2:

def m2(x:Int,y:Int) = x+y

調(diào)用(2)中的m1方法,并將m2作為參數(shù)傳入,此時(shí)系統(tǒng)會自動將m2方法轉(zhuǎn)為函數(shù):

val res = m1(m2)

println(res)

輸出結(jié)果為8。

除了系統(tǒng)自動轉(zhuǎn)換外,也可以手動進(jìn)行轉(zhuǎn)換。在方法名稱后加入一個(gè)空格和一個(gè)下劃線,即可將方法轉(zhuǎn)換為函數(shù):

val f2=m2 _

val res=m1(f2)

println(res)

輸出結(jié)果為8。

6.抽象類和特質(zhì)

Scala的抽象類使用關(guān)鍵字abstract定義,具有以下特征:

抽象類不能被實(shí)例化。抽象類中可以定義抽象字段(沒有初始化的字段)和抽象方法(沒有被實(shí)現(xiàn)的方法),也可以定義被初始化的字段和被實(shí)現(xiàn)的方法。若某個(gè)子類繼承了一個(gè)抽象類,則必須實(shí)現(xiàn)抽象類中的抽象字段和抽象方法。且實(shí)現(xiàn)的過程中可以添加override關(guān)鍵字也可以省略。若重寫了抽象類中已經(jīng)實(shí)現(xiàn)的方法,則必須添加override關(guān)鍵字。

定義一個(gè)抽象類Person:

abstract class Person {

var name:String //抽象字段

var age:Int

var address:String="北京" //普通字段

def speak() //抽象方法

def eat():Unit={ //普通方法

println("吃東西")

}

}

定義一個(gè)普通類Teacher,并繼承抽象類Person,實(shí)現(xiàn)Person中的抽象字段和抽象方法,并重寫方法eat():

//繼承了抽象類Person

class Teacher extends Person{

//實(shí)現(xiàn)抽象字段

var name: String = "王麗"

var age: Int = 28

//實(shí)現(xiàn)抽象方法

def speak(): Unit = {

println("姓名:"+this.name)

println("年齡:"+this.age)

println("地址:"+this.address)//繼承而來

println("擅長講課")

}

//重寫非抽象方法,必須添加override關(guān)鍵字

override def eat():Unit={

println("愛吃中餐")

}

}

Scala特質(zhì)使用關(guān)鍵字trait定義,類似Java中使用interface定義的接口。特質(zhì)除了有Java接口的功能外,還有一些特殊的功能。

定義了一個(gè)特質(zhì)Pet:

//定義特質(zhì)(寵物)

trait Pet {

var name:String //抽象字段

var age:Int

def run //抽象方法

def eat: Unit ={ //非抽象方法

println("吃東西")

}

}

定義一個(gè)普通類Cat,實(shí)現(xiàn)了上述特質(zhì)Pet(必須實(shí)現(xiàn)未實(shí)現(xiàn)的字段和方法):

class Cat extends Pet

var name:String="john" { //實(shí)現(xiàn)抽象字段

var age:Int=3

def run: Unit = {//實(shí)現(xiàn)抽象方法

println("會跑")

}

override def eat: Unit ={ //重寫非抽象方法

println("吃魚")

}

}

若需要實(shí)現(xiàn)多個(gè)特質(zhì),可以通過with關(guān)鍵字添加額外特質(zhì),但位于最左側(cè)的特質(zhì)必須使用extends關(guān)鍵字:

trait Animal{

}

trait Runable{

}

//類Dog實(shí)現(xiàn)了三個(gè)特質(zhì)

class Dog extends Pet with Animal with Runable{

柚子快報(bào)激活碼778899分享:后端 Scala的基礎(chǔ)

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19491081.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄