Подтвердить что ты не робот

Отладка кода F # и функционального стиля

Я новичок в программировании с программированием и задаю некоторые вопросы относительно стиля кодирования и отладки.

У меня создается впечатление, что следует избегать хранения результатов от вызовов funcction в переменной temp и затем возвращать эту переменную

например.

let someFunc foo =
    let result = match foo with
                 | x -> ...
                 | y -> ...
    result 

И вместо этого сделайте это так (я мог бы уйти?):

let someFunc foo =
    match foo with
    | x -> ...
    | y -> ...

Что отлично работает с точки зрения функциональности, но это затрудняет отладку. У меня нет возможности проверить результат, если правая часть → делает некоторые фанковые вещи.

Итак, как мне работать с такими сценариями?

4b9b3361

Ответ 1

В любом случае допустимо, поскольку вы просто привязываетесь к локальной неизменяемой переменной.

Однако есть уловка. Если вы используете его как часть рекурсивного цикла с использованием хвостовых вызовов, тот, который использует временную переменную, устранит хвостовой вызов, и, следовательно, у вас будет увеличение пространства стека.

Ответ 2

Чтобы проверить середину конвейера, я предлагаю следующее обходное решение:

Поместите этот код в какое-то место:

[<AutoOpen>]
module AutoOpenModule

#if DEBUG
let (|>) value func =
  let result = func value
  result
#endif

Включить "Шаг в свойства и операторы в управляемом коде":

https://msdn.microsoft.com/en-us/library/cc667388(v=vs.100).aspx

Теперь вы должны войти в оператор конвейера.

Ответ 3

Я бы не застрелил тебя, если бы ты использовал темп, но я тоже не стал бы судорожно стирать свой стиль, если бы мне пришлось смотреть что-то под отладкой.

Кроме того, отладка такого рода гораздо проще с визуальным отладчиком Visual Studio 2010, так как вы можете использовать точки останова в каждом возможном совпадающем выражении. Существует также быстрый просмотр и другие замечательные функции.

Список новейших функций отладчика Visual Studio: http://msdn.microsoft.com/en-us/library/01xdt7cs.aspx

Ответ 4

Возможность видеть возвращаемое значение функции в VS является давним запросом. Другие значения промежуточного выражения; Например, в F # вы часто хотите проверить середину конвейера, что трудно сделать. В том смысле, что функциональное программирование означает "меньше именных переменных и локалей" и "более крупные выражения", это отрицательно влияет на текущее поколение отладчиков. (С другой стороны, с такими вещами, как менее изменчивость и более высокая абстракция, надеюсь, вы потратите меньше времени на отладчик.)

Есть еще много способов отладки будущего можно улучшить...

См. также

Некоторые конструкторы функционального программирования уменьшают отлаженность?