scala函数式编程(二) scala基础语法介绍
上次我們介紹了函數(shù)式編程的好處,并使用scala寫了一個小小的例子幫助大家理解,從這里開始我將真正開始介紹scala編程的一些內(nèi)容。
這里會先重點介紹scala的一些語法。當(dāng)然,這里是假設(shè)你有一些java或者python的基礎(chǔ),畢竟大部分人不會將scala當(dāng)作第一門學(xué)習(xí)編程的語言。
不過這些語法知識記不住也沒關(guān)系,本身語法這種東西就應(yīng)該在使用中被記住。這里寫這篇的目的也只是梳理一遍,方便大家對語法有個初步的印象,后面可以隨時查詢。
PS:所使用的版本是scala 2.11.8,那我們開始吧
一.scala兩種運行方式
首先,scala有兩種運行方式,分別是在交互式環(huán)境運行,以及通過腳本的方式運行。先運行一下吧,在scala安裝目錄下有一個bin文件夾,在這個文件夾雙擊scala.bat(Windows系統(tǒng)),就可以啟動scala交互環(huán)境。當(dāng)然,一般在安裝scala,都會將“scala目錄/bin”加入到系統(tǒng)的Path變量中,這個時候直接運行cmd,然后輸入scala就可以了。
因為scala也是運行在jvm平臺上的,所以用腳本方式的話,類似于java那樣,需要先編譯再執(zhí)行。但是一般我們都會使用IDE來處理。通過我個人是更加喜歡idea的,只要下載免費的社區(qū)版就可以滿足日常開發(fā)需求。
二.scala變量和類型
2.1 變量
首先,我們先來用一個例子來看看具體語法。在交互式環(huán)境中輸出hello world。
//聲明一個字符串
scala> val str = "Hello world"
str: String = Hello world//打印
scala> println(str)
Hello world 相信大家看一眼就能明白這兩行代碼是干嘛的,那我就說一點看不出來的。
scala聲明一個變量可以用val和var。val意為這個變量是不可變的,var意為這個變量是可變的。
scala> val num = 1; //聲明一個不可變的數(shù)值型變量
num: Int = 1scala> num = 2 //因為不可變,所以要更改時,出錯了
<console>:12: error: reassignment to valnum = 2^scala> var num_var = 1; //聲明一個可變的數(shù)值型變量
num_var: Int = 1scala> num_var = 2; //可以改變
num_var: Int = 2 從功能上來說,類似于java的final關(guān)鍵字。而且scala語言傾向于讓你多使用val,而少用var。
為什么呢?
因為能夠更方便得使用并發(fā),在java的并發(fā)編程中,最喜歡的就是final的變量,因為它都是不變的,隨便怎么用就怎么用。而scala所支持的函數(shù)式編程,天然就適合異步和并發(fā),所以做了這樣的處理,包括scala的集合類,默認(rèn)也是不可變的類型,如果要使用可變的集合,需要手動指定。
2.2 scala數(shù)據(jù)類型
說完了變量,再來說說scala的數(shù)據(jù)類型。這里直接上一張圖。
這張圖說明了scala的數(shù)據(jù)類型繼承關(guān)系,我們先看最上面的Any類型,Any類型是所有數(shù)據(jù)類型的爸爸,在它里面定義了equals,toString這些方法,類似于java的object。這一點和java還是比較類似的。
然后接著往下看,Any又有兩個字類,左邊的AnyVal以及右邊的AnyRef。右邊的先不管,那個主要是集合那邊的知識,我們只看左邊的。
AnyVal又被多個數(shù)據(jù)類型繼承,這些就是日常常用的一些數(shù)據(jù)類型了,可以看到和Java類似,都是Int,Double,Long這些。對了,這些數(shù)據(jù)類型,Int,Double,Long什么的,都是類,不像java,還有分int和Integer。
最后再來看看最下面的Nothing和Null吧,把這倆貨擱在一塊說是因為這幾個概念非常容易混淆,我自己要用的時候還得去查清楚了。
- java的null(scala也可以用,不過n是小寫):就是代表沒有任何東西,即空。一般新建一個對象,默認(rèn)值就是這貨。
- scala的Nothing:所有數(shù)據(jù)類型的子類,沒有具體的值可以對應(yīng)到這種類型,也就是說你沒法為Nothing類型賦值,包括null也不行。那可能有的小伙伴就會問了,那要這個玩意干嘛呢?一般嘛,try catch的返回值就是這種類型,還有程序exit的時候也是返回它,大概就是在不需要返回值的時候,就返回這個意思意思。
- scala的Null(注意大小寫):是所有集合類的子類,這種類型只能使用null來賦值,可以說基本沒什么卵用。只要知道有這么個東西就行。
結(jié)語
本次介紹了scala的基礎(chǔ)變量和類型,scala默認(rèn)是更加推薦使用不可變的變量,而常見的數(shù)據(jù)類型和java基本差不多,只是名字和用法上有些差別。
而在面向?qū)ο筮@一塊上,也基本和java差不多,只要有java的基礎(chǔ),熟悉這部分的語法應(yīng)該不是問題。
那么按我的理解來說說為什么scala會有這些改動吧。首先,scala是在java發(fā)明后才被創(chuàng)建出來的,其設(shè)計理念必然會比java成熟一些,所以也就會想解決一些java的缺陷,比如說java某些語法較為冗余。而scala則較為靈活一些,比如多了object,不需要每次都new一個對象,再比如有交互式環(huán)境。
其次,scala也是為了貼近于函數(shù)式編程,函數(shù)式的核心,就是編寫無副作用代碼。而更本質(zhì)地說,就是將代碼拆分模塊化,各個模塊各司其職,不是自己的別瞎動,自己管好自己的事,這個其實和微服務(wù)的思想是一樣的。
所以scala才會默認(rèn)得讓變量是不可變的,就是為了盡量讓代碼保持不變。
OK,那今天就先說到這吧,下次再說scala語法的重頭戲,集合和函數(shù)。
轉(zhuǎn)載于:https://www.cnblogs.com/listenfwind/p/11551713.html
總結(jié)
以上是生活随笔為你收集整理的scala函数式编程(二) scala基础语法介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: layer弹窗在IOS上,被软键盘挤到上
- 下一篇: JAVA课上动手动脑问题以及课后测试1,