Я изучаю F # и функциональное программирование и стараюсь делать что-то функциональным способом. Однако, когда дело доходит до перезаписи кода, который я уже написал на С#, я застрял в простых операциях if-then (те, которые только что-то делают, а не возвращают значение). Я знаю, что вы можете сделать это в F #:
if expr then do ()
Однако, я думал, что это был императивный подход к кодированию? Возможно, я недостаточно узнал о функциональном программировании, но для меня это не кажется функциональным. Я думал, что функциональный подход состоит в том, чтобы составлять функции и выражения, а не просто выполнять инструкции один за другим, что есть, если-то, кажется, поощряет.
Итак, я что-то упускаю, а если... тогда прекрасно в функциональном мире? Если нет, то каков функциональный эквивалент такого утверждения? Как я мог взять if-then и включить его?
Изменить: я, возможно, задал неправильный вопрос (извините, все еще довольно новый для функционального программирования): Позвольте взять пример реального мира, который заставил меня даже спросить об этом:
if not <| System.String.IsNullOrWhiteSpace(data) then do
let byteData = System.Text.Encoding.Unicode.GetBytes(data)
req.ContentLength <- int64 byteData.Length
let postStream : System.IO.Stream = req.GetRequestStream()
postStream.Write(byteData, 0, byteData.Length)
postStream.Flush()
postStream.Dispose()
Тело этого if-then ничего не возвращает, но я не знаю, как я мог бы сделать это более функциональным (если это возможно). Я не знаю правильной техники для минимизации императивного кода. Учитывая природу F #, довольно легко просто переносить мой С# напрямую, но у меня возникают трудности с его функциональностью. Каждый раз, когда я получаю такой оператор if на С#, и я пытаюсь перенести его на F #, я смущаюсь, что не могу придумать, как сделать код более функциональным.