против Так что я натыкался на этот тур по F #: https://docs.microsoft.com/en-us/dotnet/articles/fsharp/tourF # функции C# ных "Func"
... и мальчик здор`ово это F # интересно! В самом начале тура была определена выборочная функция, которая выглядит довольно просто:
/// You use 'let' to define a function. This one accepts an integer argument and returns an integer.
/// Parentheses are optional for function arguments, except for when you use an explicit type annotation.
let sampleFunction1 x = x*x + 3
Так что это имеет смысл для меня. Она определяет, что функция так, если бы я пройти некоторое число в эту вещь, она квадратики и добавляет в 3 к этому результату, как показано на следующей строке в туре:
/// Apply the function, naming the function return result using 'let'.
/// The variable type is inferred from the function return type.
let result1 = sampleFunction1 4573
Дав это несколько больше минут мысли, я придумал вывод, что C# тоже может это сделать! Я уверен, действительно люблю C#. Это то, что выше будет выглядеть в C#, насколько я могу сказать:
Func<int, int> sampleFunction1 = x => x*x + 3;
var result = sampleFunction1(4573);
Так что мой главный вопрос, в чем разница между тем, что я написал в C# и то, что F # тур показал мне? Подзапросы: Является ли код IL другим, даже если это тот же CLR? Каковы несколько причин, по которым я буду использовать F # над C#?
IL, вероятно, будет отличаться только потому, что компиляторы работают с совершенно разными языками и, следовательно, имеют разные оптимизации, интерпретации, переводы и т. Д. Вам нужно найти кого-то, знакомого с обоими языками, чтобы точно рассказать вам, но с помощью инструмента дизассемблера IL (например, [ILSpy] (http://ilspy.net/)) вы можете легко открыть исполняемые файлы/библиотеки DLL и самостоятельно изучить. – Abion47
Вы не заметите большой разницы в функциях одной линейки. На самом деле многие вызовы .NET BCL будут одинаково выглядеть как на C#, так и на F #. Однако, если вы создадите что-то более сложное, вы увидите преимущества F #, как с точки зрения синтаксиса, так и структуры.Особенно, если вы хотите отойти от парадигмы OO и уменьшить изменяемые (движущиеся) части в вашем проекте. – s952163