Изучение .NET из F # без C # - PullRequest
13 голосов
/ 15 июля 2010

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

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

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

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

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

Ответы [ 6 ]

10 голосов
/ 15 июля 2010

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

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

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

6 голосов
/ 15 июля 2010

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

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

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

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

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

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

4 голосов
/ 15 июля 2010

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

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

.Net является обязательным условием.C # - это материнский тон для .Net.ИМХО, изучение C # (хотя бы чтение C #) требуется программисту на F #.

2 голосов
/ 15 июля 2010

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

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

1 голос
/ 17 июля 2010

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

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

1 голос
/ 16 июля 2010

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

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

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

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

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

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

...