Подтвердить что ты не робот

Scala преимущества после закрытия Java

С закрытием, добавляемым в Java, что означает Scala преимущество над Java как выбор языка?

Может кто-нибудь уточнить какие-либо преимущества?

4b9b3361

Ответ 1

Помимо закрытий (в которых Java не отображается все, что близко к наличию), здесь приведен список функций в Scala, отсутствующих на Java. Я буду опускать библиотеки здесь и сосредоточиться на особенностях самого языка. Это не является исчерпывающим каким-либо образом, но я думаю, что он содержит большие элементы билетов.

  • Неявные параметры/преобразования
  • Соответствие шаблону, классы case
  • Тип ввода (некоторые)
  • Более высокие типы (конструкторы абстракции над типами)
  • Монадические for понятия
  • Отмеченные аннотации
  • Интерфейсы с поведением (чертами)
  • По умолчанию и названные аргументы
  • Унифицированные методы и операторы (методы могут использоваться как операторы infix, операторы могут быть перегружены, потому что это просто методы)
  • Унифицированная иерархия типов; нет примитивных типов
  • Свойства, а не геттеры и сеттеры.
  • Абстрактные значения
  • Первичные неизменные ссылки (val так же легко объявить как var s)
  • Понятия (ленивые) термины (возможно, закрытие Java сделает это достаточно легко выразить)
  • Оптимизация рекурсии хвостового вызова
  • Абстрактные типы
  • Наложение типов
  • Типы типов
  • Типы, зависящие от пути
  • Структурные типы
  • Тип ascription, в отличие от литья типов
  • Переименование импорта
  • Первоклассные модули (объекты)
  • Пакеты первого класса
  • Reified generics (manifests)
  • Ограниченные продолжения

Некоторые прохладные вторичные конструкции, которые позволяют использовать эти строительные блоки:

  • Типовые классы (через неявные параметры и более высокие типы)
  • " Pimp My Library" (через неявные преобразования)
  • Внутренние DSL (через методы перегрузки и инфикс оператора)
  • Комбинированные компоненты Parser (активируются функциями более высокого порядка и сделаны с помощью методов infix)
  • Генераторы, сопрограммы, настраиваемые структуры управления (через ограниченные продолжения)
  • Типовое программирование (через более высокие и абстрактные типы)
  • Устаревание схем инъекций зависимостей (через шаблон торта)

Наконец, я упомянул, что Scala имеет REPL (read-evaluation-print-loop) - не является самой особенностью самого языка, но это очень приятно иметь!

Ответ 2

Даже если Java 7 [8,..] будет иметь первоклассные функции в один прекрасный день, ему все еще не хватает для implicits, вывода типа, мощной библиотеки Collections, соответствия шаблонов, признаков и множества других вещей, повышающих производительность. Не говоря о различных библиотеках Actor, богатых возможностях создания DSL,...