IntelliJ в настоящее время не поддерживает giter8 напрямую. Если вы хотите его увидеть, проголосуйте за этот выпуск на IntelliJ Scala YouTrack.
Вот некоторые вещи, которые заставили меня одобрить 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]
также.
Добавьте некоторое статическое совершенство типов также, и я был продан на языке довольно быстро.
Вот являются некоторые справедливо подробно объяснениями обращения функциональных языков.
Как/почему делают функциональные языки (конкретно Erlang) масштабируются хорошо?
Предположительно, очень легко сделать код Scala выполненным одновременно на нескольких процессорах.
Выраженность потока управления. Например, очень часто есть набор данных, который нужно каким-то образом обрабатывать. Это может быть список сделок, в которых обработка включает в себя группирование по некоторым свойствам (валютам инвестиционных инструментов) и последующее суммирование (возможно, для получения итогов по каждой валюте).
В Java это подразумевает выделение фрагмент кода для группировки (несколько строк цикла for), а затем еще один фрагмент кода для суммирования (другой цикл for). В Scala такого рода вещи обычно достижимы в одной строке кода, используя функциональное программирование, а затем сворачивание, что очень выразительно читает l-to-r.
Конечно, это всего лишь аргумент для функционального языка поверх Java.
Just shortly:
What I find especially attractive in all of its magnificient features, among others:
Это смесь лучших битов из кучи языков, что не полюбить:
Я плохо знаком с Scala, но мое впечатление:
Действительно хорошая интеграция JVM будет ведущим фактором. JRuby может назвать Java, и Java может назвать код JRuby, но он явно звонит на другой язык, не чистую интеграцию Scala-Java. Таким образом, можно пользоваться библиотеками Java и даже смешиванием и подгонкой в том же проекте.
Я начал смотреть на scala, когда у меня было понимание, что вещью, которая будет управлять следующим большим языком, является легкий параллелизм. JVM имеет хороший параллелизм с точки зрения производительности. Я уверен, что кто-то скажет, что Erlang лучше, но Scala на самом деле применим нормальными программистами.
То, где Java падает, - то, что это является именно так крайне подробным. Требуется слишком много символов, чтобы создать и передать Функтор. Scala позволяет передавать функции как аргументы.
Не возможно в Java создать тип объединения или применить интерфейс к существующему классу. Они оба легки в Scala.
Статический контроль типов обычно имеет большой штраф подробности. Scala устраняет эту оборотную сторону, все еще давая позитивный аспект статического контроля типов, который является проверкой типа времени компиляции, и она заставляет код помочь в легче редакторах.
Способность расширить язык. Это было вещью, которая сохранила Lisp, идущий в течение многих десятилетий и того позволенного Ruby on Rails.
Я хочу добавить, что природа мультипарадигмы (OO и FP) дает Scala преимущество над другими языки
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.
Если мы откажемся от обсуждения функции и поговорим о стиле, я бы сказал, что это трубчатый стиль кодирования. Вы начинаете с какого-то объекта или коллекции, вводите точку и свойство или точку и преобразование и делаете это до тех пор, пока не сформируете желаемый результат. Таким образом, легко написать цепочку трансформирований, которые также будет легко прочитать. Трейты до некоторого расширения также позволят вам применить тот же подход к построению типов.