Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение
Scala- это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для выражения общих шаблонов программирования в сжатой, элегантной и безопасной для типов форме, он сочетает в себе imperative-programmingи функционально-программированиестилей . Его ключевые особенности:
- Статическая печать
- Продвинутая система типов с выводом типа и декларацией на сайте
- Типы функций (включая анонимные), которые поддерживают лексические замыкания
- Шаблон сопоставления
- Неявные параметры и преобразования, которые поддерживают шаблоны типов и enrich-my-library
- Смешанная композиция
- Полная совместимость с Java
- Мощные конструкции параллелизма
- Расширенные языковые конструкции, такие как продолжения с разделителями и экспериментальная система макросов
Для получения дополнительной информации см. Официальные Введение в Scalaи Документация Scala.
Для поиска символов Scala, таких как =>
в переполнении стека, вы можете воспользоваться поиском символа.
Для поиска документации по Scala вы можете использоватьscalex.
Список доступных библиотек сообщества доступен по адресу Awesome Scala.
Существует индекс библиотеки Scala от Центра Scala: Scaladex.
Бесплатные книги и руководства по программированию Scala
- Программирование в Scala, первое издание
- Пример Scala (PDF)
- Учебник по Scala для программистов на Java
- Скала для беженцев из Явы
- Школа Скала
- Учебники по Scala
- Скала Тур
- Scala для нетерпеливых (первая часть доступна бесплатно на
Учебник Scala по переполнению стека
- Введение в Scala
- Переменные / значения
- Разница между
val
иvar
- изменяемый по сравнению с неизменным по переменной
- Как правильно назначить vals?
- Несколько переменных объявлений
- Ленивый Вальс
- Что они делают?
- < a href = "https://stackoverflow.com/questions/3041253/whats-the-hidden-cost-of-lazy-val-scala"> Как они реализованы?
- Правила идентификатора
- Методы
- Знак равенства в методах
- Обозначение оператора и правила
- Несколько способов определения метода / функции (оставьте круглые скобки в вызовах методов)
- Унарные операторы
- Несколько списков параметров
- Правоассоциативные имена методов
- Побочные эффекты без методов
- Как смешать знаки препинания с буквенно-цифровыми символами в именах методов?
- Быстрые методы (
+=
,-=
,*=
, ...) - Список имен "волшебных методов" (применить, unapply / unapplySeq, обновить)
- Именованные аргументы / необязательные параметры
- Введите вывод в типе возврата
- Разница между
##
иhashCode
- Литералы, операторы и блоки
- Разница между блоком и оператором
- Слабое соответствие
- Символы
- Разница между фигурными скобками и скобками
- Ключевое слово разыменования (обратное использование)
- Локальные определения
- Использование подчеркивания
- Правила идентификатора
- Пунктуация (оператор) обзор
- Loops / рекурсии
- Петля
- Хвостовая рекурсия
- Что такое хвостовая рекурсия?
- < a href = "https://stackoverflow.com/questions/3678569/how-to-recognize-what-is-and-what-is-not-tail-recursion"> Как написать хвостовой рекурсивный код?
- Производительность
- Правила оптимизации
- Прыжки на батуте
- Структуры данных / Коллекции
- Учебник по дизайну коллекций
- Сборник стандартной практики
- Неизменные Коллекции
- Изменчивые Коллекции
- Ленивые Коллекции
- Зачем они нужны? li>
- Просмотреть
- Итератор
- Поток
- < a href = "https://stackoverflow.com/questions/5159000/stream-vs-views-vs-iterators"> Потоки против представлений против итераторов
- Вернуть ленивую коллекцию
- Параллельные коллекции
- Конверсии
- След памяти
- Как коллекции Scala могут возвращать правильный тип коллекции из операции?
- Для понимания ,
- Перечисление
- Сопоставление с образцом
- Объяснение
- Привязка значения (
x @ X
)/ привязка типа (x: X
) - Как сделать мульти-матч
- гвардия
- Как сопоставить переменные или значения?
- Как сочетается шаблон под капотом?
- Исчерпывающая картина
- Соответствие шаблону для выражений
- Игнорировать случаи / нет значения по умолчанию
- Соединение
- Частичное совпадение с образцом
- Матч регулярное выражение
- Сопоставление с более чем одним совпадением
- Классы, объекты и типы
- Разница между
class
иobject
- Почему
object
синглтон? - Почему одноэлементные объекты более объектно-ориентированы?
- Сопутствующие объекты
- Разница между
class
иtype
- В чем разница между классом с сопутствующим объектом и классом с одинаковым именем?
- Статический инициализатор
- Перегрузка конструктора
- Статические данные в необъектах
- Как получить статический / исполняемый тип класса
- Тип проекции (
A#B
)
- Пакеты, импорт и идентификаторы видимости
- Импорт
- Пакеты
- Видимость
- Пояснение
- Частные конструкторы
- Частные переменные
- Наследование
- Объяснение
- Ранний инициализатор
- Экстракторы
- Объяснение(пример: союзы)
- Инфиксная нотация для параметров типа(
X[A, B]
=> {{X1 }})
- Тематические классы
- Объяснение
- тематические классы и перечисления
- Каковы недостатки декларирования тематических классов Scala
- Сгенерированный компилятором код для case-классов
- Параметризованные типы
- Как их объявить?
- Верхние / нижние границы
- Унифицировать цифры
- Как обойти тип стирания?
- Абстрактные типы против дженериков
- Дисперсии
- Черты
- Применение
- Смешать несколько признаков
- Черты против абстрактных классов
- Что означает
trait A <: B
? - Линеаризация
- Смешать черту с переопределенным поведением
- Динамические миксины
- Как они реализованы под капотом?
- Как получить доступ к одной из нескольких черт суперкласса?
- Самостоятельные ссылки
- Унифицировать типы
- Самообозначение имен
- Несколько самостоятельных ссылок
- Разница между собственными ссылками и подтипами
- Обработка ошибок
- Исключения
- Вариант
- Либо
- Объяснение
- < a href = "https://stackoverflow.com/questions/7131076/whats-the-deal-with-all-the-either-cruft"> Как их использовать?
- Что использовать?
- Обработка типов
- Контекст (
[A : B]
) и границы просмотра ([A <% B]
) - Типы
- Тип, не допускающий NULL
- Экзистенциальный тип
- Структурный тип ("утиный ввод")
- Тип, зависящий от пути
- Типы объединения (дизъюнкция типов) < li> Тип монады
- Составной тип в структурном типе
- < a href = "https://stackoverflow.com/questions/4355060/are-multiple-self-types-possible"> Составной тип в ссылках на себя
- Составной тип в параметризованном типе
- Аннотации
- Функции / Функциональные литералы
- Объяснение
- Функции против методов
- Проходные функции
- Карринг
- частично определённая функция
- Синтаксис заполнителя и правила их замены
- Синтаксис заполнителя с правоассоциативными методами
- Разница между
=> Type
,() => Type
иUnit => Type
- Функциональная быстрая сортировка
- Ключевое слово
return
в функциях более высокого порядка и проблема с производительностью - Композиция функций
- Затворы в Скале
- Тип безопасности
- Манифест
- Ограничения обобщенного типа (
<:<
,<%<
,=:=
) - Пути-зависимые типы
- Обеспечить разницу типов
- Не применять ограничения типа
- Implicits
- Неявные определения / параметры
- Неявные преобразования / исправления Monkey
- Идентификатор
implicitly
- Где Scala ищет последствия?
- Должны ли использоваться последствия?
- Стиль пристрастий
- Преобразование нескольких значений одним неявным преобразованием
- Последовательности цепочки
- Отражение
- Что такое TypeTag и как его использовать?
- Как работать с Reflection?
- Шаблон Enrich-my-library (ранее известный как pimp-my-library)
- Обзор параллелизма
- Актеры
- Используйте Java из Scala и наоборот
- Перебор коллекции Java
- Миграция Java в Scala
- Прозрачные преобразования полезны?
- Использование черт Scala с реализованными методами в Java
- Как работать с javap для взаимодействия Scala / Java?
- Scala подписи
- Как
abstract override
работает внутри компании?
- XML-литералы
- Объяснение
- Скала Свинг
- Объяснение
- Примеры
- Программирование типов
- Функциональная Скала
- Стоит ли неизменность?
- Является ли функциональное программирование в Scala более медленным, чем традиционное кодирование?
- ООП в чисто FP контексте?
- Продолжения
- Объяснение
- < a href = "https://stackoverflow.com/questions/2683195/how-do-i-enable-continuations-on-scala-2-8-and-beyond"> Как их активировать? li>
- Шаблоны проектирования для функционально-гибридных языков?
- Типовое программирование
- Высшие родовые типы
- Введите лямбды (
SomeType[({type λ[α] = Either[A, α]})#λ]
) - Виртуальные классы
forall
в Scala- Понимание
for comprehension
в Scala
Дальнейшее обучение
- Образовательные ресурсы
- Как я могу узнать больше о типовых отношениях Scala?
- Scala шпаргалка
- Хорошие примеры идиоматического скала кода?
- Укрепление знаний Scala
- REPL
- Работа с
scalac
иscala
- Приоритет оператора
- Скала стиль
- Принципы функционального программирования в Scala, курс по функциональному программированию на Coursera, который ведет Мартин Одерский, создатель Scala.
- Принципы реактивного программирования, курс по реактивному функциональному программированию на Coursera, который преподают Мартин Одерский, Эрик Мейер, Роланд Кун.
- Параллельное программирование, курс параллельного программирования на Coursera, читаемый Виктором Кунчаком и Александаром Прокопеком.