Много раз я слышал, что F # не подходит для конкретных задач, таких как пользовательский интерфейс. «Использовать правильный инструмент» - общая фраза.Что такое F #, недостающее OO или императив?
Помимо отсутствующих инструментов, таких как дизайнер WinForms/WPF/ORM, я не уверен, что именно отсутствует в F # - честно! Тем не менее, особенно с пользовательским интерфейсом, мне говорят, что C# просто делает это лучше. Итак, каковы фактические различия и упущения в F # при его императивном использовании?
Вот список, который я придумал:
Много отсутствующей поддержки инструмента
F # все еще бета
Ваши разработчики не знают, F #
- Я бы не хотел рассматривать эти моменты, так как они не являются подлинными для F #
Mutables нуждаются в «изменчивости» или должны быть ref, ref need! разыменовать
Mutables назначения с < - и исх использует: = (они оба более 1 характер, чем просто =)
вал необходимо DefaultValueAttribute, чтобы получить значение по умолчанию
F # Безразлично» т испускают неявные интерфейсы
Защищенные члены более трудно иметь дело с
Нет автоматических свойств
Реализовано виртуальные члены на абстрактные классы требуют двух определений
Котировки к LINQ-Expression-Trees производит деревья немного отличаются, чем C#/VB (раздражающие для API, которые ожидают их выражения в определенном формате)
нет stackalloc
F # не имеют: условный оператор
Указатель s можно считать более громоздким в F #
Делегаты/события могут быть рассмотрены, возможно, более громоздким (я бы утверждать, что они легче, но, как минимум, они разные)
Нет автоматическое преобразование типов (например, int to float или неявные слепки)
Нет специальной поддержки синтаксиса для Nullable (C#? тип аннотации и? оператора, а также с использованием операторов по nullables.)
Нет автоматический общепринятому приведения к базовому типа базового класса или боксу (например: пусть х: OBJ = если верно, то 1 еще «привет» // это не typecheck)
Значение не может быть отброшены без предупреждения («игнорировать», чтобы обойти его)
не имеет синтаксис C-стиле :)
на вопрос: какие из них являются помехой для написания императивный или OO код ? Почему (короткие примеры)? Какие из них я пропустил? Каковы наилучшие обходные пути, и почему их недостаточно?
Обратите внимание:, я не говорю о написании так называемого идиоматического F #, и я, конечно же, не говорю о функциональном программировании. Меня больше интересуют строки «Если бы я заставил себя написать UI или императивный/OO-код в F #, используя F # OO/императивные функции и типы классов, что больнее всего?»
Bonus Если вы не знаете, F #, но использовать C# или VB.NET, и думаете, что это лучший инструмент для некоторых ситуаций, просьба указать специфические особенности языка и синтаксис вы находите привлекательные.
Похоже, вы хотите, чтобы F # был C# или VB. Вы будете тратить много времени на писание в императивном стиле. – leppie
Пожалуйста, не пойми меня неправильно. Многие из вещей, которые мне нравятся в списке, я думаю, что они позитивны. Нет, меня интересуют различия, которые разделяют на C# и VB.NET, что делает их лучше в таких задачах. Не общий «о, для этого не было», но «жесткий» недостаток защищенных членов означает, что F # просто не справляется с x y и z framework ». – MichaelGG
Дизайнер не должен быть большой проблемой, так как вы можете использовать dll других. Как правило, это проблема только в небольших проектах. – Dykam