LoginSignup
0
0

More than 5 years have passed since last update.

Scalaの制御構文を勉強した時のメモ

Posted at

を見て学習したことのメモ

{}

{}式の一般形は

{ (<式>(;|<改行>))* }

{ println("A"); println("B"); 1 + 2 }

改行を入れればセミコロンを省略することができます。

{
println("A")
println(("B")
1 + 2
}

返り値は最後に評価された式になる。(この場合3)

if式

if (条件式) {
  式
} else if (条件式) {
  式
} else {
  式
}

elseの部分は省略可能で、その場合に条件が一致しなかった時はUnit型の値が帰ってくる

Unit型はJavaではvoidに相当するもので、返すべき値がないときに使われ、唯一の値()を持ちます。
https://dwango.github.io/scala_text/control-syntax.html

while式

while (条件式) {
  
}

または

do {
  
} while(条件式)

条件式のところはBoolean型である必要がある。

for式


for (ジェネレータ) {
  
}

ジェネレータとは変数名 <- expで書くことができる。
具体的には

for (x<- 1 to 5) {
  println(x)
}

=>
1
2
3
4
5

toとuntilがあり

1 to 5 (1,2,3,4,5)
1 until 5 (1,2,3,4)

for ()のなかでifを使うこともできて条件に合致するものだけを取り出すことができる。

Listを使った処理

for(e <- List("A", "B", "C", "D", "E")) println(e)のように書くとListの中身一つ一つに対して処理することができる。

さらにyieldを付け加えることで配列に変更を加えたものを得ることもできる。

for(e <- List(("A", "B", "C", "D", "E")) yield {
  "This is" + e
} 

match式

複数の分岐を表現できる制御構造

val taro = "Taro"

taro match  {
  case "Taro" => "Male"
  case "Kenshi" | "Takeshi" => "Male" #処理をまとめる
  case "Nanami" => "Female"
  case "Haruki" if 条件式 => "Female"
  case _ => "Other"  #何にもマッチしなかった時
}

のように書くことができる。

パターンマッチによる値の取り出し

val list = List("A", "B", "C")

list match {
  case List("A", b, c) =>
    #listの最初が"A"の時の処理b,cにはlistの同じ位置にある値が格納されている
  case _ =>
     println("nothing")
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0