Собираюсь функционировать в C # - PullRequest
1 голос
/ 28 января 2009

Я знаю, что в C # 3.0 вы можете заниматься магией функционального программирования с помощью Linq, лямбда-выражений и всего такого. Тем не менее, действительно ли возможно перейти полностью "чистый" функционал в C #? Под «чистым» я подразумеваю наличие методов, которые являются чистыми (всегда дают один и тот же вывод для одного и того же ввода) и полностью свободны от побочных эффектов. Как нам обойти тот факт, что у нас даже нет неизменяемого целочисленного типа в C #?

Ответы [ 3 ]

3 голосов
/ 28 января 2009

Если вы хотите программировать чисто функционально, ничто вас не остановит.

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

Для целых (неизменяемых)

  • Если вы используете int как параметр, он передается по значению. Любые изменения не распространяются на вызывающего абонента.
  • Если вы используете int, объявленный в области действия одного метода в замыкании внутри метода, тогда эта переменная int является общей. В этом случае нужно либо пообещать не изменять int (принудительно программировать), либо просто не использовать int таким образом.

А если вам действительно нужен неизменяемый int, вы видели ключевое слово readonly?

2 голосов
/ 28 января 2009

Вы смотрели в F #? Кажется, это намного больше похоже на то, о чем вы говорите. C # просто не предназначен для функционального программирования и поэтому не даст вам никаких преимуществ, которые обычно связаны с функциональным языком.

1 голос
/ 28 января 2009

К сожалению, нет - C # не является чисто функциональным языком, и он не собирается быть. Что произошло, так это то, что команда C # увидела, что есть преимущества в добавлении определенных функционально стилизованных конструкций и синтаксиса в язык.

Функциональную чистоту лучше найти в других местах (производные Лиспа, такие как Common Lisp и Scheme, - хорошие места для начала).

...