Я могу извлечь ту же пользу из функционального программирования (F#) при помощи большего количества статических методов в C#?

вам просто нужно добавить свойство css float:right ко всем вашим кнопкам

удачи!

7
задан Esteban Küber 31 July 2009 в 15:42
поделиться

7 ответов

Вы, конечно, могли бы писать код на C # неизменно, но это не имеет ничего общего со статическими функциями. Неизменяемость - это такие вещи, как наличие структуры или объекта, которые только «изменяют состояние», делая собственную копию и делая копию другой.

8
ответ дан 6 December 2019 в 05:56
поделиться

Нет, эти два понятия не связаны. Статические методы в C # могут по-прежнему изменять входящие объекты как обычно, а другие переменные, используя ref или out.

2
ответ дан 6 December 2019 в 05:56
поделиться

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

Вы можно попытаться эмулировать F # с помощью функциональной декомпозиции, но это все равно будет довольно императивный код.

8
ответ дан 6 December 2019 в 05:56
поделиться

Нет, это не то же самое, что статические методы. У вас нет изменяемого состояния, если вы ничего не назначаете (локальные, аргументы функций, статические поля, поля экземпляров) после его инициализации. Вы можете получить некоторые из преимуществ, разработав свои классы как неизменные.

3
ответ дан 6 December 2019 в 05:56
поделиться

Apart from static, functional modules versus objects, you can attempt to get some of the benefits of F# by using C# 3 and lambdas, LINQ, etc. However, that doesn't go very far. What I find nice in F# is:

  • Inference everywhere
  • Auto-generalization (adds in type parameters so I don't have to sort it out manually)
  • Easy immutability
  • Easy mix between module and classes
  • Types like discriminated unions
  • Pattern matching
  • Nested functions (lightweight)
  • First class functions (no, C#'s named delegates don't count)
  • Everything's an expression
  • Easy function composition

So, you can try to do some of this in C#. Some of it is simply not supported and won't work. The rest gets very ugly, very fast.

So, if you go much off the beaten path of LINQ and the Enumerable extensions, you'll probably end up in a world of pain.

5
ответ дан 6 December 2019 в 05:56
поделиться

Я позволю себе не согласиться со всеми остальными ответами на сегодняшний день. Неизменяемость и статические методы, возможно, не являются строго технически связанными, но я обнаружил, что использование F # побудило меня делать методы C # статичными всякий раз, когда я могу.

Мышление является аналогом в том смысле, что легче обращаться с неизменным объектом, потому что вам не нужно беспокоиться об изменении его состояния. Точно так же вам не нужно беспокоиться о состоянии при использовании статического метода (если вы не используете глобальный синглтон или что-то в этом роде ...).

4
ответ дан 6 December 2019 в 05:56
поделиться

ЭТО правда. Вы не получите преимуществ функционального программирования, просто используя больше статических функций в C #. Однако, если бы вы заглянули под капот (например, с помощью Reflector), я понимаю, что простой оператор let является статической функцией. Другими словами,

//F#
let a = 2

похож на функцию в C #

//C#
static int a()
{
    return 2;
}

, я могу понять путаницу.

Объяснение из статьи Леона Бамбрика «F # Eye для презентации C # Guy».

1
ответ дан 6 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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