Scala快速入門 - 基礎語法篇

本篇文章首發於頭條號Scala快速入門 - 基礎語法篇,歡迎關注個人頭條號和微信公衆號「大數據技術和人工智能」(微信搜索bigdata_ai_tech)獲取更多幹貨,也歡迎關注個人CSDN博客java


Scala是一門多範式編程語言,集成了面向對象和函數式語言的特性。本篇文章將以代碼示例的形式簡單介紹一下Scala語言的基礎語法。編程

聲明值和變量

// val聲明的變量是不可變的
val str1 = "Hello World!"
val str2 : String = "Hello World!"
val str3 : java.lang.String = "Hello World!"

println(str1)
println(str2)
println(str3)

// var聲明的變量是可變的
var str5 = "Hello World!"
str5 = "str5 Hello World!"

println(str5)

基本數據類型

Scala的數據類型包括:Byte、Char、Short、Int、Long、Float、Double和Boolean。在Scala中,這些類型都是「類」,而且都是包scala的成員,好比,Int的全名是scala.Int。對於字符串,Scala用java.lang.String類來表示字符串。
Scala的字面量包括:整數字面量、浮點數字面量、布爾型字面量、字符字面量、字符串字面量、符號字面量、函數字面量和元組字面量。舉例以下:數組

val i = 123      //123就是整數字面量
val i = 3.14     //3.14就是浮點數字面量
val i = true     //true就是布爾型字面量
val i = 'A'      //'A'就是字符字面量
val i = "Hello"  //"Hello"就是字符串字面量

// Scala容許對「字面量」直接執行方法
5.toString()            //產生字符串"5"
"abc".intersect("bcd")  //輸出"bc"

操做符

Scala的經常使用操做符:加(+)、減(-) 、乘(*) 、除(/) 、餘數(%)、大於(>)、小於(<)、大於等於(>=)和小於等於(<=)等,這些操做符就是方法。
Scala的操做符就是方法,a 方法 ba.方法(b)是等價的,前者是後者的簡寫形式,這裏的+是方法名,是Int類中的一個方法。微信

// 下面三種寫法的輸出結果都是8
val sum1 = 5 + 3
val sum2 = (5).+(3)
val sum2 = 5.+(3)

控制結構

if條件表達式

val x = 6
if (x > 0) {
    println("x = " + x)
} else {
    println("x = " + x)
}

val x = 3
if (x > 0) {
    println("x = " + x)
} else if (x == 0) {
    println("x = 0")
} else {
    println("x = " + x)
}

// Scala中的if表達式的值能夠賦值給變量
val a = if (x > 0) 1 else -1

while循環

var i = 9
while (i > 0) {
    i -= 1
    printf("i is %d\n", i)
}

var i = 0
do {
    i += 1
    println(i)
} while (i < 5)

for循環

// for Range
// Range能夠是一個數字區間表示 i to j ,或者 i until j,左箭頭 <- 用於爲變量 x 賦值。
for (a <- 1 to 10) {
   println("a = " + a);
}
for (a <- 1 until 10) {
   println("a = " + a);
}
for( a <- 1 to 3; b <- 1 to 3){
   println( "a = " + a );
   println( "Value of b: " + b );
}

// 循環集合
var a = 0;
val numList = List(1, 2, 3, 4, 5, 6);
for (a <- numList) {
   println("a = " + a);
}

// 循環過濾
var a = 0;
val numList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
for (a <- numList if a != 3; if a < 8) {
   println("a = " + a);
}

// 使用yield
// 大括號中用於保存變量和條件,retVal是變量,循環中的yield會把當前的元素記下來,保存在集合中,循環結束後將返回該集合。
var a = 0;
val numList = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
var retVal = for {
    a <- numList if a != 3; if a < 8
} yield a
for(a <- retVal) {
   println("a = " + a);
}

數組

定長數組,就是長度不變的數組,在Scala中使用Array進行聲明,以下:

//聲明一個長度爲3的整型數組,每一個數組元素初始化爲0
val intValueArr = new Array[Int](3)
//在Scala中,對數組元素的應用,是使用圓括號,而不是方括號,也就是使用intValueArr(0),而不是intValueArr[0],這個和Java是不一樣的。
intValueArr(0) = 12
intValueArr(1) = 45
intValueArr(2) = 33

//聲明一個長度爲3的字符串數組,每一個數組元素初始化爲null
val strArr = new Array[String](3)
strArr(0) = "Flink"
strArr(1) = "Storm"
strArr(2) = "Spark"
for (i <- 0 to 2) println(strArr(i)) 

//Scala提供了更加簡潔的數組聲明和初始化方法,以下:
val intValueArr = Array(12, 45, 33)
val strArr = Array("Flink", "Storm", "Spark")
//從上面代碼能夠看出,都不須要給出數組類型,Scala會自動根據提供的初始化數據來推斷出數組的類型。

可變數組

可變數組須要導入包scala.collection.mutable.ArrayBufferapp

//導入ArrayBuffer包
import scala.collection.mutable.ArrayBuffer

//定義一個可變的數組
val arr : ArrayBuffer[String] = new ArrayBuffer[String]()

//在末尾添加一個元素
arr += "Hadoop"
//在末尾添加多個元素
arr += ("Hive", "Hbase")
//在末尾添加一個集合
arr ++= ArrayBuffer("Scala", "Java")
//在指定位置添加元素
arr(1) = "spark"
arr.insert(1, "Flume")
arr.insert(1, "Kafka", "Kylin")
arr.insertAll(1, ArrayBuffer("Hello", "World"))
println(arr)

//更新元素
arr(1) = "insistent"
arr.update(2, "Java")
println(arr)

//獲取指定元素
println(arr(1))
println(arr.apply(2))
println(arr.take(3))

//刪除元素
arr -= "insistent"
//刪除集合
arr -= ("Java", "Kafka")
arr.remove(1)
//從1處開始刪掉三個
arr.remove(1, 3)
//從前日後移除n個元素
arr.trimStart(1)
//從後往前移除n個元素
arr.trimEnd(1)
println(arr)

//遍歷數組
for (i <- arr) {
  print(i + " ")
}

//變長數組轉成定長數組
arr.toArray
//定長數組轉成變長數組
array.toBuffer
相關文章
相關標籤/搜索