Отладка кода F # и функционального стиля
Я новичок в программировании с программированием и задаю некоторые вопросы относительно стиля кодирования и отладки.
У меня создается впечатление, что следует избегать хранения результатов от вызовов funcction в переменной temp и затем возвращать эту переменную
например.
let someFunc foo =
let result = match foo with
| x -> ...
| y -> ...
result
И вместо этого сделайте это так (я мог бы уйти?):
let someFunc foo =
match foo with
| x -> ...
| y -> ...
Что отлично работает с точки зрения функциональности, но это затрудняет отладку.
У меня нет возможности проверить результат, если правая часть → делает некоторые фанковые вещи.
Итак, как мне работать с такими сценариями?
Ответы
Ответ 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 # вы часто хотите проверить середину конвейера, что трудно сделать. В том смысле, что функциональное программирование означает "меньше именных переменных и локалей" и "более крупные выражения", это отрицательно влияет на текущее поколение отладчиков. (С другой стороны, с такими вещами, как менее изменчивость и более высокая абстракция, надеюсь, вы потратите меньше времени на отладчик.)
Есть еще много способов отладки будущего можно улучшить...
См. также
Некоторые конструкторы функционального программирования уменьшают отлаженность?