Считается ли эта функция побочным эффектом, поэтому плохой дизайн FP? - PullRequest
0 голосов
/ 28 августа 2018
  private def retrieveSongId(songName: String): Option[JsValue] = {
    val geniusStringResponse = Http("https://api.genius.com/search?q=" + formattedSongName)
      .param("access_token", apiKey)
      .asString
      .body

    //Extra processing with geniusStringResponse   
    }
  }

Будет ли вышеуказанная функция считаться побочным эффектом из-за HTTP-запроса? Если да, то подходит ли такой код Scala?

1 Ответ

0 голосов
/ 28 августа 2018

Да, вызов этой функции имеет побочный эффект при отправке HTTP-запроса. Вызов этой функции может повлиять на результат другой функции (например, getSearchCount), и эта функция может возвращать разные результаты при одинаковых входных значениях (например, сервер не доступен постоянно).

Однако это не значит, что это не подходит. Любая полезная программа Scala будет иметь побочные эффекты, но хитрость заключается в том, чтобы держать их как можно более ограниченными. Хорошо написанная программа Scala будет иметь богатый набор классов и функций, не имеющих побочных эффектов, и относительно легкий слой нефункционального кода, который их вызывает.

В этом случае, например, у вас должна быть простая функция, которая выполняет HTTP-запрос, и вторая функция, которая обрабатывает результаты. Функция обработки результатов может быть чистым функциональным кодом и может быть эффективно протестирована с фиктивными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...