Завершён перевод цикла статей Скотта Влащина про вычислительные выражения в F#. В этом посте я собрал ссылки на все 11 статей для удобства читателей.

  1. Введение. Разгадывая загадку...

  2. Разбираемся с продолжениями. Как let работает под капотом

  3. Введение в Bind. Шаги к созданию собственного let!

  4. Типы-обёртки. Используем типы для облегчения вычислительного процесса

  5. Подробнее про типы-обёртки. Обнаруживаем, что даже списки могут быть типами-обёртками

  6. Реализуем Zero и Yield. Начинаем знакомство с базовыми методами построителя

  7. Реализуем Combine. Как вернуть много значений за раз

  8. Реализуем Delay и Run. Контролируем время запуска функций

  9. Перегрузка. Тупые трюки с методами построителя

  10. Добавляем ленивость. Откладываем вычисления не только внутри, но и снаружи выражений

  11. Оставшиеся стандартные методы. Реализуем While, Using и обработку исключений

Комментарии (3)


  1. kozlov_de
    02.09.2024 15:24

    Когда всё это появится в c#?

    А то можно и так, наверное

    using System;
    
    public static class Logger
    {
        public static int Log(Func<int> expression)
        {
            try
            {
                int result = expression();
                Console.WriteLine($"Result: {result}");
                return result;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
                throw;
            }
        }
    }
    
    public static class Program
    {
        public static int loggedWorkflow()
        {
            return Logger.Log(() =>
            {
                int x = 42;
                int y = 43;
                int z = x + y;
                return z;
            });
        }
    
        public static void Main(string[] args)
        {
            int result = loggedWorkflow();
            Console.WriteLine($"Final result: {result}");
        }
    }


    1. markshevchenko Автор
      02.09.2024 15:24

      Не знаю. Ходят слухи, что команда C# хочет что-то подобное затащить, но пока это только слухи, и не очень понятно, в каком объёме будут затаскивать.

      С другой стороны — проект на F# вполне может держать в одном солюшене вместе с проектами на C#, так что уже сейчас можно писать, скажем, чистую бизнес-логику на F#, а инфраструктуру — на C#. Многие именно так и делают.


    1. SideshowBob
      02.09.2024 15:24

      так у вас совсем не то же самое. надо ж после каждой строчки вывести лог.