初始Scala

前一段時間在知乎上看到有人在討論Scala,感覺這門語言還挺有意思的,最近正好不是很忙,找了些時間看了一下,這里記錄一下學到的東西吧。
Scala是一門JVM上的FP+OO的語言,F(xiàn)P是函數(shù)式編程,與之對應的是命令式編程如JAVA,函數(shù)式編程有幾個特點:

  • 函數(shù)是一等公民,函數(shù)可以作為參數(shù),返回值。
  • 強調不變性,不是變量是表達式
  • 函數(shù)沒有副作用,不依賴外部狀態(tài),也不會改變外部的狀態(tài),給定相同的輸入,都會有同樣的輸出

Scala的語法與JAVA有些相似,但是又有很大的區(qū)別,首先是變量的定義:

var one : Int = 1
val two : Int = 2

類型放在變量名的后面,用:隔開,var 是可從新賦值的變量,而val是不可重新賦值的,例如Java中的final 修飾的變量。同時類型可以省略,編譯器可以自動推斷出類型

var three = 3

函數(shù)定義

Scala 里函數(shù)的定義:

def max(a:Int,b:Int) :Int = {
  if (a>b) a else b
}

我們可以看到函數(shù)的定義是用def 關鍵字,返回類型跟在括號后面。同時與Java不一樣的是,函數(shù)的定義與變量一樣需要用等號來連接。
如果你的函數(shù)體只有一個語句,可以把花括號去掉

def max(a:Int,b:Int) :Int= if (a>b) a else b

同時,我們可以省略返回類型,編譯器可以自動推測

def max(a:Int,b:Int)= if (a>b) a else b

上面說過,Scala是支持函數(shù)式編程的,函數(shù)可以當作參數(shù)和返回值,我們來定義一個參數(shù)是函數(shù)的函數(shù)

def calculate(f:Int=>Int,a:Int):Int = f(a)

我們定義了一個函數(shù)calculate,它有兩個參數(shù),f 和 a ,f的類型是Int=>Int ,表示這是一個函數(shù)類型,這個函數(shù)的參數(shù)是Int類型,返回值也是Int類型。我們來用一下這個函數(shù):

def sumOne(a:Int):Int=a+1
val result=calculate(sumOne,1)

看一下結果



Java要實現(xiàn)相同的方式就需要匿名類了,Scala確實要簡潔許多。設計模式里面的策略模式好像就是這個思想,只不過復雜化了。

Scala集合

Scala的集合主要有 List Set Map Tuple。
除了Tuple 其他的Java里面都有,Tuple翻譯成元組,它跟List很像,不過它里面可以放各種類型的元素,而List只能放相同類型的。

val ones=("1",1,1.0)

我們可以用->符號快速的構造兩個元素的元組

val pair = 1->"1"

Scala 里面集合分為兩種,可變集合和不可變集合,函數(shù)式編程崇尚不可變,Scala鼓勵使用不可變集合,但是也不限制你使用可變集合。Scala里默認的是不可變集合:

var lista=List(1,2,3)
var listb=4::lista
lista

首先創(chuàng)建了一個lista,里面有1,2,3然后我們用 :: 這個符號把4加到list里面,因為List是不可變的,所以scala新建了一個List返回給了listb,所以看到lista還是1,2,3。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 人生苦多,快來 Kotlin ,快速學習Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,703評論 9 118
  • //Clojure入門教程: Clojure – Functional Programming for the J...
    葡萄喃喃囈語閱讀 4,053評論 0 7
  • scala學習筆記 第2章 變量和數(shù)據(jù)類型 基本數(shù)據(jù) scala的核心數(shù)據(jù)為四種 :字面量、值、變量、類型 值使...
    485b1aca799e閱讀 2,248評論 0 1
  • 這篇講義只講scala的簡單使用,目的是使各位新來的同事能夠首先看懂程序,因為 scala 有的語法對于之前使用習...
    MrRobot閱讀 3,044評論 0 10
  • 張阿姨76歲了,退休醫(yī)生,我的好友,一個滿身正能量的老太太。張阿姨每天必干的事情就是更新空間,很少中斷,正是這樣的...
    一米陽光明媚的日子閱讀 525評論 0 4

友情鏈接更多精彩內容