Что является настолько большим о Scala? [закрытый]

IntelliJ в настоящее время не поддерживает giter8 напрямую. Если вы хотите его увидеть, проголосуйте за этот выпуск на IntelliJ Scala YouTrack.

31
задан Don Werve 7 April 2009 в 18:41
поделиться

11 ответов

Вот некоторые вещи, которые заставили меня одобрить Scala (скажем, обычный Java):

a) Вывод типа. Java способ сделать его:

Map<Something, List<SomethingElse>> list = new HashMap<Something, List<SomethingElse>>()

.. является довольно подробным по сравнению с Scala. Компилятор должен смочь понять это при предоставлении одного из этих списков.

b) Функции первого порядка. Снова, эта функциональность может быть эмулирована с классами, но это ужасно.

c) Наборы, которые имеют map и fold. Эти два соединяются с (b), и также эти два - что-то, чего я желаю в течение каждого раза, когда я должен записать Java.

d) Сопоставление с образцом и классы случая.

e) Различия, которые означают это если S extends T, затем List[S] extends List[T] также.

Добавьте некоторое статическое совершенство типов также, и я был продан на языке довольно быстро.

33
ответ дан 27 November 2019 в 21:23
поделиться

Вот являются некоторые справедливо подробно объяснениями обращения функциональных языков.

Как/почему делают функциональные языки (конкретно Erlang) масштабируются хорошо?

1
ответ дан 27 November 2019 в 21:23
поделиться

Предположительно, очень легко сделать код Scala выполненным одновременно на нескольких процессорах.

4
ответ дан 27 November 2019 в 21:23
поделиться

Выраженность потока управления. Например, очень часто есть набор данных, который нужно каким-то образом обрабатывать. Это может быть список сделок, в которых обработка включает в себя группирование по некоторым свойствам (валютам инвестиционных инструментов) и последующее суммирование (возможно, для получения итогов по каждой валюте).

В Java это подразумевает выделение фрагмент кода для группировки (несколько строк цикла for), а затем еще один фрагмент кода для суммирования (другой цикл for). В Scala такого рода вещи обычно достижимы в одной строке кода, используя функциональное программирование, а затем сворачивание, что очень выразительно читает l-to-r.

Конечно, это всего лишь аргумент для функционального языка поверх Java.

4
ответ дан 27 November 2019 в 21:23
поделиться

Just shortly:

  • You get the power and platform-independency of the Java libraries, but without the boilerplate and verbosity.
  • You get the simplicity and productivity of Ruby, but with static typing and compiled bytecode.
  • You get the functional goodnesses and concurrency support of Haskell, but without complete paradigm shift and with the benefits of object-orientation.

What I find especially attractive in all of its magnificient features, among others:

  • Most of the object-oriented design patterns which require loads of boilerplate code in Java are supported natively, e.g. Singleton (via objects), Adapter, Decorator (via traits and implicits), Visitor (via pattern matching), Strategy (via closures) etc.
  • You can define your domain models and DSLs very concisely, then you can extend them with the necessary features (notification, association handling; parsing, serialization), without the need of code generation or frameworks.
  • And finally, there is full interoperability with the well-supported Java platform. You can mix Java and Scala in both directions. There is not much penalty nor compatibility problems when switching to Scala after having experienced the annoyances of Java which make code hard to maintain.
6
ответ дан 27 November 2019 в 21:23
поделиться

Это смесь лучших битов из кучи языков, что не полюбить:

  • Лаконичный синтаксис Ruby
  • Производительность Java
  • Поддержка актеров Эрланга
  • Closures/Blocks
  • Удобное сокращение для карт и массивов
24
ответ дан 27 November 2019 в 21:23
поделиться

Я плохо знаком с Scala, но мое впечатление:

Действительно хорошая интеграция JVM будет ведущим фактором. JRuby может назвать Java, и Java может назвать код JRuby, но он явно звонит на другой язык, не чистую интеграцию Scala-Java. Таким образом, можно пользоваться библиотеками Java и даже смешиванием и подгонкой в том же проекте.

Я начал смотреть на scala, когда у меня было понимание, что вещью, которая будет управлять следующим большим языком, является легкий параллелизм. JVM имеет хороший параллелизм с точки зрения производительности. Я уверен, что кто-то скажет, что Erlang лучше, но Scala на самом деле применим нормальными программистами.

То, где Java падает, - то, что это является именно так крайне подробным. Требуется слишком много символов, чтобы создать и передать Функтор. Scala позволяет передавать функции как аргументы.

Не возможно в Java создать тип объединения или применить интерфейс к существующему классу. Они оба легки в Scala.

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

Способность расширить язык. Это было вещью, которая сохранила Lisp, идущий в течение многих десятилетий и того позволенного Ruby on Rails.

15
ответ дан 27 November 2019 в 21:23
поделиться

Я хочу добавить, что природа мультипарадигмы (OO и FP) дает Scala преимущество над другими языки

3
ответ дан 27 November 2019 в 21:23
поделиться

The type system really is Scala's most distinguishing feature. It also has a lot of syntactic conveniences over, say, Java.

But for me, the most compelling features of Scala are:

In effect, these features let you approximate (and in some ways surpass) Haskell's type classes. Combined, they let you write exceptionally modular code.

10
ответ дан 27 November 2019 в 21:23
поделиться

Если мы откажемся от обсуждения функции и поговорим о стиле, я бы сказал, что это трубчатый стиль кодирования. Вы начинаете с какого-то объекта или коллекции, вводите точку и свойство или точку и преобразование и делаете это до тех пор, пока не сформируете желаемый результат. Таким образом, легко написать цепочку трансформирований, которые также будет легко прочитать. Трейты до некоторого расширения также позволят вам применить тот же подход к построению типов.

1
ответ дан 27 November 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: