-Scala飾運行在Java虛擬機(Java Virtual Machine)之上,所以具備以下特色java
1) 輕鬆實現和豐富的Java類庫互聯互通程序員
2) 它既支持面向對象的編程方式,又支持函數式編程編程
3) 它寫出的程序像動態語言同樣簡潔,但事實上它確是嚴格意義上的靜態語言函數式編程
-先說下編程範式:函數
1) 在全部的編程範式中,面向對象編程(Object-Oriented Programming)無心是最大贏家測試
2) 但其實面向對象編程並非一種嚴格意義上的編程範式,嚴格意義上的編程範式分爲:命令式編程(Imperative Programming)、函數式編程(Functional Programming)和邏輯式編程(Logic Programming)。面向對象編程只是上述幾種範式的一個交叉產物,更多的仍是繼承了命令式編程的基因scala
3) 在傳統的語言設計中,只有命令式編程獲得了強調,那就是程序員要告訴計算機應該怎麼作。而遞歸則是經過靈巧的函數定義,告訴計算機作什麼。所以在使用命令式編程思惟的程序中,是如今多數程序採用的編程方式,遞歸出鏡的概率不多,而在函數式編程中,能夠隨處見到遞歸的方式設計
-Scala中循環不建議使用while和do...while,而建議使用遞歸orm
-計算1-100的和對象
import java.text.SimpleDateFormat import java.util.Date object boke_demo01 { def main(args: Array[String]): Unit = { //傳統方法完成 1-100 的求和任務 val now: Date = new Date() val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") val date = dateFormat.format(now) println("date=" + date) //輸出時間 var res = BigInt(0) var num = BigInt(1) var maxVal = BigInt(100l) //BigInt(99999999l)[測試效率大數] while (num <= maxVal) { res += num num += 1 } println("res=" + res) //再一次輸出時間 val now2: Date = new Date() val date2 = dateFormat.format(now2) println("date2=" + date2) //輸出時間 } }
函數式編程的重要思想就是儘可能不要產生額外的影響,上面的案例代碼就不符合函數式編程的思想,下面使用函數式編程方式來解決(Scala提倡的方式)
-案例演示
import java.text.SimpleDateFormat import java.util.Date object boke_demo01 { def main(args: Array[String]): Unit = { // 遞歸的方式來解決 //傳統方法完成 1-100 的求和任務 val now: Date = new Date() val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") val date = dateFormat.format(now) println("date=" + date) //輸出時間 def mx(num: BigInt, sum: BigInt): BigInt = { if (num <= 100l) return mx(num + 1, sum + num) else return sum } //測試 var num = BigInt(1) var sum = BigInt(0) var res = mx(num, sum) println("res=" + res) //再一次輸出時間 val now2: Date = new Date() val date2 = dateFormat.format(now2) println("date2=" + date2) //輸出時間 } }
-求最大值
def max(xs: List[Int]): Int = { if (xs.isEmpty) throw new java.util.NoSuchElementException if (xs.size == 1) xs.head else if (xs.head > max(xs.tail)) xs.head else max(xs.tail) }
def reverse(xs: String): String = if (xs.length == 1) xs else reverse(xs.tail) + xs.head
def factorial(n: Int): Int = if (n == 0) 1 else n * factorial(n - 1)