官术网_书友最值得收藏!

  • Scala Programming Projects
  • Mikael Valot Nicolas Jorand
  • 337字
  • 2021-07-23 16:25:13

Side effects

A function or expression is said to have a side effect when it modifies some state or has some action in the outside world. For instance, printing a string to the console, writing to a file, and modifying a var, are all side effects.

In Scala, all expressions have a type. A statement which performs a side effect is of type Unit. The only value provided by the type Unit is ():

scala> val x = println("hello")
hello
x: Unit = ()

scala> def printName(name: String): Unit = println(name)
printName: (name: String)Unit

scala> val y = {
var a = 1
a = a+1
}
y: Unit = ()

scala> val z = ()
z: Unit = ()

A pure function is a function whose result depends only on its arguments, and that does not have any observable side effect. Scala allows you to mix side-effecting code with pure code, but it is a good practice to push side-effecting code to the boundaries of your application. We will talk about this later in more detail in the Ensuring referential transparency section in Chapter 3, Handling Errors.

Good practice: When a function with no parameters has side effects, you should declare it and call it with empty brackets (). It informs users of your function that it has side effects. Conversely, a pure function with no parameters should not have empty brackets, and should not be called with empty brackets. IntelliJ helps you in keeping some consistency: it will display a warning if you call a parameterless function with (), or if you omit the () when you call a function declared with  ().

Here is an example of a method call with a side effect where we have to use empty brackets, and an example of a pure function:

scala> def helloWorld(): Unit = println("Hello world")
helloWorld: ()Unit

scala> helloWorld()
Hello world

scala> def helloWorldPure: String = "Hello world"
helloWorldPure: String

scala> val x = helloWorldPure
x: String = Hello world
主站蜘蛛池模板: 阜南县| 娄烦县| 孙吴县| 潢川县| 临汾市| 左贡县| 巴南区| 拜泉县| 自治县| 宣恩县| 江北区| 布尔津县| 达日县| 江油市| 曲周县| 绥阳县| 乐亭县| 湖南省| 济源市| 米脂县| 岫岩| 阿拉善右旗| 安岳县| 秦皇岛市| 石首市| 安阳县| 微博| 鲁甸县| 张家界市| 惠来县| 永丰县| 乌兰察布市| 阿拉善右旗| 包头市| 中卫市| 茂名市| 德清县| 涿鹿县| 邹平县| 逊克县| 遵义市|