好程式設計師大資料學習路線分享spark之Scala
好程式設計師大資料學習路線分享 spark 之 Scala ,基本語法:
變數
變數的定義:不可變: val a = 2 或者 val a : Int = 2 ( 指定了資料型別 ) lazy val a : Int =2
可變: var a = 2 或者 var a : Int = 2( 指定了資料型別 )
def a = 2
定義變數不能 1. 以數字以及特殊符號( _ 除外)開頭 2. 以關鍵字( var 、 val 、 class 等)開頭
def 定義的是??
var 編譯後有 set 與 get 方 ☐ 法 所以可以重新賦值
val 編譯後只有 get 方法 所以不能再賦值了
lazy 惰性變數 , 只在該變數被呼叫的時候才例項化,而且後面只能跟 val
def 與 val 差不多 不能重新賦值 更多修飾方法
Scala 變數的型別: Any 是 scala 的頂級型別, Any 下有 AnyVal (值型別)和 AnyRef (引用型別)兩個子類
AnyVal : 它有 9 個型別,其中 7 個是指型別: Double Float Byte Int Short Long Char 和兩個非值型別: Unit Boolean
AnyRef : 是引用型別,它的子類有: List Option 或者自定義的並繼承它的 class
所有的型別都需要首字母大寫
Scala 會自動推斷型別
Scala 資料型別可以從低到高轉換 Byte-Short-Int-Long-Float-Double
Char-Int-Long-Float-Double
注意: scala 內沒有強轉
運算子
Scala 裡沒有運算子的概念,所謂的運算子其實都是方法
數學運算: + - * / : % .+ ( ) 注: x+y 與 x.+(y) 等價
關係: < <= > >= ! != ==
位運算: | & ^
如果兩個不一樣型別的變數進行運算,最終結果的型別是大的那個型別
如果想要格式化輸出: var x =5 var y = 5
var n =x + y
print(s”x+y=$n”) 輸出結果 x+y=10
當然也可以在結果前面加字串”x+y”
條件表示式
這種打出來是空,因為else 裡不是一個值,而是一個賦值語句
正常應該是 var res = if(sex == 1){“男”}else{“女”}
因為大括號裡只有一個 ‘表示式’,大括號可以省略
var res = if(sex == 1)“男”else“女”
f or 迴圈
for(i<- 1 to 10){println (i)} // 列印 1-10
for(i <- 1 until 10){println (i)} // 列印 1-9
val arr = Array(“java”,”scala”,”python”) // 定義一個陣列
for(i<- arr){println (i)} // 列印陣列內容
for(i <- 1 to 3 ;j <- 1 to 3 if(i != j)){println(i*10+j)} // 相當於雙層 for 迴圈
val arr =for(i <- 1 until 10) yield (i) // 把 0-9 迴圈出來後封裝進 arr 集合
val arr =for(i <- 1 until 10) yield (i*10)
val res2 = for(i <- arr if i%2 == 0) yield i*100 // 過濾
val arrf = bf.filter(_ %2==0).map(_ *100) // 過濾 _ 是全部資料的意思
在 scala 中不支援 break 語句,但在 scala 2.8 之後 可以利用 Breaks 方式來實現
方法
def m1(x : Int , y : Int ) : Int = {x + y} // 三種宣告方式
def m2(x:Int , y:Int) {print(x+y)}
def m3(x:Int , y:Int){x+y}
解釋: m1 是方法名 xy 是 int 型的引數 括號外的 int 是返回值型別 x+y 是方法
呼叫: m1 (3,4)
函式
val f1 = (x:Int , y:Int) => x+y // 宣告
val f1 = (x:Int , y:Int) =>{
val sum = x+y
sum*100} // 最後一句作為函式的返回值 函式沒有返回值型別
回車之後會看到
f1: (Int, Int) => Int = <function2>
這裡的 function2 中的 2 指的是引數的個數
呼叫: f1 (3,4) // 與方法的呼叫一致
函式與方法的關係 ???
我們透過一個案例來探討:
首先建立一個方法: def func (yAge:Int,mAge:Int):String={
val a : Boolean = yAge >= mAge
val str : String = if(a) " 哥哥 " else " 弟弟 "
str
}
我們發現這個條件可以做成一個函式: val m = ( yAge:Int , mAge:Int ) = >{yAge >= mAge}
我們可以呼叫函式: def func1 (yAge:Int,mAge:Int):String={
val a : Boolean = m(yAge,mAge)
val str : String = if(a) " 哥哥 " else " 弟弟 "
}
我們也可以把函式當做一個引數傳入到方法中:
def func1(yAge:Int,mAge:Int,f:(Int,Int) =>Boolean):String={
var a= f(yAge,mAge) 或者 var a :Boolean = f(yAge,mAge)
val res : String=if(a)" 哥哥 " else " 弟弟 "
res
}
呼叫: println(func1(18,20,m))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2653923/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師大資料學習路線分享Scala系列之物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享Scala系列之抽象類程式設計師大資料抽象
- 好程式設計師大資料學習路線分享Scala系列之陣列程式設計師大資料陣列
- 好程式設計師大資料學習路線分享Scala系列之泛型程式設計師大資料泛型
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark
- 好程式設計師大資料學習路線分享Scala系列之對映Map程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之基礎篇程式設計師大資料
- 好程式設計師大資料學習路線分享Scala系列之集合操作函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Scala分支和迴圈程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之字串程式設計師大資料字串
- 好程式設計師大資料學習路線分享MAPREDUCE程式設計師大資料
- 好程式設計師大資料學習路線分享SparkSQl程式設計師大資料SparkSQL
- 好程式設計師大資料學習路線分享scala單列和伴生物件程式設計師大資料物件
- 好程式設計師大資料學習路線分享大資料之執行緒程式設計師大資料執行緒
- 好程式設計師大資料學習路線分享Hbase指令學習程式設計師大資料
- 好程式設計師大資料學習路線分享大資料之基礎語法程式設計師大資料
- 好程式設計師大資料學習路線Hadoop學習乾貨分享程式設計師大資料Hadoop
- 好程式設計師大資料學習路線分享HDFS學習總結程式設計師大資料
- 好程式設計師大資料學習路線分享hdfs學習乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線分享Map學習筆記程式設計師大資料筆記
- 好程式設計師大資料學習路線之mapreduce概述程式設計師大資料
- 好程式設計師大資料學習路線分享HDFS讀流程程式設計師大資料
- 好程式設計師大資料學習路線分享AWK詳解程式設計師大資料
- 好程式設計師大資料學習路線分享UDF函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Lambda表示式程式設計師大資料
- 好程式設計師大資料學習路線之zookeeper乾貨程式設計師大資料
- 好程式設計師大資料學習路線分享高階函式程式設計師大資料函式
- 好程式設計師大資料學習路線分享Hadoop機架感知程式設計師大資料Hadoop
- 好程式設計師大資料教程分享Scala系列之閉包程式設計師大資料
- 好程式設計師大資料分享Scala系列之柯里化程式設計師大資料
- 好程式設計師大資料學習路線分享TCP和UDP學習筆記程式設計師大資料TCPUDP筆記
- 好程式設計師大資料學習路線之hive儲存格式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享MapReduce全過程解析程式設計師大資料
- 好程式設計師大資料學習路線分享hive的執行方式程式設計師大資料Hive
- 好程式設計師大資料學習路線分享什麼是Hash表程式設計師大資料
- 好程式設計師大資料學習路線分享MapReduce全流程總結程式設計師大資料
- 好程式設計師大資料學習路線之大資料自學路線二程式設計師大資料