Scala: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
{{BookCat}} плюс викификация
Строка 1:
{{Wp|Scala (язык программирования)}}
'''Scala''' чистый объектно-ориентированный язык в том смысле, что всё, включая числа и функции, является объектами.
 
== Первая программа ==
Вывод приветствия в консоли:
<source lang="scala">
Строка 11 ⟶ 12 :
</source>
 
== Идентификаторы ==
Имена могут иметь 4 формы.
 
* Буква, за которой последовательность букв, цифр и знака _: <tt>xRoom10a, foldl_:</tt>
* Операторный символ, за которым последовательность операторных символов: +, --,
* Первая и вторая формы разделенные '_': <tt>foldl_:</tt>
* Любая последовательность символов в апострофах: <tt>`def`, `yield`, `1+1=2`</tt>.
 
Символ $ используется компилятором и в программах он использоваться не должен.
Строка 36 ⟶ 37 :
<source lang="Scala">Thread.`yield`()</source>.
 
== Комментарии ==
За двумя наклонными чертами подряд //, без пробела между ними, начинается комментарий, продолжающийся до конца строки.
 
За наклонной чертой и звездочкой /* начинается комментарий, который может занимать несколько строк, до звездочки и наклонной черты */ (без пробелов между этими знаками).
 
За наклонной чертой и двумя звездочками /** начинается комментарий для документирования, который может занимать несколько строк, до звездочки и наклонной черты */ (без пробелов между этими знаками). Такой комментарий может обрабатываться программой scaladoc, она извлекает эти комментарии в отдельные файлы формата HTML и создает гиперссылки между ними. Так программа самодокументируется. В такой комментарий можно вставить указания программе javadoc , которые начинаются с символа @.
 
<source lang="scala">
Строка 58 ⟶ 59 :
Звездочки в начале строк не имеют никакого значения, они написаны просто для выделения комментария.
 
== Литералы ==
===Числа===
Целые константы можно записывать в трех системах счисления:
 
=== Числа ===
*в десятичной форме: +5, -7, 12345678 ;
Целые константы можно записывать в трех системах счисления:
*в восьмеричной форме, начиная с нуля: 027, -0326, 0777 ; в записи таких констант недопустимы цифры 8 и 9;
*в шестнадцатеричной форме, начиная с нуля и латинской буквы х или X: 0xff0a, 0xFC2D, 0x45a8, 0X77FF ; здесь строчные и прописные буквы не различаются.
 
* в десятичной форме: +5, -7−7, 12345678 ;
Целые константы хранятся в формате типа scala.Int.
* в восьмеричной форме, начиная с нуля: 027, -0326−0326, 0777 ; в записи таких констант недопустимы цифры 8 и 9;
* в шестнадцатеричной форме, начиная с нуля и латинской буквы х или X: 0xff0a, 0xFC2D, 0x45a8, 0X77FF ; здесь строчные и прописные буквы не различаются.
 
В конце целойЦелые константы можно записать букву прописную L или строчную l , тогда константа будет сохранятьсяхранятся в формате типа scala.Int.
 
В конце целой константы можно записать букву прописную L или строчную l, тогда константа будет сохраняться в формате типа
scala.Long: +25L, -0371L, OxffL, OXDFDFL .
 
scala.Long: +25L, -0371L−0371L, OxffL, OXDFDFL .
Не используйте при записи длинных целых констант строчную латинскую букву l, её легко спутать с единицей.
 
Не используйте при записи длинных целых констант строчную латинскую букву l, её легко спутать с единицей.
Вещественные числа записываются только в десятичной системе счисления в двух формах:
 
Вещественные числа записываются только в десятичной системе счисления в двух формах:
*c фиксированной точкой: 37.25, -128.678967, +27.035 ;
*с плавающей точкой: 2.5е34, -0.345е-25, 37.2Е+4 ; можно писать строчную или прописную латинскую букву Е ; пробелы и скобки недопустимы.
 
* c фиксированной точкой: 37.25, -128−128.678967, +27.035 ;
Вещественные константы хранятся в формате типа scala.Double.
* с плавающей точкой: 2.5е34, -0−0.345е-25, 37.2Е+4 ; можно писать строчную или прописную латинскую букву Е ; пробелы и скобки недопустимы.
 
В конце вещественнойВещественные константы можно поставить букву F (или f), тогда константа будет сохранятьсяхранятся в формате типа float: scala.Double.
 
В конце вещественной константы можно поставить букву F (или f), тогда константа будет сохраняться в формате типа float:
3.5F, -45.67F, 8.9e-5F.
 
3.5F, -45−45.67F, 8.9e-5F.
===Символы===
 
