快学Scala读书笔记002

第2章 控制结构和函数

if/else

Scala的if/else语法结构和Java或C++一样,不过在Scala中if/else表达式有值,这个值就是跟在if/else之后的表达式的值。看一些例子:

if(x>0) 1 else -1 // 两个分支都是Int 
val s = if(x>0) 1 else -1 //两个分支都是Int

在Scala中,每个表达式都有一个类型,上面两个例子中都是Int.但也有混合类型表达式。

if(x>0) "positive" else -1 //

第一个分支为String,第二个为Int。此为混合类型,它们的公共超类叫做Any。

if(x>0) 1  //缺失了else部分,但是在Scala中的if/else中每个表达式都得有值,此时引入Unit类,写作()
if(x>0) 1 else ()//

你可以把()当做表示“无有用值”的占位符,将Unit当做Java中的void,但是二者还是有区别的。

输入输出

  • 如果要打印一个值,我们用print或者println函数,后者多一个换行符,另外还有一个带C风格格式化字符串的printf函数。

  • 你可以用readLine函数从控制台读取一行输入,当然要读书数字,Boolean或者字符可以用readInt,readDouble。。。。readBoolean,readChar。

  • 注意:没有readString()函数。readLine()可以加提示参数,如下例子:

     val name = readLine("your name:") //可以带参
    
     print("your age:")
    
     val age = readInt() //读取数字
    

循环

Scala拥有和Java和C++一样的while和do循环,而Scala中的for()循环语句结构特殊,如下:

    for(i<- 1 to n)//循环:1到n之间的数字包含n
    for(i<- 表达式) //for循环的语法架构,让变量i变量右边的所有表达式的值
  • 在变量字符串或数组的时候,经常需要用到0道n-1的区间,这个时候可以用until方法而不是to方法,until方法不包括上限值,如下:

      val s = "Hello"
      var sum = 0
      for(i <- 0 until s.length)
      sum+= s(i)
     //以上代码使用了until,可以简化如下
     var sum=0
     for(ch <- "Hello") sum+=ch
    

函数

Scala除了方法外还支持函数。方法对对象操作,而函数不是。C++中也有函数,不过Java中我们只能用静态方法来模拟。

  • scala之method和function的区别
    //定义一个函数
    def fac(n:Int) = {

         var r = 1
         for(i < 1 to n) r = r*i
         r
    
     } //本例中并没有用到return。我们也可以像Java或c++一样使用return从某个函数退出,不过在Scala不常用
    

变长参数:

    def sum(args:Int*) = {
        var result = 0
        for(arg <- args) result += arg
        result
    
    }

懒值

当val被声明为lazy时候,它的初始化将被推迟,直到我们首次去用它。懒值的好处,对于开销较大的初始化语句十分有益,节省了不必要的开销。


你可能感兴趣的:(快学Scala读书笔记002)