Подтвердить что ты не робот

Можете ли вы предложить хорошее введение в концепцию Scala философии и программ?

В Java и С++ проектирование иерархии объектов программы довольно очевидно. Но начиная с Scala мне было трудно решить, какие классы следует определять, чтобы лучше использовать синтаксические сахаровые установки Scala (даже идеальная идея о том, как я должен проектировать для лучшей производительности). Любые хорошие чтения по этому вопросу?

4b9b3361

Ответ 1

Я прочитал 4 книги на Scala, но я не нашел того, о чем вы просите. Наверное, вы уже читали "Программирование в Scala" Odersky (Artima). Если нет, это ссылка на он-лайн версию:

http://www.docstoc.com/docs/8692868/Programming-In-Scala

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

  • Императивная объектная ориентация были вокруг с Smalltalk, поэтому мы много знаю об этой парадигме.
  • Функциональная объектная ориентация на другая рука, является довольно новой концепцией, поэтому через несколько лет я ожидаю книги описывающих широкомасштабные системы FOO для появляются. Во всяком случае, я думаю, что PiS книга дает вам довольно хорошую картину как вы можете собрать основные строительных блоков системы, например Factory, как заменить Стратегия с функцией литералы и т.д.

Одна вещь, которую однажды сказал мне Виктор Кланг (и что-то, на чем я действительно согласен), заключается в том, что одно отличие между С++/Java и Scala OO заключается в том, что вы определяете намного больше (меньших) классов при использовании Scala. Зачем? Потому что ты можешь! Синтаксический сахар для case class приводит к очень маленькому штрафу за определение класса, как при наборе текста, так и в удобочитаемости кода. И, как вы знаете, многие маленькие классы обычно означают лучшее OO (меньше ошибок), но хуже производительность.

Еще одна вещь, которую я заметил, заключается в том, что я использую шаблон factory намного больше при работе с неизменяемыми объектами, поскольку все "изменения" экземпляра приводят к созданию нового экземпляра. Слава Богу за метод copy() на case class. Этот метод значительно упрощает методы factory.

Я не знаю, помогло ли это вам вообще, но я думаю, что этот предмет очень интересен сам, и я тоже жду больше литературы по этому вопросу. Ура!

Ответ 2

Это все еще развивающееся дело. Например, только что выпущенный Scala 2.8.0 обеспечил поддержку вывода конструктора типа, который включил шаблон классов типов в Scala. Сама библиотека Scala только что начала использовать этот шаблон. Только вчера я услышал о новом модуле Lift, в котором они попытаются избежать наследования в пользу классов типов.

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

И если мы вернемся назад во времени, отметим, что другие важные функции не так уж и старые:

  • Методы экстрактора на объектных компаньонах классов классов, где был представлен февраль 2008 г. (до этого единственным способом сделать извлечение в классах классов было сопоставление шаблонов).
  • Предельные значения и структурные типы, введенные в июле 2007 г.
  • Поддержка абстрактных типов для конструкторов типов была введена в мае 2007 года.
  • Экстракторы для классов, отличных от случая, были представлены в январе 2007 года.
  • Кажется, что неявные параметры были введены только в марте 2006 года, когда они заменили способ представления представлений.

Все это означает, что мы все учимся разработке программного обеспечения Scala. Обязательно полагайтесь на проверенные образцы функциональных и объектно-ориентированных парадигм, чтобы увидеть, как новые функции в Scala используются в других языках, таких как классы Haskell и типа, или Python, и стандартные (необязательные) и именованные параметры.

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

Ответ 3

Я не думаю, что для этого есть много учебников. Я предлагаю остаться с тем, как вы это делаете сейчас, но и посмотреть "идиоматический" код Scala и обратить особое внимание в следующих случаях:

  • использовать классы case или case-объекты вместо перечислений или "объекты-значения"
  • использовать объекты для одиночных игр
  • если вам нужно поведение "в зависимости от контекста" или функция, подобная инъекции, используйте implicits
  • при проектировании иерархии типов или если вы можете выставлять вещи из конкретного класса, используйте черты, когда это возможно.
  • Строгое иерархирование наследования в порядке. Имейте в виду, что у вас есть соответствие шаблону
  • Знайте шаблон "pimp my library"

И задайте столько вопросов, сколько вам кажется, вам нужно понять определенный момент. Сообщество Scala очень дружелюбное и полезное. Я бы предложил список рассылки Scala, Scala IRC или scala -forum.org