記法
このテキストはScalaの基本について学ぶものですので、これ以降、Scalaのある構文に関する説明がしばしば出てきます。ここでは、構文を表すための記法について簡単に説明します。
アルファベットなどの並び
まず、以下のように、アルファベットや記号のならびがそのまま現れた場合、その文字列そのものを表します。ここでは、 if という文字列そのものを表しているわけです。
if
アルファベットなどの並びをクォートで囲んだもの
次に、アルファベットや記号の並びをクオートで囲んだものも、同様に扱います。これは後述するように、一部の文字に特別な意味をもたせるため、それとの混同を避けるために使います。以下は、先程と同じ意味です。
'if'
( と ) で囲まれた要素
なんらかの要素で、 () で囲まれたものは、グルーピングを表現します。以下は、(で始まる何らかの文字列
ではなく、 if() という文字の並びをひとまとめにしたものを表します。これは、後述する繰り返しの表現などをひとまとめにするために使います。
('if' '(' ')')
明示的に '(' や ')' としない限り、グルーピングが優先されます。
< と > で囲まれた要素
<式> のように < と > で囲んで名前をつけたものは、何らかの構文要素を表します。
<式> と書くことで、 式 という概念を表現する何らかの構文要素であることを示します。以下では、Javaの
if 文の構文の一部を表現しています。 <条件式> が何かについては触れていませんが、Javaの言語で
boolean が返ってくる式を想定しています。
if '(' <条件式> ')'
何らかの要素のあとに * が付加されたもの
何らかの要素に続いて、 * が付加されたものは、その要素が0回以上現れることを意味します。以下は、
<式> のあとに ; が来るような要素が0回以上現れることを意味します。
(<式> ;)*
ここで、 a* は a のあとに * という文字が来るのか、 a の0回以上の繰り返しなのかが曖昧です。曖昧さを解決するために、明示的に '*' としない限り、繰り返しが優先されるものとします。
何らかの要素のあとに + が付加されたもの
何らかの要素に続いて、 + が付加されたものは、その要素が1回以上現れることを意味します。以下は、
<式> のあとに ; が来るような要素が1回以上現れることを意味します。
(<式> ;)+
ここで、 a+ は a のあとに + という文字が来るのか、 a の1回以上の繰り返しなのかが曖昧です。曖昧さを解決するために、明示的に '+' としない限り、繰り返しが優先されるものとします。
何らかの要素のあとに ? が付加されたもの
何らかの要素に続いて、 ? が付加されたものは、その要素が0回または1回現れることを意味します。言い換えると、その要素はオプショナルであるということになります。以下は、
else で始まり、その次に <式> が来るような要素が0回または1回現れることを意味します。
(else <式>)?
ここで、 a? は a のあとに ? という文字が来るのか、 a の0回または1回の出現なのかが曖昧です。曖昧さを解決するために、明示的に '?' としない限り、オプショナルが優先されるものとします。
2つの要素の間に | が付加されたもの
何らかの2つの要素AとBの間に | が付加されたものは、 AとBのどちらでも良いということを意味します。以下は、 val または var のどちらでも良いことを意味します。
('val'|'var')
ここで、 a|b は a|b という3文字なのか、 a または b なのかが曖昧です。曖昧さを解決するために、明示的に '|' としない限り、 a or b という解釈が優先されます。
何らかの要素の後に ... が続くもの
任意個の要素が来るときに、最初の数個を例示し、後は同じパターンで出現することを明示するために利用します。以下は、 [ と ] で囲まれ、式が任意個続くパターンを表しています。
'[' <式1>, <式2>, ... ']'
if式の構文
以上を踏まえて、Scalaの if 式の構文を表現すると、次のようになります。
if '(' <条件式> ')' <式> ( else <式> )?
Scalaの if 式については、あとで詳しく解説します。