=== Символы ===
Печатные символы записываются в одинарных кавычках: <tt>'а', 'N', '?'</tt>.
 
УправляющиеПечатные символы записываются в одинарных кавычках: с<tt>'а', обратной наклонной чертой:'N', '?'</tt>.
 
*<tt>'\n'</tt> — символ перевода строки;
ПечатныеУправляющие символы записываются в одинарных кавычках: <tt>'а',с 'N',обратной '?'</tt>.наклонной чертой:
*<tt>'\r'</tt> — символ возврата каретки;
* <tt>'\fn'</tt>  — символ перевода страницыстроки;
* <tt>'\br'</tt>  — символ возврата на шагкаретки;
* <tt>'\tf'</tt>  — символ горизонтальнойперевода табуляциистраницы;
* <tt>'\\b'</tt>  обратнаясимвол наклоннаявозврата черта;на шаг;
* <tt>'\"t'</tt>  кавычки;символ горизонтальной табуляции;
* <tt><nowiki>'\'\'</nowiki></tt>  одинарнаяобратная кавычка.наклонная черта;
* <tt>'\"'</tt> — кавычки;
* <tt><nowiki>'\''</nowiki></tt> — одинарная кавычка.
Код любого символа в кодировке Unicode набирается в апострофах после обратной наклонной черты и латинской буквы u ровно
четырьмя шестнадцатеричными цифрами: '\u0053'  — буква S, '\u0416'  — буква Ж.
Прописные русские буквы в кодировке Unicode занимают диапазон от ' \u0410 '  — заглавная буква А , до ' \u042F '  — заглавная Я, строчные буквы от ' \u0430 '  — а , до ' \u044F '  — я .
 
В какой бы форме ни записывались символы, компилятор переводит их в Unicode, включая и исходный текст программы.
Символы хранятся в формате типа scala.Char.
 
=== Строки ===
Строки символов заключаются в кавычки. Управляющие символы и коды записываются в строках точно так же, с обратной наклонной
чертой, но, разумеется, без одинарных кавычек, и оказывают то же действие.
Строки могут располагаться только на одной строке исходного кода, нельзя открывающие кавычки поставить на одной строке,
а закрывающие  — на следующей.
 
Примеры:
 
"Это строка\nс переносом"
Строка 119 ⟶ 121 :
Многострочные строки заключаются в тройные кавычки.
 
Пример:
 
"""строка
Строка 125 ⟶ 127 :
линиях"""
 
=== Логический тип ===
Булевские литералы записываются: true и false. Булевские константы хранятся в классе scala.Boolean.
==Операции==
 
== Операции ==
==Сокращения==
 
== Сокращения ==
type byte=scala.Byte
type short=scala.Short
Строка 140 ⟶ 143 :
type String=java.lang.String
 
== Методы ==
Методы начинаются с зарезервированного слова <tt>def</tt>. Потом пишется его сигнатура (имя, список параметров и опционально тип возвращаемого значения), ставится знак '=', затем тело метода.
 
== Классы ==
Определение класса:
<source lang="scala">
Строка 153 ⟶ 156 :
Аргументы класса становятся аргументами конструктора, когда мы создаем новый объект этого класса: <code>new Complex(23.4,56.7)</code>.
Этот класс содержит два метода <tt>re</tt> и <tt>im</tt>, дающих доступ к действительной и мнимой части числа. Тип возращаемого значения этих методов не задан явно. Он автоматически выводится компилятором, который смотрит на правую часть методов и решает, что тип обоих методов <code>double</code>.
 
== Case classes ==
Отличия сase classes от обычных:
* Вы можете использовать распознавание шаблонов по их имени **и** по аргументам конструктора (это очень важно). Обычный класс может быть распознан только по имени - — any condition on its members have to be in the guard clause.
* Новые объекты сase class могут быть созданы без ключего слова <tt>new</tt>.
* Все аргументы конструктора доступны извне используя автоматически созданные одноименные функции доступа.
* Метод <tt>toString</tt> автоматически переопределяется так, чтобы печатать имя сase class и все его аргументы.
* Метод <tt>equals</tt> автоматически переопределяется так, чтобы сравнивать два объекта по аргументам конструктора.
Case class не может наследовать сase class. Тем не менее, сase class может быть абстрактным.
 
== Коллекции ==
'''Генерация коллекции типа IndexedSeq[+A]:'''
<source lang="java">
Строка 169 ⟶ 173 :
val coll2 = for(i<- 1.to(10)) yield i
</source>
 
{{Wp|Scala (язык программирования)}}
 
[[Категория:Языки программирования]]
{{BookCat}}
 
[[en:Scala]]