2009-08-28 3 views

ответ

35

Go читать Daniel Spiewak's excellent blog series о Scala. С Scala вы можете сохранить:

  • все ваши Java библиотеки
  • все преимущества работы на виртуальной машины Java (вездесущности, административных инструментов, профилирование, вывоз мусора и т.д.)

Но вы можете написать Scala код:

  • более краткий и четкий, чем Java (особенно с использованием более функционального стиля, например, в библиотеке коллекций)
  • она имеет закрытия и функции, как часть языка
  • он имеет оператор перегрузки (с точки зрения использования)
  • он имеет Примеси (т.е. интерфейсы, которые содержат реализацию)
6

Я не уверен, что вы можете легко использовать Scala в ваших программах Java, как в случае «вызова класса Scala из класса Java».

Вы можете попробовать, в соответствии со статьей "Mixing Java and Scala".
Соответствующие экстракты:

Проблема заключается в том, что этапы компиляции Java и Scala разделены, вы не можете скомпилировать как Java и Scala файлы на одном дыхании.
Если ни один из ваших файлов Java не ссылается ни на какие классы Scala, вы можете сначала скомпилировать все ваши классы Java, а затем скомпилировать классы Scala.
Или, если ни один из ваших файлов Scala не ссылается ни на какие классы Java, вы можете сделать это наоборот.
Но если вы хотите, чтобы ваши классы Java имели доступ к вашим классам Scala, а также классы Scala имеют доступ к вашим классам Java, это проблема.

Scala код может легко позвонить непосредственно в Java коде, но иногда вызывая Scala код из Java кода сложнее, так как в переводе с Scala в байткод не совсем так просто, как для Java:
иногда компилятор Scala добавляет символы символов или других изменений, которые должны быть явно обработаны при вызове с Java.
Но класс Scala может реализовать интерфейс Java, и экземпляр этого класса может быть передан методу Java, ожидающему экземпляр интерфейса.
Класс Java затем вызывает методы интерфейса на этом экземпляре точно так же, как если бы это был экземпляр класса Java.

Противоположное можно, конечно, как описано в Roundup: Scala for Java Refugees, от Daniel Spiewak.

16

Кроме того, посмотрите недавнюю новость на сайте Scala: «Research: Programming Style and Productivity».

В его статье Gilles Dubochet описано, как он исследовал два аспекта стиля программирования с помощью отслеживания движения глаз.Он обнаружил, что в среднем на 30% быстрее понимают алгоритмы, которые используют для понимания и карт, как в Scala, а не те, у которых есть итеративные while-loops Java.

И еще одна ключевая цитата из новости пункта:

Алекс McGuire, который пишет критически важные проекты в Scala для торговых энергогенерирующих компаний, говорит о Scala «краткость означает, что я могу видеть больше программ на одном экране. Вы можете получить гораздо лучший обзор. Когда у меня есть математическая модель для записи с помощью Java, мне нужно сохранить две модели в моей голове, сама математическая модель, а вторая - модель того, как ее реализовать в Java. Scala одна модель, математическая, будет намного более продуктивной ».

Вы прочитали остальную часть сообщения и другие связанные элементы there.

+0

Ссылка на бумагу сломана, googling Я нашел этот http://infoscience.epfl.ch/record/138586/files/dubochet2009coco – pedrofurla

9

Я могу назвать некоторые очень четкие точки в очень простом языке из моего ограниченного опыта:

  1. Свойства. C++ и Java имели это понятие «свойство» публичной функции getter/setter, обернутое вокруг внутренней переменной класса, которая приводила к большому количеству кода шаблона. C# формализовал это как функцию реального языка и уменьшил большую часть шаблона в C# 3.0 с автоматически реализованными свойствами. Классы Scala определяют тривиальные свойства просто как обычные vals или read/write vars. Затем класс может заменить их методами get или get/set, не затрагивая код клиента. Для этого Scala предлагает самое элегантное решение с наименьшими языковыми возможностями и сложностью.

  2. В массивах используются обычные дженерики. В Java/C# дженерики были заперты как мысль после и полностью разделены, но имеют перекрывающееся поведение с массивами.

  3. Scala имеет неизменный «val» как первоклассную функцию langauge. На самом деле val похож на конечные переменные Java: верхняя ссылка неизменна, но содержимое может мутировать.

  4. Scala позволяет, если блоки, циклы for-yield и код в фигурных скобках возвращают значение. Это очень элегантно во многих ситуациях. Очень маленький плюс заключается в том, что это устраняет необходимость в отдельном тройном операторе.

  5. Scala имеет объекты singleton, а не C++/Java/C# class static. Это более чистое решение.

  6. Соответствие шаблону. Распаковка объектов. Очень приятно в большом количестве ситуаций.

  7. Собственные кортежи.

  8. Постоянные неизменные коллекции по умолчанию и встроены в стандартную библиотеку.

1

Вот некоторые преимущества использования Scala:

  • Функциональное решение проблемы всегда лучше: Это мой личный viewand открыт для конкуренции. Исключение мутации из кода приложения позволяет приложению запускаться параллельно по хостам и ядрам без каких-либо взаимоблокировок.
  • Лучшая модель параллелизма: у Scala есть модель Актера, которая лучше, чем модель блокировок Java на потоке.
  • Совместимый код: Код Scala более краткий, чем его более многословный кузен, Java.
  • Тип безопасности/статическая типизация: Scala проверяет тип во время компиляции.
  • Соответствие шаблону: Операторы case в Scala являются супер мощными.
  • Наследование: Характеристики mixin великолепны, и они определенно уменьшают повторение кода.
  • Язык, специфичный для домена (DSL): Синтаксис Scala позволяет программисту писать естественный DSL. Эта способность была тщательно встроена в оригинальный дизайн языка. Это очень мощная функция Scala. Scala test/specs строят поверх этой функции.
Смежные вопросы