2010-07-15 1 views
13

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

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

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

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

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

+5

Если вы знаете Java уже, то сбор синтаксиса C# не должен быть слишком сложным. См. Это сообщение для информации о программировании GUI в F # http://stackoverflow.com/questions/2796272/how-to-learn-gui-programming-in-f – Longball27

+1

Я бы не хотел выбирать C# только потому, что обнаружил функциональное программирование и я хотел бы углубиться в .NET с этой точки зрения. – Jack

+0

Я вижу и сочувствую вашей точке, и я уверен, что вам понравится F # (который фактически основан на OCaml и даже имеет режим совместимости с OCaml). Но я хотел бы отметить, что C# поддерживает полные блокировки и функции первого порядка, и даже там можно программировать в очень функциональном стиле. Единственное, что я пропускаю, когда делаю это, - это вывод типа. – harms

ответ

10

Если вы знаете несколько языков, уже, как вы говорите, эксперт F # 2.0 Дон Сайм является прекрасным с точки зрения глубины F #.

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

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

+0

+1 - Эксперт F # был легко интереснейшей книгой, которую я прочитал в прошлом году. –

4

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

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

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

6

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

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

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

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

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

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

2

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

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

+0

Вы имеете в виду, что можно легко смешивать C# и F # и позволить C# заботиться о GUI (например), а F # используется для логики программы? Они могут легко взаимодействовать друг с другом? – Jack

+0

@ Джэк «легко» может быть слишком сильным словом. Вам нужно будет сохранить свой F # в отдельной сборке (например, Java-пакете) с вашего C# и графического интерфейса. Вы также столкнетесь с несколькими незначительными проблемами, когда оба интерфейса друг с другом. –

+0

Существует некоторая функциональность F #, специально разработанная для работы с этим языком, и ее трудно использовать с C#, но F # является полноценным языком .NET. Таким образом, довольно просто написать классы и функции, которые не отличаются от ссылочных функций от любого другого языка .NET, будь то C#, MC++ или VB. Портативные части функциональности довольно просты в освоении и поддерживают прямолинейность. Книга F # или онлайн-примеры F # приведут пример смешения F # и C#. Может быть, не совсем бесшовные, но по крайней мере безболезненно бесшовные, lol. – TechNeilogy

1

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

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

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

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

Также возможно создать DSL для описания пользовательского интерфейса. Для получения дополнительной информации см. F#: is there no UI (like WPF) for it?

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

+0

О, а поддержка F # для написания асинхронного и параллельного кода просто замечательна. * * Легко писать правильные неблокирующие IO в F #, чем на любом другом языке, с которым я работал. –

+0

Единственное исключение из «интерфейса с чем-либо» заключается в том, что в настоящее время нет поддержки языкового уровня для динамических объектов, созданных, скажем, в IronPython или IronRuby. Хотя возможно взаимодействие с такими объектами, это будет не так просто, как, например, с помощью VB или C#. –

1

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

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

+1

Просто, чтобы указать на это, OP уже знает OCaml, который является родственным языком для F #, поэтому писать код в основном совместимом F # не должен представлять никаких проблем. –

 Смежные вопросы

  • Нет связанных вопросов^_^