Каким образом вы пытаетесь сделать свой код функциональным?

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

HTML, CSS dan JS
HTML, CSS dan JS
HTML (HyperText Markup Language) - это язык разметки, используемый для создания и оформления веб-страниц. HTML описывает структуру и содержание...
Каковы некоторые из продвинутых концепций языков программирования?
Каковы некоторые из продвинутых концепций языков программирования?
В языках программирования существует множество продвинутых концепций, но некоторые из них являются наиболее важными:
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
0
0
173
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

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

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

  • ImmutableCollection <T>
  • ImmutableMap <TKey, TValue>
  • ImmutableAvlTree <T>
  • ImmutableLinkedList <T>
  • ImmutableArray <T>
  • ImmutableStack <T>
  • ImmutableQueue <T>

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

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

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

Вы не охватили все это: […] не используйте функции ввода-вывода или функции, возвращающие случайное значение и т. д. Как правило, не используйте функции с побочными эффектами.

Claymore 09.12.2008 12:07

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

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

+1 за «финал» - неизменность - ваш друг. также вам не нужно ждать закрытия, если вы используете один из функциональных языков JVM (например, Clojure или Scala) :-)

mikera 08.03.2011 19:40

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

Я вижу, как MQ помогает параллелизму, но действительно ли это работает?

Guillaume 09.12.2008 10:53

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

Yoni Roit 09.12.2008 17:16

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

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

Другие вопросы по теме