1. 程式人生 > >scala入門總結一

scala入門總結一

scala不把程式設計師當傻子,專門為程式設計師寫的,java,Python卻限制了程式設計師的發揮,讓他們寫同樣水平的程式碼,只是老手新手碼的速度有快慢而已。
Twitter找到ruby的團隊,說我有些需求你能不能幫我做到,ruby拒絕了Twitter的請求,因為這會增加語言的複雜度。
而python立志要做一個簡單語言。

一、scala下載及安裝 

1、官網scala-lang.org下載最新版安裝包,需先安裝jdk,版本最好1.8
spark官網spack.apache.org上說Spark runs on Java 7+,. For the Scala API, Spark 2.0.2 uses Scala 2.11,所以下載高版本的,目前最新版2.12
2、解壓安裝,路徑中不能帶空格,配置環境變數SCALA_HOME,配置Path,
3、開啟cmd,敲入scala,若能顯示相關資訊,表名安裝成功。
二、開發工具
scala.ide.org下載最新版。也可以用idea,據說支援的特別好。
三、入門
1、定義一個變數,Scala有兩種變數,val和var。val就不能再賦值了。與之對應的,var可以在它生命週期中被多次賦值。

//與java final關鍵字宣告的變數一樣,Scala會幫我們進行型別推斷
 val helloString="Hello World"
2、lazy val helloString="Hello Crazy World"

3、函式初步

def add(a:Int,b:Int):Int={return a+b}
//return最好不用,這樣可以保證函式是清真的,哈哈,數學上函式的定義是這樣的:f(x,y)=x+y
def add(a:Int,b:Int)={a+b}
//Scala中的物件比較不同於Java中的物件比較
//Scala基於內容比較,而java中比較的是引用,進行內容比較時須定義比較方法
val x="Hello"
val y="Hello"
x==y

//程式中的<-被稱生成器(generator)
1 to 10
會建立一個長度為10的陣列列表
for(i <- res25) println("value is "+i)

也可直接簡寫成 for(i <- 1 to 5) println("value is "+i)
如果需要過濾條件 
for(i <- 1 to 5 
if i>3
)println(i)

4、定長陣列:

val numberArray=new Array[Int](10),numberArray(0)="xiaoyu"
var strArr = Array("gangdan","yuer")
5、變長陣列:ArrayBuffer
//+=後面可以跟多個元素的集合
val strArrayVar=ArrayBuffer[String]()
跟單個元素 strArrayVar+="Hello"
跟多個元素 strArrayVar+=("World","Programmer")
//++=用於向陣列中追加內容,++=右側可以是任何集合
strArrayVar++=Array("Wllcome","To","XueTuWuYou")
strArrayVar++=List("Wellcome","To","XueTuWuYou")
//刪除末尾n個元素 strArrayVar.trimEnd(3)

6、對陣列的操作

var intArrayVar=ArrayBuffer(1,1,2)
intArrayVar.insert(0,6)
intArrayVar.insert(0,7,8,9)
intArrayVar.remove(0,4) //從0開始移除4個元素
intArrayVar.toArray //轉化成定長陣列
res78.toBuffer //轉化成ArrayBuffer

7、陣列迴圈

for(i <- 0 until intArrayVar.length) println("Array Element: " +intArrayVar(i))//對陣列的迴圈
//陣列方式(推薦使用)
for(i <- intArrayVar) println("Array Element: " + i)
//倒序輸出
for(i <- intArrayVar.reverse) println("Array Element: " + i)
//陣列轉換
var intArrayVar2=for(i <- intArrayVar) yield i*2 //每個數都翻倍
 var intArrayNoBuffer2=for(i <- intArrayNoBuffer if i>=2) yield i*2 //篩選後,乘以2

8、對陣列的操作API

intArr.sum
intArr.max
intArr.min
intArr.toString()
intArr.mkString(",") //轉換為,為分隔符的字串,String = 34,1,2,3

9、多維陣列

var multiArr  = Array(Array(1,2,3,4),Array(5,6,7,8))
for(i <- multiArr)println(i.mkString(" "))

10、list

//List連線操作
List(1,2,3):::List(4,5,6)
//取除最後一個元素外的元素,返回的是列表
nums.init
//取列表最後一個元素
nums.last
//列表元素倒置
nums.reverse
//list.flatten,將列表平滑成第一個無素
//列表連線
List.concat(List('a', 'b'), List('c'))