複数のコンパイル単位を含むファイル

,1つのファイルに複数のコンパイル単位を含めるべき重要なシチュエーションがあります。よくある例として,シールドトレイトとそのサブクラス(関数型言語で利用可能な代数的データ構造を模してよく使われます)があります。

sealed trait Option[+A]

case class Some[A](a: A) extends Option[A]

case object None extends Option[Nothing]

シールドクラス(またはトレイト)の性質から,そのサブクラスは総じて同じファイルで定義されなければなりません。したがって,こういった状況ではコンパイル単位をファイルの単位にするという嗜好は無視されます。

また別のケースとして,複数のクラスが概念を共有して,1つの論理的なグループを形成しており,同じファイルにまとまっていれば劇的に保守性が向上する場合があります。これは前述のシールドクラスの場合に比べて,予測し難いものです。一般に,ファイルを分割するよりも同じファイルに含める方が長期の保守と開発が容易になる場合は,そうした方がいい結果になります。しかし,複数のコンパイル単位が同じファイルに含まれる場合,変更を行おうとしたときに特定のコンパイル単位を見つけ出すのが難しくなると言うことも覚えておいてください。

複数のコンパイル単位を含むファイル名は全て,小文字始まりのキャメルケースとするべきです。これは非常に重要な規則です。こうすることによって,複数コンパイル単位を含むファイルを区別し,宣言を容易に探し出せる様になります。このファイル名は,その中にある特定のクラスに基づいて(e.g. 上記の例で言えば,option.scala)命名しても,またその中にあるクラスが共有する論理的性質を説明するような名前(e.g. ast.scala)にしても構いません。

前のトピックへ

ファイル

次のトピックへ

Scaladoc

このページ

別のフォーマット

貢献