重要なインデント
中括弧を省略できます。
「重要なインデント」はCoddyKit上の無料Scala for Backend Engineering & Functional Programmingレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはScala for Backend Engineering & Functional Programming学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
省略可能な波括弧
Scala 3では、意味のあるインデント(省略可能な波括弧構文とも呼ばれます)が導入されました。ブロックを{ }で囲む代わりに、インデントで区切れます。
- 波括弧も引き続き使用でき、完全に有効です。
- インデントベースのコードは、Pythonのようにすっきり書けます。
object Main:
def main(args: Array[String]): Unit =
println("No braces needed")インデントされたメソッド本体
=に続くメソッド本体は、インデントされたブロックにできます。同じインデントレベルにある各文が、その本体に属します。
最後の式が戻り値になります。
object Main:
def square(x: Int): Int =
val result = x * x
result
def main(args: Array[String]): Unit =
println(square(5))インデントされたif式
制御構造では、新しい簡潔な構文を使います。if cond thenの後で分岐をインデントし、elseはifと同じ位置にそろえます。
- 波括弧を使わない形式では、
thenが必要です。 - 条件を括弧で囲む必要はありません。
object Main:
def main(args: Array[String]): Unit =
val n = 7
val label =
if n % 2 == 0 then "even"
else "odd"
println(label)インデントされたforループ
forループでは、副作用を実行する場合はdoを、コレクションを構築する場合はyieldを使います。どちらもインデントと組み合わせます。
object Main:
def main(args: Array[String]): Unit =
for i <- 1 to 3 do
println(s"line $i")
val doubled =
for i <- 1 to 3 yield i * 2
println(doubled)インデントされたwhileループ
whileループでは、doの後に、省略可能な波括弧形式のインデントされたブロックを続けます。
object Main:
def main(args: Array[String]): Unit =
var i = 0
while i < 3 do
println(s"i = $i")
i += 1インデントされたmatch式
パターンマッチングは、自然にインデントと組み合わせられます。case節をmatchの下にインデントします。
object Main:
def describe(n: Int): String =
n match
case 0 => "zero"
case 1 => "one"
case _ => "many"
def main(args: Array[String]): Unit =
println(describe(1))
println(describe(9))クラスとトレイトの本体
クラス、トレイト、オブジェクトでも波括弧を省略できます。ヘッダーの後にコロン:を置くと、インデントされた本体が始まります。
class Point(x: Int, y: Int):
def show: String = s"($x, $y)"
object Main:
def main(args: Array[String]): Unit =
println(Point(2, 3).show)endマーカー
長いインデントブロックでは、定義の終わりを明確にするためにendマーカーを追加できます。大きなメソッドやクラスの可読性が向上します。
- 形式:
end <name>、またはend if、end whileなど - 省略可能ですが、コンパイラーによって検査されます。
object Main:
def greet(name: String): String =
val msg = s"Hello, $name"
msg
end greet
def main(args: Array[String]): Unit =
println(greet("Ada"))
end main
end Main波括弧とインデントの混在
2つのスタイルは自由に混在できます。入れ子が深い場合の明確さを保つため、波括弧を使うチームもあります。インデントの規則が適用されるのは、波括弧がない部分だけです。
object Main:
def main(args: Array[String]): Unit = {
val xs = List(1, 2, 3)
val total =
xs.foldLeft(0)((acc, x) => acc + x)
println(total)
}インデントでよくある落とし穴
インデントには意味があるため、一貫性を保ってください。
- スペースを使い、タブとスペースを混在させないでください。
- 行の位置がずれると、ブロックの外側にあると解釈されることがあります。
- テンプレート本体(クラスやオブジェクト)にはコロン
:が必要ですが、=の後に続くメソッド本体には必要ありません。
object Main:
def main(args: Array[String]): Unit =
val items = List("a", "b")
items.foreach: item =>
println(item.toUpperCase)波括弧を減らした引数構文
Scala 3では、コロンの後にブロック引数を渡すこともできます。items.foreach: x =>と書くと、インデントされたラムダ本体が始まり、入れ子になった括弧や波括弧を避けられます。
object Main:
def main(args: Array[String]): Unit =
val nums = List(1, 2, 3, 4)
val evens = nums.filter: n =>
n % 2 == 0
println(evens)確認問題
意味のあるインデントについて理解度を確認しましょう。
まとめ
Scala 3の意味のあるインデントについて学びました。
- ブロックには
{ }の代わりにインデントを使えます。 - 制御構造では
then、do、yieldを使います。 - クラス、オブジェクト、トレイトの本体はコロン
:で始まります。 endマーカーで長いブロックを明確にできます。- 2つのスタイルは混在できますが、スペースの使い方は一貫させてください。
object Main:
def main(args: Array[String]): Unit =
for i <- 1 to 2 do
if i == 1 then println("first")
else println("second")
end main
end Mainよくある質問
「重要なインデント」レッスンは無料ですか?
はい。「重要なインデント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Scala for Backend Engineering & Functional Programmingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Scala for Backend Engineering & Functional Programmingコースには全4レッスンが含まれています。
「重要なインデント」で何を学びますか?
中括弧を省略できます。 ブラウザで直接実行するハンズオンコードでScala for Backend Engineering & Functional Programmingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Scala for Backend Engineering & Functional Programmingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのScala for Backend Engineering & Functional Programmingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「重要なインデント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このScala for Backend Engineering & Functional Programmingレッスンでコードを書いて実行できますか?
はい。すべてのScala for Backend Engineering & Functional Programmingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。