Ответ 1
Я думаю, что все три версии прекрасно подходят, идиоматический код, который будут писать эксперты F #.
Я вообще предпочитаю писать код, используя встроенные функции языка (например, for
loops и if
), если они позволят мне решить проблему, которая у меня есть. Это необходимо, но я думаю, что использование их - хорошая идея, когда API требует императивного кода (например, outFile.WriteLine
). Как вы упомянули, вы начали с этой версии (и я бы сделал то же самое).
Использование функций более высокого порядка тоже хорошо - хотя я бы это сделал, только если бы захотел написать преобразование данных и получить новую последовательность или список строк - это было бы удобно, если бы вы использовали File.WriteAllLines
вместо того, чтобы писать линии один за другим. Хотя это можно было бы сделать, просто завернув вторую версию с помощью выражения последовательности:
let transformed =
seq { for line in File.ReadLines(inFile) -> Regex.Replace(line, "\t",",") }
File.WriteAllLines(outFilePath, transformed)
Я не думаю, что есть какая-то объективная причина, чтобы предпочесть одну из версий. Моим личным стилистическим предпочтением является использование for
и рефакторинг для выражения последовательности (если необходимо), но другие, скорее всего, не согласятся.