scala_サンプルクラス、サンプルオブジェクト、パターンマッチング
11601 ワード
文書ディレクトリサンプルクラス 定義サンプルクラス 例|サンプルクラス を定義例|可変メンバー変数 applyメソッド toStringメソッド equalsメソッド hashCode方法 copyメソッド サンプルオブジェクト 定義 例|定義列挙 単純モードマッチング 例 定義 例 守備 例 例 マッチングセット 整合配列 照合リスト マッチングユニット 例|配列内の要素 を取得する.例|Listのデータを取得する サンプルクラス
サンプルクラスは特殊なクラスで、データを保存するためのクラス(Java POJOクラスと同様)を迅速に定義することができ、その後、同時プログラミングやspark、flinkなどのフレームワークを学ぶときにもよく使用されます.
サンプルクラスの定義
構文フォーマットメンバー変数を変更する場合はvar を追加できます.デフォルトはvalで、 を省略できます.
例|サンプルクラスの定義
需要 Personサンプルクラスを定義し、名前と年齢メンバー変数 を含むサンプルクラスのオブジェクトインスタンス(「張三」、20)を作成し、 を印刷します.
リファレンスコード
例|可変メンバー変数
需要 Personサンプルクラスを定義し、名前と年齢メンバー変数 を含むサンプルクラスのオブジェクトインスタンス(「張三」,20) を作成する.枚3を修正した年齢は23歳で、 を印刷した.
リファレンスコード
#サンプルクラスのメソッド
サンプルクラスを定義すると、コンパイラは次のいくつかの有用な方法を自動的に実現します. applyメソッド toStringメソッド equalsメソッド hashCode方法 copyメソッド applyメソッド
applyメソッドでは、クラス名をすばやく使用してオブジェクトを作成できます.次のコードを参照してください.
toStringメソッド
toStringはサンプルクラス名(メンバー変数1、メンバー変数2、メンバー変数3...)を返し、サンプルクラスのメンバーをより詳細に表示できます.
equalsメソッド
サンプルクラスはequalsメソッドを自動的に実装し、==を直接使用して2つのサンプルクラスが等しいかどうか、すなわちすべてのメンバー変数が等しいかどうかを比較できます.
例名前、年齢 を含むサンプルクラスPersonを作成名前の作成年齢はそれぞれ「李四」で、21の2つのオブジェクトは です.それらが等しいかどうかを比較する
hashCodeメソッド
サンプルクラスはhashCodeメソッドを自動的に実装し、すべてのメンバー変数の値が同じであればhash値は同じであり、1つが異なる限りhash値は異なる.
例名前の作成年齢はそれぞれ「李四」で、21のオブジェクトは です.名前の年齢がそれぞれ「李四」、22のオブジェクト を作成します.は、2つのオブジェクトのハッシュ値 をそれぞれ印刷する
copyメソッド
サンプルクラスはcopyメソッドを実装し、同じインスタンスオブジェクトをすばやく作成し、名前付きパラメータを使用してメンバーに再割り当てできます.
例名前の作成年齢はそれぞれ「李四」で、21のオブジェクトは です. copyコピーで「王五」という名前のオブジェクト
サンプルオブジェクト
主に2つの場所で使用されます.定義列挙 は、パラメータのないメッセージング(後述Akkaプログラミング) として機能する.
定義#テイギ#
case objectを使用して、サンプルオブジェクトを作成します.サンプルオブジェクトは単一のインスタンスであり、プライマリコンストラクタはありません.
構文フォーマット
例|列挙の定義
需要説明は、2つのインスタンス(男性-Male、女性-Female) しかない性別Sex列挙を定義する. Personクラスを作成します.2人のメンバー(名前、性別) です. Personオブジェクト(「張三」、男性)、(「李四」、「女」) を2つ作成
リファレンスコード
#パターンマッチング
scalaには非常に強力なモードマッチングメカニズムがあり、多くのシーンに適用できます. switch文 タイプクエリー モードマッチングによるデータの高速取得 単純モードマッチング
Javaではswitchキーワードがありif条件判断文を簡略化できます.scalaでは、match式を使用して置き換えることができます.
構文フォーマット
例
需要説明コンソールから単語を入力(StdIn.readLineメソッドを使用) この単語が以下の単語に一致するか否かを判断し、一致できれば一言 を返す.印刷この文 単語
戻る
hadoop
ビッグデータ分散型ストレージとコンピューティングフレームワーク
zookeeper
ビッグデータ分散協調サービスフレームワーク
spark
ビッグデータ分散メモリ計算フレームワーク
一致しない
一致しない
リファレンスコード
#照合タイプ
Javaのswitchマッチングデータのように、match式はタイプマッチングを行うこともできます.異なるデータ型に基づいて異なる論理を実行する場合は、match式を使用して実装することもできます.
定義#テイギ#
構文フォーマット
例
需要説明は、Anyタイプの変数を定義し、hadoop、1、1.0 にそれぞれ割り当てます.は、パターンマッチングを定義し、それぞれタイプの名前 を印刷する.
リファレンスコード
[!NOTE]
case式で一致する変数を使用する必要がない場合は、下線の代わりに下線を使用します.
ガード
Javaでは、0-7に一致するには8つのcase文を書く必要があるなど、複数のcaseラベルを簡単に追加するしかありません.例:
scalaでは、ガードを使用して上記のコードを簡略化することができます.すなわち、case文にif条件判断を追加します.
例
需要説明コンソールから1つの数字a(StdIn.readIntを使用) を読み込む a>=0かつa<=3の場合、[0-3] を印刷する. a>=4かつa<=8の場合、[3,8] を印刷する.それ以外の場合、印刷は に一致しません.
リファレンスコード
#照合サンプルクラス
scalaは、パターンマッチングを使用してサンプルクラスをマッチングすることができ、サンプルクラスのメンバーデータを迅速に取得することができます.その後、Akkaのケースを開発する際にも使用します.
例
需要説明 2 2 2つのサンプルクラスCustomer、Orderを作成 Customer名前、年齢フィールド を含む Orderはidフィールド を含む
は、それぞれ2つのケースクラスのオブジェクトを定義し、Anyタイプ として指定する.は、モードを使用して2つのオブジェクトをマッチングし、それぞれのメンバー変数値 を印刷する.
リファレンスコード
一致セット
scalaのモードマッチングは、集合をマッチングするためにも使用されます.
マッチング配列
例の説明コード定義を順次修正する次の3つの配列 .上記配列 にパターンマッチングを用いる.
リファレンスコード
一致リスト
例の説明コード定義を順次修正する以下の3つのリスト .上記リスト にパターンマッチングを用いる.
リファレンスコード
メタグループの一致
例の説明コード定義を順次修正する2つのタプル .は、上記要素 にパターンマッチングを用いる.
リファレンスコード
#変数宣言のパターンマッチング
変数を定義するときは、パターンマッチングを使用してデータをすばやく取得できます.
例|配列内の要素の取得
需要説明は0-10の数字を含む配列を生成し、パターンマッチングを用いて2番目、3番目、4番目の要素 をそれぞれ取得する.
リファレンスコード
例|Listのデータ取得
需要説明は0-10の数字を含むリストを生成し、パターンマッチングを用いてそれぞれ第1、第2の要素 を取得する.
リファレンスコード
サンプルクラスは特殊なクラスで、データを保存するためのクラス(Java POJOクラスと同様)を迅速に定義することができ、その後、同時プログラミングやspark、flinkなどのフレームワークを学ぶときにもよく使用されます.
サンプルクラスの定義
構文フォーマット
case class ([var/val] 1: 1, 2: 2, 3: 3)
例|サンプルクラスの定義
需要
リファレンスコード
object _01CaseClassDemo {
case class Person(name:String, age:Int)
def main(args: Array[String]): Unit = {
val zhangsan = Person(" ", 20)
println(zhangsan)
}
}
例|可変メンバー変数
需要
リファレンスコード
object _02CaseClassDemo {
case class Person(var name:String, var age:Int)
def main(args: Array[String]): Unit = {
val zhangsan = Person(" ", 20)
zhangsan.age = 23
println(zhangsan)
}
}
#サンプルクラスのメソッド
サンプルクラスを定義すると、コンパイラは次のいくつかの有用な方法を自動的に実現します.
applyメソッドでは、クラス名をすばやく使用してオブジェクトを作成できます.次のコードを参照してください.
case class CasePerson(name:String, age:Int)
object CaseClassDemo {
def main(args: Array[String]): Unit = {
val lisi = CasePerson(" ", 21)
println(lisi.toString)
}
}
toStringメソッド
toStringはサンプルクラス名(メンバー変数1、メンバー変数2、メンバー変数3...)を返し、サンプルクラスのメンバーをより詳細に表示できます.
case class CasePerson(name:String, age:Int)
object CaseClassDemo {
def main(args: Array[String]): Unit = {
val lisi = CasePerson(" ", 21)
println(lisi.toString)
// :CasePerson( ,21)
}
}
equalsメソッド
サンプルクラスはequalsメソッドを自動的に実装し、==を直接使用して2つのサンプルクラスが等しいかどうか、すなわちすべてのメンバー変数が等しいかどうかを比較できます.
例
val lisi1 = CasePerson(" ", 21)
val lisi2 = CasePerson(" ", 21)
println(lisi1 == lisi2)
// :true
hashCodeメソッド
サンプルクラスはhashCodeメソッドを自動的に実装し、すべてのメンバー変数の値が同じであればhash値は同じであり、1つが異なる限りhash値は異なる.
例
val lisi1 = CasePerson(" ", 21)
val lisi2 = CasePerson(" ", 22)
println(lisi1.hashCode())
println(lisi2.hashCode())
copyメソッド
サンプルクラスはcopyメソッドを実装し、同じインスタンスオブジェクトをすばやく作成し、名前付きパラメータを使用してメンバーに再割り当てできます.
例
val lisi1 = CasePerson(" ", 21)
val wangwu = lisi1.copy(name=" ")
println(wangwu)
サンプルオブジェクト
主に2つの場所で使用されます.
定義#テイギ#
case objectを使用して、サンプルオブジェクトを作成します.サンプルオブジェクトは単一のインスタンスであり、プライマリコンストラクタはありません.
構文フォーマット
case object
例|列挙の定義
需要説明
リファレンスコード
trait Sex /* */
case object Male extends Sex // Sex
case object Female extends Sex
case class Person(name:String, sex:Sex)
object CaseClassDemo {
def main(args: Array[String]): Unit = {
val zhangsan = Person(" ", Male)
println(zhangsan)
}
}
#パターンマッチング
scalaには非常に強力なモードマッチングメカニズムがあり、多くのシーンに適用できます.
Javaではswitchキーワードがありif条件判断文を簡略化できます.scalaでは、match式を使用して置き換えることができます.
構文フォーマット
match {
case " 1" => 1
case " 2" => 2
case " 3" => 3
case _ => 4 //
}
例
需要説明
戻る
hadoop
ビッグデータ分散型ストレージとコンピューティングフレームワーク
zookeeper
ビッグデータ分散協調サービスフレームワーク
spark
ビッグデータ分散メモリ計算フレームワーク
一致しない
一致しない
リファレンスコード
println(" :")
// StdIn.readLine
val name = StdIn.readLine()
val result = name match {
case "hadoop" => " "
case "zookeeper" => " "
case "spark" => " "
case _ => " "
}
println(result)
#照合タイプ
Javaのswitchマッチングデータのように、match式はタイプマッチングを行うこともできます.異なるデータ型に基づいて異なる論理を実行する場合は、match式を使用して実装することもできます.
定義#テイギ#
構文フォーマット
match {
case 1 : 1 => 1
case 2 : 2 => 2
case 3 : 3 => 3
...
case _ => 4
}
例
需要説明
リファレンスコード
val a:Any = "hadoop"
val result = a match {
case _:String => "String"
case _:Int => "Int"
case _:Double => "Double"
}
println(result)
[!NOTE]
case式で一致する変数を使用する必要がない場合は、下線の代わりに下線を使用します.
ガード
Javaでは、0-7に一致するには8つのcase文を書く必要があるなど、複数のcaseラベルを簡単に追加するしかありません.例:
int a = 0;
switch(a) {
case 0: a += 1;
case 1: a += 1;
case 2: a += 1;
case 3: a += 1;
case 4: a += 2;
case 5: a += 2;
case 6: a += 2;
case 7: a += 2;
default: a = 0;
}
scalaでは、ガードを使用して上記のコードを簡略化することができます.すなわち、case文にif条件判断を追加します.
例
需要説明
リファレンスコード
val a = StdIn.readInt()
a match {
case _ if a >= 0 && a <= 3 => println("[0-3]")
case _ if a >= 4 && a <= 8 => println("[3-8]")
case _ => println(" ")
}
#照合サンプルクラス
scalaは、パターンマッチングを使用してサンプルクラスをマッチングすることができ、サンプルクラスのメンバーデータを迅速に取得することができます.その後、Akkaのケースを開発する際にも使用します.
例
需要説明
リファレンスコード
// 1.
case class Person(name:String, age:Int)
case class Order(id:String)
def main(args: Array[String]): Unit = {
// 2. , Any
val zhangsan:Any = Person(" ", 20)
val order1:Any = Order("001")
// 3. match...case
//
order1 match {
case Person(name, age) => println(s" :${name} :${age}")
case Order(id1) => println(s"ID :${id1}")
case _ => println(" ")
}
}
一致セット
scalaのモードマッチングは、集合をマッチングするためにも使用されます.
マッチング配列
例の説明
Array(1,x,y) // 1 ,
Array(0) // 0
Array(0, ...) // , 0
リファレンスコード
val arr = Array(1, 3, 5)
arr match {
case Array(1, x, y) => println(x + " " + y)
case Array(0) => println("only 0")
case Array(0, _*) => println("0 ...")
case _ => println("something else")
}
一致リスト
例の説明
List(0) // 0
List(0,...) // 0 ,
List(x,y) //
リファレンスコード
val list = List(0, 1, 2)
list match {
case 0 :: Nil => println(" 0 ")
case 0 :: tail => println("0 ")
case x :: y :: Nil => println(s" ${x}, ${y} ")
case _ => println(" ")
}
メタグループの一致
例の説明
(1, x, y) // 1 、
(x, y, 5) // , 5
リファレンスコード
val tuple = (2, 2, 5)
tuple match {
case (1, x, y) => println(s" ,1 :1, ${x}, ${y}")
case (x, y, 5) => println(s" ,5 :${x}, ${y}, 5")
case _ => println(" ")
}
#変数宣言のパターンマッチング
変数を定義するときは、パターンマッチングを使用してデータをすばやく取得できます.
例|配列内の要素の取得
需要説明
リファレンスコード
val array = (1 to 10).toArray
val Array(_, x, y, z, _*) = array
println(x, y, z)
例|Listのデータ取得
需要説明
リファレンスコード
val list = (1 to 10).toList
val x :: y :: tail = list
println(x, y)