代码之家  ›  专栏  ›  技术社区  ›  bob9123

这个功能被认为是一个副作用,因此坏的FP设计?

  •  1
  • bob9123  · 技术社区  · 7 年前
      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 回复  |  直到 7 年前
        1
  •  3
  •   Tim    7 年前

    getSearchCount ),如果输入值相同,则此函数可能返回不同的结果(例如,服务器并非始终可用)。

    然而,这并不意味着这是不适当的。任何可用的Scala程序都会有副作用,但诀窍是尽可能限制它们。一个编写良好的Scala程序将拥有一组丰富的无副作用的类和函数,以及调用它们的非功能性代码的相对较轻的层。

    例如,在这种情况下,应该有一个简单的函数来执行HTTP请求,还有一个函数来处理结果。结果处理函数可以是纯函数代码,并且可以用模拟数据进行有效的测试。

    推荐文章