Scala в примерах: различия между версиями
Содержимое удалено Содержимое добавлено
Annayudi (обсуждение | вклад) |
Annayudi (обсуждение | вклад) →Использованные элементы языка: — перевод параграфа |
||
Строка 881:
Программы Scala — это последовательности символов Unicode. Мы различаем следующие множества символов:
* пробел, табуляция или символ
* буквы от
* цифры от
* разделители: <tt>. , ; ( ) { } [ ] \ " '</tt>,
*
=== Лексемы ===
<pre>
идентификатор = буква {буква | цифра}
| оператор {оператор}
|
</pre>
Литералы — те же, что и в Java. Они определяют числа, символы, строки и булевские величины. Примеры литералов: <tt>0</tt>, <tt>1.0e10</tt>, <tt>'x'</tt>, <tt>"he said "hi!""</tt> или <tt>'''true'''</tt>.
Идентификаторы могут быть двух видов. Они начинаются либо с буквы, за которой идет (возможно, пустая) последовательность букв и символов, либо с операторного символа, за которым идет (возможно, пустая) последовательность операторных символов. Оба вида идентификаторов могут содержать символы подчеркивания. За символом подчеркивания могут идти идентификатры любого типа. Например, следующие идентификатры корректны: <tt>x Room10a + -- foldl_: +_vector</tt>.
Это следует из правила, что следующие друг за другом оператор и идентификатор должны разделяться пробелом. Например, ввод <tt>x+-y</tt> будет распознан как последовательность из трех токенов <tt>x</tt>, <tt>+-</tt>, <tt>y</tt>. Если мы хотим выразить сумму <tt>x</tt> и значения <tt>-y</tt>, нам нужно добавить по крайней мере один пробел: <tt>x+ -y</tt>.
Символ <tt>$</tt> зарезервирован для идентификаторов, сгенерированных компилятором, он не должен использоваться в исходном коде программы.
Следующие слова зарезервированы, их нельзя использовать в качестве идентификаторов:
{| class="simple" border="0"
| width="20%"|'''abstract'''
| width="20%"|'''case'''
| width="20%"|'''catch'''
| width="20%"|'''class'''
|'''def'''
|-
|'''do'''
|'''else'''
|'''extends'''
|'''false'''
|'''final'''
|-
|'''finally'''
|'''for'''
|'''if'''
|'''implicit'''
|'''import'''
|-
|'''match'''
|'''new'''
|'''null'''
|'''object'''
|'''override'''
|-
|'''package'''
|'''private'''
|'''protected'''
|'''requires'''
|'''return'''
|-
|'''sealed'''
|'''super'''
|'''this'''
|'''throw'''
|'''trait'''
|-
|'''try'''
|'''true'''
|'''type'''
|'''val'''
|'''var'''
|-
|'''while'''
|'''with'''
|'''yield'''
|}
<tt>_ : = => <- <: <% >: # @</tt>
=== Типы ===
<pre>
Тип = ПростойТип | ТипФункции
ТипФункции = ПростойТип '=>' Тип | '(' [Типы] ')' '=>' Тип
ПростойТип = Byte | Short | Char | Int | Long | Float | Double | Boolean | Unit | String
Типы = Тип {',' Тип}
</pre>
Типы могут быть:
* числовыми типами <tt>Byte</tt>, <tt>Short</tt>, <tt>Char</tt>, <tt>Int</tt>, <tt>Long</tt>, <tt>Float</tt> и <tt>Double</tt> (такие же, как в Java),
* типом <tt>Boolean</tt> со значениями <tt>'''true'''</tt> и <tt>'''false'''</tt>,
* типом <tt>Unit</tt> с единственным значением <tt>()</tt>,
* типом <tt>String</tt>,
* типами функций, как <tt>(Int, Int) => Int</tt> или <tt>String => Int => String</tt>.
=== Выражения ===
<pre>
Выражение = ИнфиксноеВыражение | Функция | if '(' Выражение ')' Выражение else Выражение
ИнфиксноеВыражение = ПрефиксноеВыражение | ИнфиксноеВыражение Оператор ИнфиксноеВыражение
Оператор = идентификатор
ПрефиксноеВыражение = ['+' | '-' | '!' | '~'] ПростоеВыражение
ПростоеВыражени = идентификатор | литерал | ПростоеВыражение '.' идентификатор | Блок
Функция = (Связывания | Id) '=>' Выражение
Связывания = '(' Связывание {',' Связывание } ')'
Связывание = идентификатор [':' Тип]
Блок = '{' {Определение ';'} Выражение '}'
</pre>
Выражения могут быть:
* идентификаторами, как <tt>x</tt>, <tt>isGoodEnough</tt>, <tt>*</tt> или <tt>+-</tt>,
* литералами, как <tt>0</tt>, <tt>1.0</tt> или <tt>"abc"</tt>,
* выборами поля или метода, как <tt>System.out.println</tt>,
* применениями функций, как <tt>sqrt(x)</tt>,
* применениями операторов, как <tt>-x</tt> или <tt>y + x</tt>,
* условиями, как <tt>'''if''' (x < 0) -x '''else''' x</tt>,
* блоками, как <tt>{ '''val''' x = abs(y) ; x * 2 }</tt>,
* анонимными функциями, как <tt>x => x + 1</tt> или <tt>(x: Int, y: Int) => x + y</tt>.
=== Определения ===
<pre>
Определение = ОпределениеФункции | ОпределениеЗначения
ОпределениеФункции = 'def' идентификатор {'(' [Параметры ] ')'} [':' Тип] '=' Выражение
ОпределениеЗначения = 'val' идентификатор [':' Тип] '=' Выражение
Параметры = Параметр {',' Параметр}
Параметр = идентификатор ':' ['=>'] Тип
</pre>
Определения могут быть:
* определениями функций, как <tt>'''def''' square(x: Int): Int = x * x</tt>,
* определениями значений, как <tt>'''val''' y = square(2)</tt>.
= Классы и объекты =
|