Участник:Orionll/Scala
| Эта статья находится на доработке. Эта статья всё ещё не взлетела и не соответствует нынешним реалиям /lm/. Но добрый Orionll приютил её в своём личном пространстве, и теперь она может Модераторам: выпустить Дата последней правки страницы: 22.11.2013 |
| « |
Могу честно сказать, что если бы кто-нибудь мне показал книгу "Programming in Scala by Martin Odersky, Lex Spoon & Bill Venners" в 2003 году, то я возможно бы никогда не создал Groovy.» | » |
| — Джеймс Стрэчен, создатель языка Groovy | ||
| « |
Haskell, Scala могут чморить всех. OCaml может чморить всех кроме Haskell и Scala. Erlang и Clojure могут чморить всех кроме Haskell, Scala, OCaml. | » |
| — Namdak Tonpa | ||
Scala (скакалка) — нехипстерский мультипарадигменный язык программирования со статической типизацией, созданный в 2003-м году немецким профессором Мартином Одерски. Позиционируется как замена языка Java, что вызывает глубокое неудовольствие у сторонников Clojure, другого перспективного языка программирования под JVM.
Содержание |
История
В начале 2000-х Одерски работал над языком Pizza, который был создан как площадка для экспериментов над языком Java. В Pizza Одерски сделал параметрический полиморфизм, функции-объекты первого класса, паттерн-матчинг и прочую функциональщину. Однако только дженерики в итоге перекочевали в Джаву, а от остального отказались. Дабы не пропадать добру, Одерски решил взять свои наработки и создал в 2003 году первый компилятор языка Scala, который как и Java, компилируется в байт-код JVM.
Java++
Вообще, язык Scala задумывался таким образом, чтобы на нём могли писать абсолютно все, начиная от новичков-хеллоуворлдщиков и заканчивая продвинутыми программистами-задротами, не понаслышке знающими, что такое теоркат, функторы и монады (в отличие от Haskell, на котором могут писать только последние).
Ходят слухи [1], что Scala для Java — это то же самое, что и C++ для C. Но никто в совершенстве не знает C++. Каждая C++ команда изобретает свой C++ диалект и чморит другие команды, которые пишут на "другом C++". Такая же участь может постигнуть и Scala. Однако есть и противоположное мнение [2], что "в отличие от C++, Scala становится тем проще, чем дальше её изучаешь".
В любом случае, факт остается фактом, что одну и ту же задачу на Scala можно решить стопицот способами, даже если это простой "Hello World", и этот аргумент явно не в пользу Scala.
ООП + ФП
Scala — это ООП + ФП. Т.е. можно писать и ООП, можно и ФП. А некоторые скалолазы умудряются даже неплохо совмещать.
ООП в Скале отличается от ООП в жабе/C#: в Скале есть множественное наследование. Но множественное наследование это правильное, не как в плюсах — реализуется через trait'ы (они же примеси — интерфейсы, у которых можно реализовывать методы), причем порядок наследования от примесей важен (!). Гуглить на тему stackable modifications, если интересно.
ФП в Скале также отличается от ФП в ML, Haskell, F# и других чисто функциональных языках со статической типизацией (без ООП). Главное отличие — отсутствие type union'ов (которое, хотя, легко имитируется через наследование и case-классы). Второе — это отсутствие полного вывода типов, из-за чего программы на Scala получаются зачастую более громоздкими, чем например в Хаскеле, потому что часто приходится явно указывать типы параметризованных классов.
Примеры кода
Создаем список из чисел от 1 до 20 и делим его на два подсписка: с четными и нечетными элементамиval (odd, even) = (1 to 20).toList.partition(f => f % 2 == 0)
val sumEven = even.fold(0)(_ + _) val sumOdd = odd.fold(0)(_ + _)
val sumEven = even.sum; val sumOdd = odd.sum;
|
[ + ] Любой программист без словаря поймёт, что такое Orionll/Scala
|
||||||||
|---|---|---|---|---|---|---|---|---|---|
|
|||||||||
