記法

このテキストは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|ba|b という3文字なのか、 a または b なのかが曖昧です。曖昧さを解決するために、明示的に '|' としない限り、 a or b という解釈が優先されます。

何らかの要素の後に ... が続くもの

任意個の要素が来るときに、最初の数個を例示し、後は同じパターンで出現することを明示するために利用します。以下は、 [] で囲まれ、式が任意個続くパターンを表しています。

'[' <式1>, <式2>, ... ']'

if式の構文

以上を踏まえて、Scalaの if 式の構文を表現すると、次のようになります。

if '(' <条件式> ')' <式> ( else <式> )?

Scalaの if 式については、あとで詳しく解説します。

results matching ""

    No results matching ""