【Scala篇】--Scala初始與基礎

LHBlog發表於2018-02-01

一、前述

Scala是基於JVM的另一個語言。

Scala官網6個特徵。

1).Javascala可以混編

2).型別推測(自動推測型別)

3).併發和分散式(Actor

4).特質,特徵(類似javainterfaces abstract結合)

5).模式匹配(類似java switch

6).高階函式

二、Scala基礎

 1.資料型別

 

 

 2、變數和常量的宣告

 

  • 定義變數或者常量的時候,也可以寫上返回的型別,一般省略,如:val a:Int = 10
  • 常量不可再賦值

 

 

 /**
     * 定義變數和常量
     * 變數 :用 var 定義 ,可修改 
     * 常量 :用 val 定義,不可修改
     */
    var name = "zhangsan"
    println(name)
    name ="lisi"
    println(name)
    val gender = "m"
//    gender = "m"//錯誤,不能給常量再賦值

 3、類和物件

 

 

  • 建立類

 

 

class Person{
  val name = "zhangsan"
  val age = 18
  def sayName() = {
    "my name is "+ name
  }
}

 

 

  • 建立物件
object Lesson_Class {
   def main(args: Array[String]): Unit = {
    val person = new Person()
    println(person.age);
    println(person.sayName())
  }
}

 

  • 伴生類和伴生物件

 

class Person(xname :String , xage :Int){
  var name = Person.name
  val age = xage
  var gender = "m"
  def this(name:String,age:Int,g:String){
    this(name,age)
    gender = g
  }
  
  def sayName() = {
    "my name is "+ name
  }

}

object Person {
  val name = "zhangsanfeng"
  
  def main(args: Array[String]): Unit = {
    val person = new Person("wagnwu",10,"f")
    println(person.age);
    println(person.sayName())
    println(person.gender)
  }
}

 PS:

建議類名首字母大寫 ,方法首字母小寫,類和方法命名建議符合駝峰命名法。

scala 中的object是單例物件,相當於java中的工具類,可以看成是定義靜態的方法的類。object不可以傳引數。另:Trait不可以傳引數

 scala中的class類預設可以傳引數,預設的傳引數就是預設的建構函式。

重寫建構函式的時候,必須要呼叫預設的建構函式。

class 類屬性自帶getter setter方法。

 使用object時,不用new,使用class時要new ,並且new的時候,class中除了方法不執行,其他都執行。

 如果在同一個檔案中,object物件和class類的名稱相同,則這個物件就是這個類的伴生物件,這個類就是這個物件的伴生類。可以互相訪問私有變數。

 

4、for ,while,dowhile的使用

     1、tountil 的用法(不帶步長,帶步長區別)

/**
     * to和until
     * 例:
     * 1 to 10 返回1到10的Range陣列,包含10
     * 1 until 10 返回1到10 Range陣列 ,不包含10
     */
    
    println(1 to 10 )//列印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    println(1.to(10))//與上面等價,列印 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
    
    println(1 to (10 ,2))//步長為2,從1開始列印 ,1,3,5,7,9
    println(1.to(10, 2)) 
    
    println(1 until 10 ) //不包含最後一個數,列印 1,2,3,4,5,6,7,8,9
    println(1.until(10))//與上面等價
    
println(1 until (10 ,3 ))//步長為2,從1開始列印,列印1,4,7

  2、 建立for迴圈

 

   /**
     * for 迴圈
     * 
     */
    for( i <- 1 to 10 ){
      println(i)
    }

 

 3、建立多層for迴圈

 

//可以分號隔開,寫入多個list賦值的變數,構成多層for迴圈
    //scala中 不能寫count++ count-- 只能寫count+
    var count = 0;
    for(i <- 1 to 10; j <- 1 until 10){
      println("i="+ i +",	j="+j)
      count += 1
    }
    println(count);
    
    //例子: 列印小九九
    for(i <- 1 until 10 ;j <- 1 until 10){
      if(i>=j){
    	  print(i +" * " + j + " = "+ i*j+"	")
        
      }
      if(i==j ){
        println()
      }
      
    }

 

 4、for迴圈中可以加條件判斷,分號隔開

 

  //可以在for迴圈中加入條件判斷
    for(i<- 1 to 10 ;if (i%2) == 0 ;if (i == 4) ){
      println(i)
}

 

 

5、scala中不能使用count++count只能使用count = count+1 count += 1

6、for迴圈用yield 關鍵字返回一個集合。

7、while迴圈,while(){}do {}while()

 

 //將for中的符合條件的元素通過yield關鍵字返回成一個集合
    val list = for(i <- 1 to 10  ; if(i > 5 )) yield i 
    for( w <- list ){
      println(w)
}

   /**
     * while 迴圈
     */
    var index = 0 
    while(index < 100 ){
    	println("第"+index+"次while 迴圈")
      index += 1 
    }
    index = 0 
    do{
    	index +=1 
    	println("第"+index+"次do while 迴圈")
}while(index <100 )

 

相關文章