1. 程式人生 > >scala學習計算開始基本語法2

scala學習計算開始基本語法2

上接scala學習開始基本語法1
第五步:陣列的使用
在scala中,可以使用new來例項化物件,當你建立一個數組物件的時候,你可以使用數值或者是型別引數。但是在scala中,是使用[]來指明物件,java是使用<>。如下程式碼

package org.wq.learn
object day2 {
  def main(args: Array[String]): Unit = {
   val strs =  new Array[String](3)
   strs(0)="hello"
   strs(1)="!"
   strs(2)="scala~"
   strs.foreach(println)

  }
 }

從上面程式碼中可以看到,在Scala中使用[]來指明引數化物件,這裡使用了String,在使用陣列的時候,使用的是()。
在Scala中為什麼要使用()來訪問陣列元素,因為對於陣列來說,它和其他資料型別並沒有什麼差別,當你在某個值後面添加了(),Scala把它翻譯為呼叫對應物件的apply方法。

package org.wq.learn
object day2 {
  def main(args: Array[String]): Unit = {
   val strs =  new Array[String](3)
   strs(0)="hello"
   strs(1)="!"
   strs(2
)="scala~" strs.foreach(println) var i=0 for(i<- 0 to 2){ println(strs(i)) } } }

比如,strs(1),實際上是呼叫strs.apply(1)。這種方法步僅僅適用於陣列,Scala中的任何物件都可以。如果在後面寫(),就表示呼叫該物件的apply方法。如果是對某個物件賦值,如剛才的strs(2)=”scala~”就是呼叫apply方法,Scala會把賦值語句轉化成該物件的update,就是strs(2,”scala~”)。
所以,上面的程式碼可以寫成

