Scala: различия между версиями
Содержимое удалено Содержимое добавлено
Нет описания правки |
Oleg4280 (обсуждение | вклад) {{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 ; здесь строчные и прописные буквы не различаются. ▼
▲* в восьмеричной форме, начиная с нуля: 027,
▲* в шестнадцатеричной форме, начиная с нуля и латинской буквы х или X: 0xff0a, 0xFC2D, 0x45a8, 0X77FF ; здесь строчные и прописные буквы не различаются.
В конце целой константы можно записать букву прописную L или строчную l, тогда константа будет сохраняться в формате типа
scala.Long: +25L, -0371L, OxffL, OXDFDFL . ▼
Не используйте при записи длинных целых констант строчную латинскую букву l, её легко спутать с единицей. ▼
▲Не используйте при записи длинных целых констант строчную латинскую букву l, её легко спутать с единицей.
Вещественные числа записываются только в десятичной системе счисления в двух формах: ▼
*c фиксированной точкой: 37.25, -128.678967, +27.035 ; ▼
*с плавающей точкой: 2.5е34, -0.345е-25, 37.2Е+4 ; можно писать строчную или прописную латинскую букву Е ; пробелы и скобки недопустимы.▼
▲* с плавающей точкой: 2.5е34,
В конце вещественной константы можно поставить букву F (или f), тогда константа будет сохраняться в формате типа float:
3.5F, -45.67F, 8.9e-5F.▼
===Символы===▼
▲=== Символы ===
Печатные символы записываются в одинарных кавычках: <tt>'а', 'N', '?'</tt>. ▼
▲
* <tt>'\
* <tt>'\
* <tt>'\
* <tt>'\
* <tt>'\
* <tt
* <tt>'\"'</tt> — кавычки;
* <tt><nowiki>'\''</nowiki></tt> — одинарная кавычка.
Код любого символа в кодировке Unicode набирается в апострофах после обратной наклонной черты и латинской буквы u ровно
четырьмя шестнадцатеричными цифрами: '\u0053'
Прописные русские буквы в кодировке Unicode занимают диапазон от ' \u0410 '
В какой бы форме ни записывались символы, компилятор переводит их в 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 от обычных:
* Вы можете использовать распознавание шаблонов по их имени **и** по аргументам конструктора (это очень важно). Обычный класс может быть распознан только по имени
* Новые объекты с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]]
|