scala基礎チュートリアル

9069 ワード

目次
1 if 
2 for
3 while
4ユニットTuple
4.1定義方式
4.2値を取る
4.3対偶元祖
4.4タプル交換swap
5配列Array
6シーケンスList
6.1不変シーケンス
6.2可変シーケンス(パイロットが必要)
7 Mapマッピング
7.1可変集合
7.2可変集合
7.2.1集合の作成
7.2.2要素の追加
7.3値を取る
7.4遍歴
7.5 keysとvaluesの取得
8 Set
8.1不変set
8.2可変set
9伴生対象
10構築方法
1 if 
package com.weiyi.scala

object IfTest {
  def main(args: Array[String]): Unit = {
    val i = 2
    val y = if (i > 1){
      i
    } else {
      0
    }
    println(y)
  }

}

2 for
package com.weiyi.scala
 
object ForTest {
  def main(args: Array[String]): Unit = {
 
    var arr = Array("a","b","c")
    for (i 

3 while
package com.weiyi.scala
 
import scala.util.control.Breaks
 
object WhileTest {
  def main(args: Array[String]): Unit = {
    val loop: Breaks = new Breaks
    var i = 0
    while (i < 5){
      println(i)
      i += 1
      if (i == 3){
        loop.break()
      }
    }
  }
 
}

4ユニットTuple
メタグループには可変と可変の区別はありません.すべて可変ではありません.
メタグループは、一連の要素をカプセル化した集合です.
メタグループは最も使用頻度が高い.
4.1定義方式
定義1:val tp 1=(1100,true,"error")
定義2:val tp 2=new Tuple 3(1100,true)/3は要素の個数を表し、要素の個数と一致しなければならない.
4.2値を取る
コーナースケールで1から開始
形式:tp 1.1
package com.weiyi.scala
 
object TupleTest {
 
  def main(args: Array[String]): Unit = {
 
    val tp1 = ("1",2,true)
    println(tp1._1)
    
  }
 
}

4.3対偶元祖
2つの要素しかないメタグループを対偶メタグループと呼ぶ
Mapの下位層の各要素(k,v)は,対偶要素群である.(Mapは対偶グループからなる)
4.4タプル交換swap
scala> tp2
res17: ((String , Int) = (a,100)
 
scala> tp2.swap
res18: (Int, String) = (100,a)

メタグループの要素の数:最大22個.new Tuple22(xxxx)
5配列Array
package com.weiyi.scala
import scala.collection.mutable.ArrayBuffer
object ArrayTest {
  def main(args: Array[String]): Unit = {
 
    //    
    //      ,   ,     ,        。
    //  :     new,          apply   ,       
    val arr1: Array[Int] = Array[Int](1,2,3)
    //   new         ,            
    val arr2: Array[Int] = new Array[Int](10)
    //    ,    0   :
    println(arr1(0))
 
    //        import scala.collection.mutable.ArrayBuffer
    val ab: ArrayBuffer[Int] = ArrayBuffer[Int](1,3,4)
    val ab2 = new ArrayBuffer[Int]()
    //              
    // +=       
    ab += 1
    //      
    ab += (2,3,4)
    ab -= (3,4)
 
    //      
    ab ++= Array(7,8)
    //        
    ab ++= ArrayBuffer(9,0)
 
    //            insert,             ,             
    ab.insert(0, -1, 0)
    //            remove,              ,            
    ab.remove(8, 2)
 
    //   
    ab.clear()
    println(ab)
  }
}

6シーケンスList
可変リスト長可変、内容可変リスト
可変リスト長とコンテンツともに可変ListBuffer
6.1不変シーケンス
デフォルトは可変シーケンスで、長さも内容も可変ではありません.リストを構築する2つの基本単位はNilと:(Nilは空のリストを表します)
Listコレクションを作成する2つの方法:
package com.weiyi.scala
 
object ListTest {
 
  def main(args: Array[String]): Unit = {
 
    val list1: List[Int] = List[Int](1,2,3)
     val list2: List[Int] = 9::5::2::Nil
  }
}

注:::オペレータは右結合されており、指定されたヘッダと末尾に新しいリストを作成します.
如9:5:5::2::Nil相当于9:(5:(2::Nil))
注:scalaではリストが空かhead要素にtailリストを追加します.
可変リストの全ての操作について、全て新規リストを生成する
package com.weiyi.scala
 
object ImmutListTest {
 
  def main(args: Array[String]): Unit = {
    //          
    val lst1 = List(1,2,3)
    // 0   lst1         List
    val lst2 = 0::lst1
    val lst3 = 0+:lst1
    //        lst1           
    val lst6 = lst1:+3
    val lst0 = List(4,5,6)
    // 2 list       list
    val lst7 = lst1 ++ lst0
    val lst8 = lst1 ++: lst0
    val lst9 = lst1 ::: lst0
    val lst11 = List.concat(lst1,lst0)
    //    
    lst1.reverse
    //     
    val head: Int = lst1.head
    //      
    val tail: List[Int] = lst1.tail
  }
}

6.2可変シーケンス(パイロットが必要)
import scala.collection.mutable.ListBuffer

ListBufferを作成する2つの方法
package com.weiyi.scala
import scala.collection.mutable.ListBuffer
object MutListTest {
 
  def main(args: Array[String]): Unit = {
 
    //  ListBuffer     
    val lb1: ListBuffer[Int] = ListBuffer[Int]()//          
 
    val lb2: ListBuffer[Int] = new ListBuffer[Int]()//        
  }
}

 
要素の追加:+=メソッドとappendメソッド、両方とも複数の要素を追加できます
package com.weiyi.scala
import scala.collection.mutable.ListBuffer
object MutListTest {
 
  def main(args: Array[String]): Unit = {
 
    val lst0: ListBuffer[Int] = ListBuffer[Int](1,2,3)
    val lst1: ListBuffer[Int] = new ListBuffer[Int]()
    // lst1        :        
    lst1+=(3,4)
    lst1.append(5)
    
    // lst0 lst1       ListBuffer    :         
    val lst2 = lst0 ++ lst1
  }
}

注意:
可変リストはtoListメソッドにより新しいリストを生成することができる
ListはtoBufferによりListBufferに移行できる
7 Mapマッピング
scalaには2種類のmapがあり、1つはimmutableパッケージの下のMapであり、このMapの中の内容は可変ではなく、1つはmutableパッケージの下のMapであり、このMapの中の内容は可変である
7.1可変集合
デフォルトはimmutableパッケージの下のMapです
package com.weiyi.scala
 
object MapTest {
 
  def main(args: Array[String]): Unit = {
 
    val mp1: Map[String, Int] = Map(("a",1),("b",2))
    val mp2: Map[String, Int] = Map("a"->1,"b"->2)
    //          map
    val mp3: Map[String, Int] = mp2+("c"->3)
  }
}

7.2可変集合
7.2.1集合の作成
package com.weiyi.scala
 
import scala.collection.mutable
 
object MapTest2 {
 
  def main(args: Array[String]): Unit = {
 
    val mp4 = new mutable.HashMap[String,Int]()
    val mp5: mutable.Map[String, Int] = mutable.Map[String,Int]()
 
  }
}

7.2.2要素の追加
package com.weiyi.scala
 
import scala.collection.mutable
 
object MapTest2 {
 
  def main(args: Array[String]): Unit = {
 
    val mp4 = new mutable.HashMap[String,Int]()
    mp4 += ("e"->8,"f"->9)
    mp4 += (("b1",12))
    mp4.put("ly",56)
    mp4("zx") = 24
    
  }
}

7.3値を取る
    mp4("a")
    mp4.get("xxyy")
    //     ,     :
    mp4.getOrElse("xxyy",9876)

7.4遍歴
   for (i 

7.5 keysとvaluesの取得
    val keys: Iterable[String] = mp4.keys
    val values: Iterable[Int] = mp4.values

8 Set
8.1不変set
長さも値も可変ではありません.setの要素は繰り返すことはできません.
package com.weiyi.scala
 
object ImmutSetTest {
  def main(args: Array[String]): Unit = {
 
    //   immutable   Set
    val set1: Set[Int] = Set(1,2,3)
 
    //                   Set  
    val s2: Set[Int] = set1 + (10,12)
    val s3: Set[Int] = set1 - (1)
    println(set1)
 
  }

8.2可変set
可変Setでは、removeメソッドは、下付きではなく要素を除去します.
package com.weiyi.scala
import scala.collection.mutable
object MuSetTest {
 
  def main(args: Array[String]): Unit = {
 
    val mSet: mutable.HashSet[Int] = new mutable.HashSet[Int]()
    val mutableSet = mutable.Set(1,2,3)
    mutableSet.add(4)
    mutableSet += (7,8)
    mutableSet ++= mutable.Set(12,34)
    mutableSet -= (3,2)
    //remove                 
    mutableSet.remove(2)
    println(mutableSet)
    //       
    val an: Set[Int] = mutableSet.toSet
    
  }
}

9伴生対象
伴生オブジェクトは特殊な単例オブジェクトであり、相対概念であり、2つの条件を満たす必要がある.
a.同じソースファイルでb.オブジェクト名とクラス名が同じ
このような単例オブジェクトは,このクラスの伴生オブジェクトと呼ばれ,クラスはこの単例オブジェクトの伴生クラスと呼ばれる.
結論:クラスと伴生オブジェクトの間でプライベートなメソッドと属性に相互にアクセスできます.
package com.weiyi.scala
 
class People {
  val id = 1
  private  var name = "lll"
  def prntName()={
    println(People.von + name)
  }
}
 
object People{
  //          
  private  val von = "aa"
  def main(args: Array[String]): Unit = {
    val p = new People()
    //        name
    p.name = "123"
    p.prntName()
  }
  
}

10構築方法
コンストラクタは2つのクラスに分けられます:プライマリコンストラクタとセカンダリコンストラクタ、プライマリコンストラクタは直接クラス名の後ろで定義され、各クラスにはプライマリコンストラクタがあり、プライマリコンストラクタのパラメータは直接クラス名の後ろに配置され、クラスとインターリーブされます.コンストラクタが定義されていない場合、クラスにはデフォルトの空のパラメトリックコンストラクタがあります.
セカンダリコンストラクタ定義def thisキーワードを使用し、プライマリコンストラクタまたは他のセカンダリコンストラクタを呼び出す必要があります.
注:マスターコンストラクタはクラス定義のすべての文を実行します.
package com.weiyi.scala
 
 
//         ,               ,       
class Person(val name:String,val age:Int){
  //                
  println("      ")
  private  var gender = "male"
  // this          
  def this(name: String,age:Int,gender:String){
    //                            
    this(name,age)
    println("       ")
    this.gender = gender
  }
  private  var height = 175
 /* def this(name: String,age:Int,gender:String,height:Int){
    //                            
    this(name,age,gender)
    println("       ")
    this.gender = gender
    this.height = height
  }*/
}
 
object Person {
 
  def main(args: Array[String]): Unit = {
    val person: Person = new Person("a",12)
    val person2: Person = new Person("a",12,"333")
 
  }
}