本篇文章首發於頭條號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 方法 b
和a.方法(b)
是等價的,前者是後者的簡寫形式,這裏的+
是方法名,是Int類中的一個方法。微信
// 下面三種寫法的輸出結果都是8 val sum1 = 5 + 3 val sum2 = (5).+(3) val sum2 = 5.+(3)
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
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 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); }
//聲明一個長度爲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