Много раз я слышал, что F # не подходит для конкретных задач, таких как пользовательский интерфейс. "Использовать правильный инструмент" - общая фраза.
Помимо отсутствующих инструментов, таких как дизайнер WinForms/WPF/ORM, я не уверен, что точно отсутствует в F # - честно! Тем не менее, особенно с пользовательским интерфейсом, мне говорят, что С# просто делает это лучше. Итак, каковы фактические различия и упущения в F # при его императивном использовании?
Вот список, который я придумал:
-
Много отсутствующей поддержки инструмента
-
F # все еще бета
-
Ваши разработчики не знают F #
- Я бы не рассматривал эти моменты, поскольку они не являются подлинными для F #
-
Mutables нуждаются в "изменяемом" или должны быть ref, ref need! к разыменованию
-
Mutables присваивает с помощью < - и ref использует: = (они оба более одного символа, чем просто =)
-
val требует DefaultValueAttribute, чтобы получить значение по умолчанию
-
F # не выводит неявные интерфейсы
-
Защищенным членам труднее иметь дело с
-
Нет автоматических свойств
-
Реализованные виртуальные члены в абстрактных классах требуют двух определений
-
Quotations-to-LINQ-Expression-Trees генерирует деревья, несколько отличающиеся от С#/VB (раздражает API, ожидающих их выражения в определенном формате)
-
Нет stackalloc
-
F # не имеет условного оператора:
-
Указатели могут считаться более громоздкими в F #
-
Делегаты/события могут считаться более громоздкими (я бы сказал, что они проще, но, как минимум, они разные)
-
Нет автоматических преобразований типов (например, int для float или неявных приведений)
-
Отсутствует специальная поддержка синтаксиса для аннотации Nullable (С#? type и оператора), а также использования операторов по значениям nullables.)
-
Нет автоматического повышения до общего базового класса или бокса (например: let x: obj = if true, затем 1 else "hi" // это не будет проверяться typecheck)
-
Значения не могут быть отброшены без предупреждения ( "игнорировать", чтобы обойти его)
-
Не имеет синтаксиса C-стиля:)
На вопрос: Какие из них являются препятствием для написания императива или кода OO? Почему (короткие примеры)? Какие из них я пропустил? Каковы наилучшие обходные пути и почему их недостаточно?
Обратите внимание: я не говорю о написании так называемого идиоматического F #, и я, конечно же, не говорю о функциональном программировании. Меня больше интересуют строки "Если бы я заставил себя написать UI или императивный/OO-код в F #, используя F # OO/императивные функции и типы классов, что больно больше всего?"
Bonus Если вы не знаете F #, но используете С# или VB.NET и считаете, что это лучший инструмент для некоторых ситуаций, укажите конкретные особенности языка и синтаксис, который вы найдете привлекательным.