2010-02-04 3 views
9

Можно создать дубликат:
What are the benefits of using C# vs F# or F# vs c#?Каковы преимущества F # over C# для разработки корпоративных приложений?

Моя команда в настоящее время использует C# .NET для разработки корпоративных приложений для нашей компании. У нас есть история Winforms dev, но теперь мы переходим к SilverLight.

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

Я действительно хочу посмотреть, есть ли какие-либо веские причины, чтобы даже начать созерцать сдвиг. Некоторый код сравнения F # и C# может также приятно видеть.

+4

Рекомендация вашего босса не достаточна для того, чтобы проверить это? :) –

+5

Следует иметь в виду, в зависимости от размера и опыта вашей команды: не стоит недооценивать начальную производительность, которую вы собираетесь переходить с языка * и приближаться * команда знает, учить. Это не просто изучение синтаксиса, но и понимание его на глубоком уровне, правильное применение его к общей структуре и т. Д. Не говоря о том, что это не стоит (я вообще ничего не знаю о F #), просто переключение с ООП на класс на функциональный программирование или ООП на основе прототипов (например, JavaScript) - это нетривиальное усилие, которое требует нетривиального бизнес-кейса. –

+3

@ T.J. Кроудер - прикомандированный. Не следует недооценивать весь императив изменения функционального мышления. –

ответ

10

Вы можете выразить много понятий гораздо более кратко на функциональном языке, таком как F #.

Функции являются объектами первого класса и могут применяться непосредственно к коллекциям для более эффективного преобразования/фильтрации.

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

Благодаря возможности надежного и легкого написания многопоточного кода намного проще воспользоваться преимуществами нескольких процессоров/ядер (все более важным в настоящее время является закон Мура, так что не применяйте так много).

Обратите внимание, что вы можете использовать существующие объекты C# внутри F #. Таким образом, вы можете написать некоторые части своего кода в F # и других частях на C#. Вы должны иметь возможность смешивать и сопоставлять в соответствии с вашими требованиями и пригодностью каждого подхода.

+5

+1 Многопоточность тривиально без побочных эффектов. В конце концов, если вы не записываете состояние, нет необходимости блокировать что-либо. – Joel

4

Я просто заказал Manning «Real World Functional Programming», который делает фантастическую работу, объясняя все уголки и закоулки F #, функционального программирования, и особенно то, как он сравнивает с C# и ООП

Что я кончаю вплоть до того, что функциональное программирование в целом увеличивает «строгость» ваших программ, если вы согласны с принципами свободных функций побочного эффекта и неизменностью.

Кроме того, кажется, что есть смысл думать о кодексе в декларативном смысле, а не в императивном смысле. В ООП я склонен думать о шагах, которые он предпринимает для достижения чего-то, но в FP кажется, что вы больше озабочены тем, как вы хотите применять функции к данным для получения результатов.

2

Во-первых, вы спрашиваете: «Функциональный язык (например, F #) дает язык OO (например, C#). I« f # является функциональным и OO. любая вещь, которую вы могли бы написать в C#, может быть непосредственно переведена на f #. F # - это язык с несколькими парадигмами, но преимущество от функциональной части, на мой взгляд. f # и другие функциональные langauge являются явным победителем, когда дело доходит до написания многопоточных приложений из-за более высоких возможностей для компилятора рассуждать о том, что можно безопасно запускать параллельно.

Когда дело доходит до веб-разработки, у f # есть очень классный набор инструментов, который позволяет вам написать код (как на стороне сервера, так и на стороне клиента) на том же языке, что и f #.клиентская сторона будет переведена на JavaScript с помощью веб-инструментария.

+3

Хотя оба режима поддержки поддерживаются, F # является функциональным языком с императивными функциями, а C# является обязательным языком с функциональными функциями. Было бы чрезвычайно утомительно, чтобы в каждой декларации «изменяться». Кроме того, императивное программирование препятствует способности F # выполнять сопоставление образцов и вводить тип. – Joel

+0

@ Жемчужина в соответствии с доном Симе одним из главных архитекторов F # мое утверждение о том, что F # является многопарадигмой, верно. Я просто перефразирую своего эксперта по книге F # и вашего imcorrect на изменчивом, который вам не нужен, для выполнения OO в F #, только если вы хотите, чтобы вещи были изменчивыми, и, наконец, вы также ошибаетесь в сопоставлении с образцом. OO в F # _can_ следует комбинировать с сопоставлением с образцом. Одна из целей почты F # заключалась в том, чтобы объединить Миры OO и FP и вывода типа btw даже с классами не F #. –

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