削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎if: if式は、条件式に基づいて分岐し、if式の値は分岐先の式の値です。
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
215 行
if-expr := if '(' 条件式 ')' 式1 [ else 式2 ]
</syntaxhighlight>
: 条件式は、Boolean 型でなければいけません。
: <code>else 式2</code>の部分はオプショナルで、省略され条件式が false であった場合、if式はUnit 型の値 <code>()</code> 単位ユニットが式の値となります(要素個数ゼロのタプルです)。
: elseif elsif のたぐいはないので、<code>else if (条件式2) 式3</code> と続けます。
;[https://paiza.io/projects/y8p_q50uEL2IE71JfNrxNw?language=scala if式の例]:<syntaxhighlight lang=Scala line>
object Main extends App {
val i = 0
247 ⟶ 248行目:
==== match ====
C言語のswicth文は、式と一致するリテラルのラベルへの多方向GOTO文ですが、Scalaのmatch式はパターンマッチングに基づいています。
 
;構文:<syntaxhighlight lang=ebnf>
match-expr := 式 match ’{’
( パターン => 式 )+
’}’
</syntaxhighlight>
: 式の値に、合致するパターンはないか上から順に走査し、合致したパターン対応する式が評価され、この値がmatch式の値となります。
: 式に対して、パターンがどれも合致しないとコンパイル時のフロー解析の結果わかった場合、コンパイルエラーになります。
: このため、全てにマッチするパターン _ が最後に置かれることが常となります。
:: ただし式が、Boolean や enum の場合は、網羅チェックを台無しにするので _ を使うべきではありません。
;[https://paiza.io/projects/kMzZMXaBj2rARbop3Lcn0A?language=scala match式の例]:<syntaxhighlight lang=Scala line>
object Main extends App {
val n = 10
 
n match {
case 1 => println("壱")
case 2 => println("弐")
case 3 => println("参")
case _ => println("多数")
}
println({
n match {
case 1 => "一"
case 2 => "二"
case 3 => "三"
case _ => "膨大"
}
})
println({
n match {
case 1 => "一"
case 2 => "二"
case 3 => "三"
// case _ => "膨大" // ここをコメントにしてしまうと、網羅性がほころびコンパイルエラーになる
}
})
}
</syntaxhighlight>
;実行結果:<syntaxhighlight lang=text>
多数
膨大
膨大
</syntaxhighlight>
 
=== 反復 ===
==== while ====