Вопросы о Scala от Rubyist

Я недавно озирался для изучения нового языка в течение моего свободного времени, и Scala, кажется, очень привлекателен.

У меня есть несколько вопросов относительно него:

  1. Разве знание Java не наложит проблему в изучении его? Это будет большой недостаток позже? (т.е. Как часто люди полагаются на определенные для Java библиотеки?)

  2. Как большой из различия это сравнивается с Ruby? (Кроме того, чтобы быть со статическим контролем типов) это вводит много новых терминов, или я буду знаком с большинством механизмов языка?

  3. Какие ресурсы Вы рекомендовали бы? Я положил глаз Programming Scala и Beginning Scala книги

  4. Хотя субъективный, действительно ли Scala является забавой запрограммировать в?: P

Спасибо

27
задан oxbow_lakes 6 March 2010 в 16:15
поделиться

5 ответов

Я собираюсь предупредить вас о том, сколько знаний Java требуется, потому что я не согласен с тем, что это вообще не проблема. В Java есть вещи, которые имеют прямое отношение к scala и которые вам следует понимать.

  1. Модель памяти Java и какие механизмы платформа предоставляет для параллелизма. Я говорю о синхронизации, потоках и т. Д.

  2. Разница между примитивными типами (double, float и т. Д.) И ссылочными типами (т.е. подклассами Object ) .Scala предоставляет несколько хороших механизмов, чтобы скрыть это от разработчика, но при написании кода, который должен быть производительным, очень важно знать, как они работают

Это работает в обоих направлениях: среда выполнения Java предоставляет функции, которые (я подозреваю, хотя я может ошибаться) недоступны в Ruby и принесут вам огромную пользу:

  • Расширения управления (MBeans)
  • JConsole (для мониторинга памяти, ЦП во время выполнения, отладки проблем параллелизма)
  • JVisualVM (для времени выполнения инструментарий кода для устранения проблем с памятью и производительностью)

Эти пункты №1 и №2 не являются непреодолимыми препятствиями, и я думаю, что другие сходства, упомянутые здесь, будут работать в вашу пользу. О, и Scala, безусловно, доставляет массу удовольствия!

8
ответ дан 28 November 2019 в 04:25
поделиться

У меня нет опыта работы с Ruby, но, тем не менее, я мог бы вам помочь.

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

  2. -

  3. Я начал с чтения Programming Scala и перешел к чтению исходного кода библиотеки Scala. Последнее очень помогло понять язык. И как всегда: Код, Код, Код. Чтение без программирования ни к чему не приведет, но я уверен, что вы это уже знаете. : -) Еще одним полезным ресурсом являются блоги. См. https://stackoverflow.com/questions/1445003/what-scala-blogs-do-you-regularly-follow для компиляции хорошие блоги о Scala.

  4. Это так! Как вы сказали, это очень субъективно. Но для меня, когда я имел опыт работы с Java, это было очень весело.

7
ответ дан 28 November 2019 в 04:25
поделиться

Вот мое мнение:

  • Не говоря уже о незнании Java.

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

    Однако часто предполагается знакомство со средой JVM. Если я могу дать здесь один совет, то сначала избегайте Maven и используйте SBT в качестве инструмента сборки. Для небольших программ в этом не будет необходимости, но это упростит решение многих проблем в мире Java-lang. Если вам нужна внешняя библиотека, познакомьтесь с SBT. С его помощью вам не придется иметь дело с каким-либо XML: вы пишете свои правила сборки на самом Scala.

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

    Это не такое уж большое препятствие - вы можете преодолеть его, если хотите. Основным недостатком является то, что вы, вероятно, почувствуете, что любой другой статически типизированный язык, который вы выучите впоследствии, неуклюж и ограничен.

  • Вы не упомянули , Programming Scala на которую вы смотрели. Их два плюс один Программирование на Scala.Последняя была написана, среди прочего, создателем языка и широко считается отличной книгой, хотя, возможно, немного медленной. Один из Programming Scala был написан парнем из Твиттера - Алексом Пейном - и бывшим руководителем Object Mentor Дином Уэмплером. Это тоже очень хорошая книга. Начальная версия Scala была написана Дэвидом Поллаком, создателем Lift, и люди отзывались о ней хорошо. На самом деле, я не слышал, чтобы кто-нибудь жаловался ни на одну из книг Scala.

    Одна из этих книг, безусловно, будет вам полезна. Кроме того, поддержка вопросов о переполнении стека для Scala очень хороша - я прилагаю все усилия, чтобы обеспечить это! :-) Есть список рассылки scala-users, где тоже можно получить ответы (пока люди не очень заняты), и есть IRC-канал #scala на Freenode, где вы также получите хорошую поддержку. Иногда людей просто нет рядом, но, если они есть, они вам помогут.

    Наконец, есть блоги. Лучшим вариантом для начинающих, вероятно, является Daily Scala . Вы можете найти многие, многие другие: Planet Scala . Среди них мой собственный Algorithmically Challenged , который в последнее время не пользуется особой популярностью, но я вернусь к нему. : -)

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

19
ответ дан 28 November 2019 в 04:25
поделиться

Есть много концепций, которые разделяют Ruby и Scala. Я давно не писал Ruby, так что это не исчерпывающий список.

Ruby <==> Scala (приблизительно!)

  • миксинов <==> черты
  • Monkey Patching <==> Pimp My Library (неявные преобразования в оболочку с дополнительными методами)
  • Proc / Closure <==> Функция / функциональный литерал
  • Duck Typing <==> Структурные типы
  • Последний аргумент как процедура <==> Список каррированных параметров (см. Traversable # flatMap)
  • Enumerable <==> Traversable
  • collect <==> map
  • inject <==> foldLeft / foldRight
  • Symbol.toProc <==> Синтаксический сахар-заполнитель: people.map (_. Name)
  • Краткость динамического ввода <==> Вывод типа
  • Nil <==> null, хотя вариант предпочтительнее.( Не Nil, это пустой список!)
  • Все является выражением <==> то же самое
  • символов / хэшей в качестве аргументов <==> Именованные параметры и параметры по умолчанию
  • Singleton < ==> объект Foo {}
  • Everthing - это объект <==> Everthing - это тип или объект (включая функции)
  • No Primitives <==> Единая система типов, Any - это супертип для примитивов и объекты.
  • Все является сообщением <==> Операторы - это просто вызовы методов

Возможности Ruby, которые вы можете пропустить

  • method_missing
  • define_method и т. Д.

Функции Scala, которые вам следует изучить

  • Сопоставление с образцом
  • Неизменяемый Классы, в частности Case Classes
  • Неявные представления и неявные параметры
  • Типы, типы и др. Типы: универсальные, вариативные, абстрактные элементы типа
  • Применяется унификация объектов и функций, особое значение ] и обновляют методы .
37
ответ дан 28 November 2019 в 04:25
поделиться

Re. пункт 1. Незнание Java и языка не обязательно является проблемой. Сторонние библиотеки в значительной степени легко интегрируются в Scala. Однако некоторая осведомленность о различиях в коллекциях может быть хорошей (например, список Scala не является традиционным списком Java, и API-интерфейсы могут ожидать последнего).

Навыки, связанные с Java, которые переносятся, связаны с Java платформой . т.е. вы все еще работаете с JVM, которая выполняет загрузку классов, сборку мусора, JIT-компиляцию и т. д. Так что опыт в этом полезен. Но совсем не обязательно.

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

1
ответ дан 28 November 2019 в 04:25
поделиться
Другие вопросы по тегам:

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