コメントを記述する方法

Scala 3.3.4
最終更新:2020年7月8日

[AD] Scalaアプリケーションの開発・保守は合同会社ミルクソフトにお任せください

この記事では、Scalaのコードにコメントを付記する方法について解説します。

一行だけのコメントを書く方法と、複数行のコメントを書く方法があります。

さらに言語仕様書の読み方についても簡単に解説します。

スラッシュ2本 // で一行コメントを記述する

一行だけのコメントを書くにはスラッシュ2本 // を記述します。
書いた箇所より右側、行末までが全てコメントアウトされます。

// ここはコメントになります println("ここはコメントになりません") // ここはコメントになります

これはJavaのコメントと同様です。

複数行コメントを書くには /**/ で挟む

複数行のコメントを書くには、コメントアウトしたい箇所を 開始記号 /* と終了記号 */ で挟みます。

/* ここはコメントになります */

これもJavaのコメントと同様です。

複数行コメントは入れ子にできる

実は、複数行のコメントは入れ子にすることができます。

この挙動はJavaとは異なります。
Javaでは複数行コメントを入れ子にすることはできません。

/* ここはコメントになります /* ここもコメントになります */ なんと、ここもコメントになります! */

このページ上では正しくシンタックスハイライトされていませんが、問題ありません。
IntelliJ IDEAでは正しくシンタックスハイライトされます。

ただし、以下のような例はコンパイルエラーとなります。
開始記号 /* と終了記号 */ を一対一で対応させる必要があります。

/* ここはコメントになります */ 対応する開始記号がないのでコンパイルエラーになります */ def someCode = ??? /* /* 対応する終了記号がないのでコンパイルエラーになります */

言語仕様書を読んでみる

次に、Scalaの言語仕様書のコメントにまつわる部分を読んでみましょう。

Scalaの言語仕様書とは、Scalaの書き方を定義している文書です。
オンラインで公開されています。

Scalaの言語仕様書と聞くととても難しそうですが、コメントにまつわる仕様はとても簡単なので、誰にでも読めます。
これを機に仕様書の世界に足を踏み入れてみましょう。

言語仕様書のコメントに関する部分は、第1章第4節に記述されています。

Comments come in two forms:

A single-line comment is a sequence of characters which starts with // and extends to the end of the line.

A multi-line comment is a sequence of characters between /* and */. Multi-line comments may be nested, but are required to be properly nested. Therefore, a comment like /* /* */ will be rejected as having an unterminated comment.

コメントに関する記述はこれだけです。
この記事で説明してきた内容がそのまま述べられています。

また、第13章にはこの内容がBNFによって要約されています。
(ページ内検索で"comment"と検索すると見つけやすいです)

EBNF
comment ::= ‘/*’ “any sequence of characters; nested comments are allowed” ‘*/’ | ‘//’ “any sequence of characters up to end of line”

Scalaの言語仕様書は「EBNF(拡張バッカス・ナウア記法)」で記述されています。
EBNFは単に「BNF」と呼ばれることが多いです。

::= という記号は、「左辺の記号(symbol)は右辺のように定義して表すこととする」という意味の記号です。
また、2行目冒頭の|は、「または」という意味の記号です。

つまり言語仕様書には「コメントは ◯◯◯ または △△△ のように定義して表すこととする」と書いてあるというわけです。

今度は ◯◯◯ の部分についてみてみましょう。

EBNF
‘/*’ “any sequence of characters; nested comments are allowed” ‘*/’

シングルクォーテーション ' で囲んだ部分はそのような文字列を意味します。
ここでは前に /*、後ろに*/ が付いているので、これらをそれぞれ開始記号と終了記号として囲んでくれという意味になります。

開始記号と終了記号によって、ダブルクォーテーションで囲まれた文字列が記述されています。
どんな文字列でもOK、入れ子にしてもOKという内容が書かれています。

このようにして内容を " で囲んでBNF上もそういう意味にするというのは厳密にはBNFではないのですが、正しく表すと読みにくいのでこう書かれています。
Scalaの言語仕様書はこのように一般の開発者へ向けて適度に読みやすさに配慮して書かれています。

さらに △△△ の部分についてみてみましょう。

EBNF
‘//’ “any sequence of characters up to end of line”

'//' の後ろに文字列が記述されています。 ここには「行末までどんな文字列でもOK」と書かれています。

これで情報は出揃いました。
言語仕様書のコメントに関する部分を書き下すと以下のようになります。

「コメントは /*どんな文字列でもOK、入れ子にしてもOK*/ または //行末までどんな文字列でもOK のように定義して表すこととする」

コメントに関する言語仕様が意外と簡単であること、あるいは言語仕様は意外と読めることについてお分かりいただけたと思います。

まとめ

一行コメントを記述するにはスラッシュ2本 //を使用します。

また、複数行コメントを記述するには /* */ を使用しましょう。

サイト内検索