免責事項:この記事はCC 4.0 BY-SAの著作権契約書に従って、ブロガーオリジナル記事です、複製、元のソースのリンクと、この文を添付してください。
記事のディレクトリ
1.変数宣言
VALおよびVAR:Scalaの変数が2種類に分け。
valの変数はに似ているJavaの決勝、一度再割り当てすることはできません初期化。
varが再割り当てすることができます。
変数宣言は、タイプを指定することができ、また(この時間は自動的にタイプを推測します)タイプを指定しない場合には
// val声明变量
val str01:String = "Hello World"
val str02 = "str02"
// str02 = "str00" 会编译错误
// var声明变量
var str03 = "str03"
str03 = "aaa" // 不会编译错误
Scalaのプログラムは、通常、新しいスコープを導入し、中括弧、文の変数のスコープが付属しています。
スコープについて、スカラ座とJavaの違いで、Javaは組み込みのスコープの範囲外で同じ名前の変数の使用を許可していませんが、スコープ内に埋め込まれたScalaの変数がの範囲外と同じ名前をブロックします。変数は、変数がスコープ内に内蔵され、同じ名前の範囲の外に表示されません。
2.データ・タイプ
タイプの2.1基礎
Javaとより一貫性。
- バイト:8ビットの2の補数の符号付き整数
- ショート:16ビットの2の補数の符号付き整数
- INT:32ビットの2の補数の符号付き整数
- ロング:64ビットの2の補数の符号付き整数
- シャア:16ビット符号なしのUnicode文字
- フロート:32ビットIEEE 754単精度浮動小数点
- ダブル:64ビットIEEE 754倍精度浮動小数点
- ブール:真或はfalse
- 文字列:シャアシーケンス
2.2リテラル
- 整数リテラル
のInt、整数リテラルロング、ショート、バイト、二つの形態がある10進と16進は、異なる初めは、異なるバンドを発現しました。ヘクスた:0xまたは0Xで、0〜9と小文字またはA〜Fの大文字を含んでいてもよいです
整数リテラルlまたはLで終了している場合、それはそうでなければ、ロングタイプのint型です。 - 浮動リテラル
率組成物から始まる小数点数、オプションの小数点、およびその後の任意eまたはEによって。たとえば1.2345e2ため。
F又はFを終了するフロートリテラルを支払っ、それはフロートタイプ、さもなければ二重です。二重またはD dを終了してもよいが、これはオプションです。 - 文字リテラル
任意のUnicode文字の単一引用符と中間部品の。ヴァルD =「\ u0041」:元の指定された文字を表示することに加えて、Unicode文字を表すことができ、特に\ Uプラス4進Unicodeコードに対応した数、例えばあります 。 - 文字列リテラルの
二重引用符組成物によって提供さ文字のパッケージ。
あなたはエスケープシーケンスやラインを横切るように、文字列の多くを書きたくない場合は、ネイティブの文字列内のネイティブ文字列は、一重または二重改行を含む任意の文字を、含めることができ表すために3つの二重引用符で始まりと終わりするために、3つの二重引用符を使用することができます引用符や他の特殊文字。
var a = """ Welcome to here.
I am very glad to see you."""
println(a)
打印结果:
Welcome to here.
I am very glad to see you.
问题在于:字符串第二行前面的空格被包含进去,为了解决这个问题,可以每行开始加一个管道符|,然后对字符串调用stripMargin方法,如下。
var a = """Welcome to here.
|I am very glad to see you.""".stripMargin
println(a)
打印结果:
Welcome to here.
I am very glad to see you.
2.3補間文字列
- sの補間:プロセス変数
- 生補間:ハンドルの特殊文字
- F補間:組み込み式のパーセント記号%を開始するには、表現上の命令の後にprintfスタイルの命令を追加します
val name = "Jason"
println(s"Hello, $name") // Hello, Jason
println(s"The answer is ${6*7}") // The answer is 42
println(raw"Hello\\\\World") // Hello\\\\World
println(f"${Math.PI}%.5f") // 3.14159
3.オペレータ
3.1伝統的に、オペレータはスカラで理解
Scalaは、伝統的な意味では、実際に作業をしません。同様に+、 - 、*、/ように文字がメソッド名として使用してもよいです。例えば、1 + 2は、実際にオブジェクトメソッド、すなわち、1 +(2)、パラメータ1と2のInt +を呼び出すと呼ばれる、複数のInt +メソッドをオーバーロードは、異なるパラメータを受信することがありますタイプ。
、/の間の使用の整数結果の整数部のみを保持し、丸められないであろう。
- 算術演算子:+ - * /%
- 関係、および論理演算子:> <> = <=!
- 論理演算子:&&または&、||または|。&&と||短絡され、左側の右サイドで評価されることはありません、ケースの発現の判定結果でした。
- ビット処理演算子:&| ^〜>>(右、最上位ビット(符号ビットの左側の値)が満たされている)>>>(符号なし右シフトは、オートフィル0)<<(シフトは左、オートフィル0)
- 平等のためのオブジェクト:!== =
println(1==1.0) //true
、Scalaの異なるJavaの==から、Scalaは長い内容が一致しているとしてとしてtrueを返します
演算子3.2スカラ
オペレータScalaの表現方法は、オペレーターのような他の言語の外見に限定されるものではなく、任意の方法は、オペレータ表記法で使用することができます。たとえばのindexOf Stringクラスはメソッドを持っているので、あなたが使用することができます
val str = "Hello World"
println(str indexOf 'e') // 1
println(str indexOf ('o',5)) // 7
3.3接頭辞、中置、後置演算子
いくつかの例としては、先に引用し中置演算子です。接頭表記法名は、オブジェクトメソッド呼び出しの前に配置する必要がある、接尾反対の
接頭オペレータが実際実際、例えば、メソッド「unary_」プラスオペレーターと呼ばれる-2.0(2.0).unary_-。,! - -と接頭演算子は、+であるとしてのみ使用することができます
// 前缀
val a = (2.0).unary_-
// 后缀
val b = "Hello World" toLowerCase()
println(a) // -2.0
println(b) // hello world
4.制御構造
スカラ座など、ごく少数内蔵の制御構造、:もし、しばらく、やる...しばらく 、ため、試して、一致して関数を呼び出します。
すべての制御構造は、結果として、いくつかの値を返すスカラ。
4.1の場合
結果は、特定の場合には返すことができます
4.2 DO /中...しばらく
やる、しばらく...単位の値手段 - 前記(への復帰中)
4.3のための
- 発現のためのフィルタを追加することができ、括弧内の式は、IF句である、複数のフィルタを追加してもよいです。
val filesHere = new File("D:\\MyProject").listFiles
// 单个过滤器
for(file <- filesHere if !file.getName.endsWith(".scala"))
println(file)
// 多个过滤器
for(file <- filesHere
if file.isFile
if !file.getName.endsWith(".scala"))
println(file)
- ネストした繰り返し
val fileHere = new File(".").listFiles()
def fileLines(file: File) = scala.io.Source.fromFile(file).getLines().toList
def grep(pattern: String) =
for (
file <- fileHere
if file.getName.endsWith(".scala");
line <- fileLines(file);
trimLine = line.trim
if trimLine.matches(pattern)
) println(file + ":" + trimLine)
grep(".*gcd.*")
- キーワードによって
yield
リターンリストの
形式:for 子句 yield 代码体
val res = for (i <- 0 to 3) yield {
i * i
}
println(res.mkString(",")) // 0,1,4,9