Изучение .NET из F # без С#

Я разработчик Java/С++, который никогда не тратил время на изучение С# и относительной основы .NET.

Затем я изучил OCaml, потому что мне пришлось использовать его для моей магистерской диссертации, поэтому я слышал о F # и задавался вопросом: будет ли F # легко использовать .NET API для создания полнофункциональных приложений (которые могут включать графические интерфейсы, сокеты, что угодно ) без проблем?

Я спрашиваю об этом, потому что кажется, что синтаксис и понятия F # очень похожи на OCaml, и когда они отличаются друг от друга, просто потому, что используется более подход OOP, поэтому знание Java поможет мне заполнить эти дыры. if F # использовать те же ресурсы, что и С#, без необходимости изучать синтаксис С#. Я бы действительно подумал, что это стоит попробовать?

Кроме того, доступны ли книги на Amazon для F # (в основном одна книга из O'Reilly и 3-4 книги из Apress), хорошо изучать передовые технологии? Потому что теперь я очень люблю функциональное программирование, но никогда не работал на платформе .NET, поэтому я действительно не знаю, с чего начать.

Заранее спасибо

Ответы

Ответ 1

Если вы знаете несколько языков, которые, как вы говорите, Expert F # 2.0 от Don Syme - отличное представление о глубине F #.

В основном вы будете бороться с изучением библиотек, но ссылка MSDN довольно хороша.

Я думаю, что это определенно стоит попробовать. Знание С# не даст вам больших преимуществ в обучении F #, кроме опыта работы с каркасом.

Ответ 2

будет F #, что позволяет мне легко использовать .NET API для создания полнофункциональных приложения (которые могут включать графические интерфейсы, розетки, что угодно) без каких-либо проблема?

Я ожидаю увидеть здесь несколько разных перспектив; Я предложу свою.

Есть несколько аспектов "языка", которые влияют на то, как легко/плавно вы можете создавать с ним "полнофункциональные" приложения:

  • сам язык
  • библиотека/фреймворк в паре с
  • возможности инструментария (интеграция IDE)
  • внешняя поддержка (образцы, сторонние библиотеки, сообщество)

F # - потрясающий язык, ядро ​​которого основано на OCaml. Он имеет одну и ту же библиотеку/структуру (.NET) как С#, и поэтому в отношении первых двух пулей F # так же способна, как и С# для создания таких приложений.

F # на несколько лет моложе С#, хотя, как инструменты Visual Studio, так и сообщество/образцы не так зрелы, как С#. В настоящее время существует меньше "шаблонов проектов" и "дизайнеров", которые работают с F # в поле VS, и сложнее найти образцы/библиотеки. Сообщество F # великоледие и быстро начинает заполнять отверстия четвертой пули (и даже некоторых из третьих), но для создания приложений, которые будут в значительной степени полагаться на 3-ю и 4-ю пули выше, С# все еще имеет преимущество сегодня (Июль 2010 г.). Да, вы можете построить все, что вам нравится сегодня, с F #, но все же есть случаи, когда сквозной опыт с С# будет более плавным и легким.

Ответ 3

По моему опыту, вам нужно немного С#, чтобы узнать F #, особенно для части .Net.

Как и в вашей ситуации, я не знал ни одного .Net и С#, прежде чем изучать F #. Первая сложная часть для меня - асинхронное программирование ввода-вывода. Я получаю полное представление об этом, пока не прочитаю главу aync CLR через С#. И вскоре я обнаружил, что то, что меня укусил, не было выражением вычисления /monads, это .NET. Затем я продолжаю читать CLR через С#, например. Я знаю, что в .Net 1d массив эффективен, однако массив 2d не настолько эффективен. Я также знаком с делегатами и событиями в .Net.

.Net обязательно. С# - это материнский тон для .Net. IMHO, обучение С# (по крайней мере, чтение С#) требуется для программиста F #.

Ответ 4

Еще одна вещь, отсутствующая в F # в Visual Studio, - это инструменты, которые помогают автоматизировать процесс разработки пользовательского интерфейса. Они довольно сложны в случае С#, но в F # вам придется делать все сантехнические работы вручную. Поэтому, если ваша цель - научиться создавать приложения WPF (и т.д.), С# в настоящее время лучше. Если ваша цель - изучить механические детали .NET, WPF (и т.д.), Любой язык будет делать.

Еще лучший подход, на мой взгляд, состоит в том, чтобы изучить два - F # и С# - в тандеме. Ваш опыт работы с Java и OCaml дает вам хорошее начало как на С#, так и на F #. Используйте С#, чтобы позаботиться о пользовательском интерфейсе, и F #, чтобы выполнить основную работу.

Ответ 5

Простой ответ: "да", F # имеет полный доступ ко всем библиотекам .NET и может как потреблять, так и создавать код, написанный на любом другом языке .NET, а также прямую связь с COM и родными DLL.

Тем не менее, поддержка инструментария для F # не столь зрелая, как для С#. Хотя вам может быть проще изучить .NET с помощью С#, вы не будете ограничены по своей сути, начиная с F #.

Самое главное, что GUI-конструктор не может в настоящее время создавать код F #, нельзя создавать сильно набранные страницы кода ASP.NET(но может создавать слабо типизированные), и нет прямой поддержки для создания тестов в F # (но существуют плагины которые делают).

Однако, можно легко написать GUI-код вручную в F #, и часто бывает проще сделать это и немного более кратким, чем эквивалент С#. Например, свойства могут быть заданы на конструкторе; например, f = новая форма (текст = "заголовок окна" ) и лямбда-функции автоматически преобразуются в делегаты; например, event.Add(fun e → doSomething()).

Также возможно создать, например, DSL для описания пользовательского интерфейса. Для получения дополнительной информации см. F #: нет ли для этого интерфейса (например, WPF)?

Рекомендуемый стиль, как указано TechNeilogy, заключается в том, чтобы написать логику в F # как библиотеку и вызвать ее из графического интерфейса, созданного на С#.

Ответ 6

Я скажу "Нет". Задача обучения F # состоит в том, чтобы изменить мышление программирования, рекурсии, функции высокого порядка, соответствия шаблонов и т.д. Очень важно, что вам нужно думать, чтобы программа была "функциональной", а не обязательной, как С# или Java. Учебный API всегда прост, но научиться разрабатывать приложение не так.

Это мои 2 цента.