package org.wq.learn
object day2 {
  def
main(args: Array[String]):
Unit = { val strs = new Array[String](3) //賦值轉化成update方法 strs.update(0,"hello") strs.update(1,"!") strs.update(2,"scala~") var i=0 for(i<- 0 to 2){ //()呼叫成apply方法 println(strs.apply(i)) } } }

從上面可以看出來,資料就是一個Scala中普通的資料型別,沒什麼好特別的。但是為了方便使用,提供了下面的初始化陣列的方法。

val v1s =  Array("hello","!","scala!")
val v2s=Array.apply("hello","!","scala!")

不用new ,直接使用Array。

第五步:使用Lists
Scala是一個面向函式的程式語言,面向函式的程式設計有一個特點,就是呼叫某個方法的時候,不應該有任何的副作用,引數一定,呼叫方法之後,只能得到返回值。這樣的好處是函式是獨立的,互相之間的關聯減少了,從而是函式的重用性和可靠性編好了。使用這個原則,就表明,變數設定成不可修改的,也避免了多執行緒訪問的互鎖問題。
前面說的陣列,他的元素是可以修改的。如果想使用不可修改的序列,請使用Lists,這點和java不同,java中的lists是可以修改的,我去。Scala中的Lists設計出來滿足函數語言程式設計的風格的。大款的使用方法:

val fruit = "apples" :: "oranges" :: "pears" :: Nil
    println(fruit.head)//頭元素
    println(fruit.last)//尾元素
    println(fruit.length)//長度
    println(fruit.reverse)//反轉
    println(fruit(1))//通過()訪問

定義Lists為:

val list1 = List(1,2,3)
val list2 = List()
println(list1(1))

第六步:元組的使用(Tuples)
Scala中還有一個非常重要的容易,Tuples,元組和Lists不同,Lists和陣列只能儲存同一種資料型別的值,但是元組可以儲存多種資料型別,所以Tuples在返回多個值的時候比較有用。定義了Tuples之後,就可以使用索引和._來訪問元素

val tuples = ("wangqi",26)
println(tuples._1)
println(tuples._2)

這裡注意的是,和lists和陣列不同,Tuples的索引是從1開始的。
Tuples的分量的實際資料型別決定Tuples的型別。比如,上圖的Tuples為 Tuples[String,Int]
第七步:使用Sets和Maps
Scala的目標是想然讓開發者同時使用面向物件和麵向函式的程式設計方式編寫程式,因此它提供的集合分成了2個大類,2個部分,可以修改的集合和不可以修改的集合。比如Array是可以修改的,Lists是不可以修改的。Scala中也提供了兩種Sets和Maps集合。
關於Sets,Scala中定義了基類,基類的型別為Trait的Set,類似java中的介面,但是Trait可以實現方法.。Set下面分開,有2個,一個是可變型別-Mutable.Set,一個是不可變型別Immutable.Set。看圖使用-xmind畫的,將就下,以後會改:
這裡寫圖片描述
Set的基本使用:定義一個Set,新增一個元素,判斷元素是否包含”wang”字串

 var mysets=Set("wang","jia")
 mysets+="hello"
 println(mysets.contains("wang"))

Scala提供的另一個型別為Map,Scala也提供了2中,immutable和muttable
這裡寫圖片描述
基本用法:定義,通過()訪問,key可以相同,但是訪問的是最後一個。

val maps= Map(1->"I",2->"am",3->"boy",4->"!")
println(maps(3))
結果為boy
val maps= Map(1->"I",3->"am",3->"boy",3->"!")
println(maps(3))
結果為!

第八步:函式式的程式設計風格
簡單來看,如果程式碼中有var,就是指令式程式設計,不是函式式。如果程式碼中只有val,那麼就很有可能是函數語言程式設計,所以以後scala程式設計中,不要使用var,全部使用val。看個簡單列子

def printStrs(args:Array[String]):Unit={
    var i =0
    while(i<args.length){
      println(args(i))
      i+=1
    }
  }
   val str = Array("hello","scala")
   printStrs(str)

這是java的寫法,指令程式設計
我們去除vars變數,寫成符合函式程式設計

def printStrs2(args:Array[String]):Unit={
    for(arg<-args){
      println(arg)
    }
  }
printStrs2(str)

還可以改成物件的foreach函式呼叫

def printStrs4(args:Array[String]):Unit={
    args.foreach(println)
  }

減少vars的使用,使程式碼簡潔了,減少錯誤發生。所以scala開發原則是能減少mutable變數,就不使用。避免副作用,上面的println也是副作用哈。
今天加班有點累,就到這裡吧……感謝引路蜂提供的教程……

相關推薦

scala學習計算開始基本語法2

上接scala學習開始基本語法1 第五步:陣列的使用 在scala中,可以使用new來例項化物件,當你建立一個數組物件的時候,你可以使用數值或者是型別引數。但是在scala中,是使用[]來指明物件,java是使用<>。如下程式碼 package

Scala學習筆記:重要語法特性

返回值 contains curried 路徑名 重復 continue 路徑 冒號 語句 1.變量聲明 Scala 有兩種變量, val 和 var val的值聲明後不可變,var可變val msg: String = "Hello yet again, world!"

python基本語法2.8--找出100以內的素數

string color utf-8 blog ring div prim style odi 問題描述:找出某一範圍內的素數 思路:給每個數字作標註     首先,要循環遍歷到該範圍內的所有數,一個大循環     然後,遍歷2到n-1。看是否能被整除 代碼: # -*-

tensorflow學習筆記(1)-基本語法和前向傳播

pla oba -a 訓練 style lac 好的 ini 神經元                  tensorflow學習筆記(1)   (1)tf中的圖      圖中就是一個計算圖,一個計算過程。

WEB學習-HTML的基本語法特性

lte 目標 -type div 災難 文字 網站 utf-8 charset HTML對換行不敏感,對tab不敏感 HTML只在乎標簽的嵌套結構,嵌套的關系。誰嵌套了誰,誰被誰嵌套了,和換行、tab無關。 換不換行、tab不tab,都不影響頁面的結構。 所以:

Scala快速安裝及基本語法

作者:林偉兵,叩丁狼高階講師。本文為原創文章,轉載請註明出處。    1. Scala概述 什麼是Scala Scala是一種多正規化的程式語言,其設計的初衷是要整合面向物件程式設計和函數語言程式設計的各種特性。Scala運行於Java平臺(Java虛擬機器),並

js --基本語法2

複習 :1. JS 引入方式 1. 元素事件繫結 onclick = "JS 語句" 2. <script> JS 程式碼 </script> 3. 外部JS檔案 <script src=""></script>2. JS 資料型別 Number String

scala學習 之 及 基本和高階用法(二)

目錄 1. Scala的資料型別 2. Scala變數 3. Scala 訪問修飾符 4. Scala 方法和函式 5. Scala陣列 6. Collection(集合) 7. Scala的類和物件 8. Scala的介面trait 9

基本語法2-流程控制_練習

寫出結果。 class Demo { public static void main(String[] args) { int m=0,n=3; if(m>0) if(n>

python爬蟲學習之XPath基本語法

XPath 使用路徑表示式來選取 XML 文件中的節點或節點集。節點是通過沿著路徑(path)或者步(steps)來選取的。 XML例項文件 我們將在下面的例子中使用這個XML文件。 <?xml version="1.0" encoding="ISO-8859-1"?> <

8.Python 學習系列--------Python 基本語法

三個內建必須要記住,Python stype help dir 目錄 1 python一切皆為物件,因為現實 包含了一系列的資料和操作這些資料的方法的一個整體,就叫作物件。 自行車 屬性:手剎車,輪胎,腳踏

Groovy基本語法(2)

4、靜態import 我是最早在.net framework 3.5上使用類似import static這種語法的,用起來相當方便的說,但JDK一直沒有引入這玩意兒,按道理說加上這麼個小功能是很容易實現的。不過Groovy倒是帶來來功能更強大的import static語法

lua學習筆記day02-----基本語法

第4章賦值 :lua支援多值賦值。PS:a,b=4,5多值賦值,先計算等號右邊的值,計算完才開始賦值,所以有以下特殊應用:a,b=b,a當等號左邊變數的數量和等號右邊的數值個數不想等時,按照以下規則進行賦值。左邊>右邊:a,b,c=1,2   ==> a=1,b=

mongoDB學習筆記--shell基本語法(二)

mongoDB Shell: 啟動mongoDB shell(我已經把mongodb\bin加入path環境變數):mongo 由於Mongo是個javaScript Shell,通過線上檢視JavaScript的文件能獲得更多幫助。shell本身內建了幫助文件,可以通過

J2SE習題—基本語法2

1.用1元5角錢人民幣兌換5分、2分和1分的硬幣(每一種都要有)共100枚,問共有幾種兌換方案?每種方案各換多少枚? 2.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數

正則表示式學習之一:基本語法

準備把這篇文章 翻譯一下,學習一下正則表示式的基本語法。看的頭大了,這玩意用的時候還是要邊查邊寫的好。 ---------------------------------------- 簡介 正則表示式是為了描述一個字串的某個特徵,然後用它來匹配另外一個字串。舉個例子

Go語言學習:01-基本語法

[TOC] 基本語法 === 原始檔構成 --- 最簡單的一個go程式: ```go package main import "fmt" func main() { fmt.Println("Hello, World!") } ``` Go源程式由幾部分構成: 1. `package`

scala學習(2)-基本語法--for迴圈和if語句

上一篇部落格我對scala做了最基本的講述吧,主要是我就知道那麼多,哈哈,好啦,今天我們看看在任何語言中我們用的最多的兩種語句吧。一猜就中,for和if語句。 當然開始之前我們還是說一下在scala中的變數的定義怎麼來。 變數 在scala中如果要定義

Go學習(2):基本語法

基本語法 一、二進位制、八進位制、十進位制、十六進位制【擴充套件內容】 1.1 進位制 二進位制:逢二進一,數值只有0和1。 八進位制:逢八進一,數值有0,1,2,3,4,5,6,7 十進位制:逢十進一,數值有0,1,2,3,4,5,6,7,8,9 十六進位制:逢十六

scala基本語法學習之一

scala與java有許多相似地方,scala是面向物件與面向過程程式設計的統一體,java在jdk8之前都是面向物件程式設計。因此scala具有面向物件程式設計的特點,即封裝、繼承和多型,又有面向過程的特點,使得scala語言更加靈活多變,掌握起來有一定的難度。scala編