0Pricing
Scala for Backend Engineering & Functional Programming · レッスン

重要なインデント

中括弧を省略できます。

「重要なインデント」は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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 重要なインデント
  2. Scala 3 の enum
  3. Opaque Types
  4. Union型とIntersection型
← Scala for Backend Engineering & Functional Programmingに戻る