Каким образом вы пытаетесь сделать свой код функциональным? - PullRequest
0 голосов
/ 09 декабря 2008

, чтобы вы могли легко сделать вашу программу параллельной в будущем.

Ответы [ 5 ]

3 голосов
/ 09 декабря 2008

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

Если вам интересно, я опубликовал много своих работ с неизменяемыми объектами, в частности неизменяемые коллекции в галерее кода. Название проекта: RantPack . В области сбора у меня есть

  • ImmutableCollection
  • ImmutableMap
  • ImmutableAvlTree
  • ImmutableLinkedList
  • ImmutableArray
  • ImmutableStack
  • ImmutableQueue

Существует дополнительный слой подкладки (CollectionUtility), который будет создавать объекты-оболочки, реализующие интерфейсы BCL, такие как IList и ICollection . Они не могут полностью реализовать интерфейсы, поскольку они неизменны, но реализованы все возможные методы.

Исходный код (C #), включая модульное тестирование, также доступен на сайте.

1 голос
/ 09 декабря 2008

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

Тем не менее, мой основной "функциональный" способ программирования часто использует ключевое слово "final". Я стараюсь, чтобы как можно больше классов было полностью неизменным, а для остальных было четкое различие между тем, что преходяще, и тем, что неизменно.

0 голосов
/ 09 декабря 2008

Вот доклад на rubyconf 2008 об этой теме, в основном она сосредоточена на рубине, но некоторые концепции остаются в силе.

http://rubyconf2008.confreaks.com/better-ruby-through-functional-programming-2.html

0 голосов
/ 09 декабря 2008

Сделай все асинхронно. Используйте неизменяемые объекты, сообщения и т. Д. Общайтесь через очереди.

0 голосов
/ 09 декабря 2008

Не используйте переменные-члены или глобальные переменные. Используйте локальный стек функций / методов. Когда метод использует только переменные внутренней области видимости и параметры вызова и возвращает всю информацию, используя параметры out / inout / reference или возвращаемые значения, он работает.

...