Если вы используете C # и F # вместе

16

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

Мне кажется, что смешивание двух очень разных стилей кодирования (функциональный и ООП) может привести к отсутствию согласованности в дизайне. Это верно?

Том Сквайрс
источник
1
Как вы можете использовать их в одном проекте? Вы имеете в виду то же самое решение?
Брайан Бетчер
2
Не определение проекта Microsoft, а более общее определение
Том Сквайрс
Один очевидный недостаток заключается в том, что если по крайней мере часть работы над проектом требует, чтобы разработчик взаимодействовал с обоими разделами в C # и в F # (даже просто для их чтения), для этих частей потребуется разработчик, знающий оба языка, и есть их меньше, чем тех, кто владеет только одним языком, и, следовательно, их труднее найти, потенциально дороже и их меньше (в данном конкретном случае, хотя вполне вероятно, что большинство разработчиков на F # также хоть немного знакомы с C #) ,
GBR
абсолютно. Например, постепенное введение F # в унаследованное решение C # является допустимым сценарием.
КолА

Ответы:

23

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

Если в вашем проекте есть часть, которую лучше всего написать с использованием функционального языка, то имеет смысл кодировать ее на F #. Аналогично для C #.

Что было бы бессмысленно (в лучшем случае), так это смешивать языки ради этого.

ChrisF
источник
0

Мне кажется, что смешивание двух очень разных стилей кодирования (функциональность против ОО) может привести к отсутствию единства в дизайне. Это верно?

Я не думаю, что вы получите «отсутствие сплоченности». У каждого языка есть свои сильные и слабые стороны. Объединение их в общеязыковую среду позволяет вам приблизиться к лучшему в обоих мирах. С C # и F # вы просто хотите убедиться, что вы используете пересечение двух языков в интерфейсе между ними в вашем решении.

Джон Харроп
источник
0

Да, я согласен с ChrisF . Также C # в настоящее время уже включает принципы F #, такие как анонимные типы:

var unitanon = new[]
{
    new { Field1="new car", Field2 = 1},
    new { Field1="old car", Field2 = 20} 
};

Тем не менее, я лично считаю, что это шаг назад в удобочитаемости кода, хотя это очень удобно.

PaulDecember
источник
2
Анонимные типы на самом деле не являются принципом F #. Может быть, вы хотите сослаться на вывод типа (что делает ключевое слово var в C #), при этом компилятор угадывает, какой тип вы имеете в виду. Это используется во всем F #.
Mongus Pong
1
Я бы использовал F # для простых асинхронных возможностей. Тем не менее, TPL сделал это довольно легко сделать в C # сам по себе. Если бы вы встроили язык для написания сценариев, я бы определенно использовал F # для его анализа.
Джетти