宣言変数
Javaの変数の定義
INTの = 0 ;
Scalaで変数varまたはValを定義するために使用することができる、構文は以下の通りであります:
ヴァル/ VARの 変数識別子:変数タイプ = 初期値
間で
- ヴァル-defined変数は、再割り当てすることはできません
- varが変数が再割り当てすることができ-defined
- 背中に書かれたScalaの定義変数型変数名
- Scalaの最後の文はセミコロンを追加する必要はありません。
変数の定義
例:人の名前を保持する変数を定義する「トム」
参照コード
scala> val name:String = "tom"
name: String = tom
VALおよびVAR変数
例
ジムは、その動作結果を観察された変数名を再割り当てするには
参照コード
scala> name = "Jim"
<console>:12: error: reassignment to val
name = "Jim"
例
使用するvar再定義名「トム」を開催し、ジムに再割り当てしようとすると、その動作結果を観察するための変数
参照コード
scala> var name:String = "tom"
name: String = tom
scala> name = "Jim"
name: String = Jim
変数の型推論を定義します
Java以外Scalaの簡潔な構文は、変数を定義するために、より簡潔な方法を使用することができます。
例
人の名前「タム」を保持する変数を定義するために、より簡潔な構文を使用します。
参照コード
scala> val name = "tom"
name: String = tom
Scalaは自動的に、よりコンパクトに符号化するように、自動的に変数の変数値に基づいて型を推測することができます。
不活性割り当て
ビッグデータの開発企業では、時には非常に複雑なSQL文を記述し、SQL文は、行の行数百または数千もを有することができます。SQL文がJVMに直接ロードされ、メモリのオーバーヘッドがたくさんあるでしょう。どのように解決するには?
ある場合は多くの変数は、データを保存したが、すぐJVMメモリにロードする必要はありません。あなたは使用することができ、不活性割り当てを、効率を向上させることができます。
構文:
怠惰 ヴァル 変数名 = の式
参照コード
scala> lazy val sql = """insert overwrite table adm.itcast_adm_personas
| select
| a.user_id,
....
| left join gdm.itcast_gdm_user_buy_category c on a.user_id=c.user_id
| left join gdm.itcast_gdm_user_visit d on a.user_id=d.user_id;"""
sql: String = <lazy>
弦
Scalaの定義の文字列は、将来的には、必要に応じて定義するための最も便利な方法を選択することができ、さまざまな方法を提供しています。
- 二重引用符を使用します
- 補間式
- トリプル引用符を使用します
二重引用符を使用します
文法
ヴァル/ VARの 変数名 = 「文字列」
参照コード
val name="hadoop6"
scala> println(name + name.length)
hadoop6
補間式
補間式は、文字列の連結の多くを回避することができます。
文法
ヴァル/ VARの 変数名 = S "$ {変数/表現}文字列"
Sは、文字列の定義の前に追加されます
文字列で、$ {}は変数を参照するために使用され得るか、または発現が書き込ま
例
複数の変数が格納されている:「zhangsan」、30は、「男性」、文字列の定義は、情報が保存されます。
プリントアウト:名前= zhangsan、年齢= 30、性別=男性
参照コード
scala> val name = "zhangsan"
name: String = zhangsan
scala> val age = 30
age: Int = 30
scala> val sex = "male"
sex: String = male
scala> val info = s"name=${name}, age=${age}, sex=${sex}"
info: String = name=zhangsan, age=30, sex=male
scala> println(info)
name=zhangsan, age=30, sex=male
トリプル引用符を使用します
テキストの大部分は、文字列を定義するためのトリプル引用符で、保存する必要があります。例:SQL文の大部分を保存します。すべての3つの中間文字列は値として文字列を引用しています。
文法
ヴァル/ VARの 変数名 = 「」「文字
列2」「」
参照コード
val sql = """select
| *
| from
| t_user
| where
| name = "zhangsan""""
println(sql)
データ型と演算子
Javaのようなオペレータの過半数のScalaの種類
データの種類
基になる型 |
タイプ説明 |
バイト |
8ビットの符号付き整数 |
ショート |
16ビット符号付き整数 |
int型 |
32ビット符号付き整数 |
長いです |
64ビット符号付き整数 |
シャア |
16符号なしのUnicode文字 |
ストリング |
Char型配列(文字列) |
浮く |
32ビットの単精度浮動小数点 |
ダブル |
64組の浮動小数点精度 |
ブーリアン |
trueまたはfalse |
スカラ座のJava型との違いに注意してください。
- すべてのタイプでScalaは使用大文字を先頭に
- プラスチック使用のInt の代わりに、整数
- Scalaの定義された変数は、書き込み入力できないので、Scalaの推論自動的コンパイラ
演算子
カテゴリ |
演算子 |
算術演算子 |
+、 - 、*、/ |
関係演算子 |
>、<、==、!=、> =、<= |
論理演算子 |
&&、|| ,! |
- ノースカラ座、+、 - 演算子
- Scalaで== ,! =比較直接使用することができるJavaとは異なり、それらはequalsと一貫性を表します。EQを使用して2つのオブジェクトを比較し、基準値、
例
そこ文字列「ABC」であり、次いで第2の文字列値を作成します。最初の文字列の連結の後に空の文字列。
次いで、基準値は、それらが等しいかどうかを確認するために、これら2つの文字列が等しい比較します。
参照コード
val str1 = "abc"
val str2 = str1 + ""
str1 == str2
str1.eq(str2)
Scalaの型階層
タイプ |
説明 |
どれか |
すべてのタイプの親クラスのは、2つのサブクラスがあるとAnyVal AnyRef |
AnyVal |
すべての数値型の親の |
AnyRef |
すべてのオブジェクトタイプ(参照型)親 |
単位 |
これは、ユニットがAnyValのサブクラスである、空を表しています。それは、ボイドでJavaに似ていますが、Scalaのより多くのJavaよりも、オブジェクト指向します |
ヌル |
ヌルは、それがすべての参照タイプのサブクラスであることを意味AnyRefのサブクラスです。nullは任意のオブジェクトタイプに割り当てることができます |
何も |
すべてのタイプのサブクラス 何もすべてのクラスのサブクラスであるため、直接、メソッドが例外をスローした場合、戻り値の型は何もありません、タイプのインスタンスを作成することはできません、それはどのようなタイプに割り当てることができます |
何も
def main(args: Array[String]): Unit = {
val c = m3(1,0)
}
def m3(x:Int, y:Int):Int = {
if(y == 0) throw new Exception("这是一个异常")
x / y
}
問題
問題がある場合は、次のコードは?
val b:Int = null
Scalaは、エラーを説明します:
ヌル・タイプは、タイプintは説明変換しないヌルタイプint型は、のサブクラスではありません
条件式
つまり、条件式if式。Scalaの条件式の構文とJavaと同じ。
値の場合には戻ってきました
参照コード
scala> val sex = "male"
sex: String = male
scala> val result = if(sex == "male") 1 else 0
result: Int = 1
Javaは、同じではありません
- Scalaで、条件式もの値を返します
- 三重発現せずScalaで、代替式は、式のトリプレット場合に使用することができます
ブロック式
- {}を使用してScalaは、ブロック式を表します
- 式の場合と、ブロックはまた、式の値であります
- 値は、最後の式の値であり、
問題
次のコードは、変数の値が何であるのだろうか?
scala> val a = {
| println("1 + 1")
| 1 + 1
| }
循環
Scalaでのためにしている間に使用することができますが、一般的にあるため、より簡潔な表現の構文のために、発現のための推奨
発現について
文法
以下のための式(I < - 発現/アレイ/セット){
//表現
}
シンプルサイクル
デジタル表現を印刷するための使用1-10
参照コード1
scala> val nums = 1.to(10)
nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> for(i <- nums) println(i)
リファレンスコード2
//メソッド呼び出し中置
scala> for(i <- 1 to 10) println(i)
ネストされたループ
表現のための使用、次の文字を印刷
*****
*****
*****
参照コード
for(i <- 1 to 3; j <- 1 to 5) {print("*");if(j == 5) println("")}
ガード
表現のための裁判官は文章ならば、それは警備員呼び出された場合、裁判官を追加することができます。私たちは、より簡潔な表現のためのガードメイクを使用することができます。
文法
( -発現/アレイ/セットI <ための表現であれば){
//表現
}
例
表現のための使用は3で割り切れる1〜10の番号を印刷することができます
参照コード
// 3で割り切れるデジタルを印刷することができ、ガードを追加
for(i <- 1 to 10 if i % 3 == 0) println(i)
導出のための
ループのために、発現量は、セットを構築するために使用することができ、我々は、歩留まりの発現のために使用しますと呼ばれる派生
例
10、20 ... 100のセットを生成します
参照コード
//導出のために:表現のためにそのための発現構築物のセットは意志、降伏し始め
val v = for(i <- 1 to 10) yield i * 10
whileループ
JavaでScalaのループとが一致している間
例
デジタル印刷1-10
参照コード
scala> var i = 1
i: Int = 1
scala> while(i <= 10) {
| println(i)
| i = i+1
| }
壊れ和続けます
- Scalaは、何のブレークがない/キーワードを続けます
- あなたがブレークを使用する必要がある場合/続け、我々は使用する必要があるブレーククラスをパッケージ化scala.util.control breableと破る方法を。
休憩を達成
使い方
- ブレークインポートパッケージのインポートscala.util.control.Breaks._
- 使用の破壊可能なラップのための式
- ループを終了するのに必要な表現のために、ブレーク()メソッドの呼び出しを追加
例
表現1-100のためのデジタル印刷の使用、数50式のために出口に到達する場合
参照コード
// 导入scala.util.control包下的Break
import scala.util.control.Breaks._
breakable{
for(i <- 1 to 100) {
if(i >= 50) break()
else println(i)
}
}
達成するために続行
使い方
- ブレークの実装は似ていますが、少し異なって続行します。
- } {破断可能達成し続ける体のための発現がアップ備えます
例
10による数の割り切れるが、印刷されない場合は、トラバースに使用表現のために、デジタル1-100を印刷
// 导入scala.util.control包下的Break
import scala.util.control.Breaks._
for(i <- 1 to 100 ) {
breakable{
if(i % 10 == 0) break()
else println(i)
}
}