《快学Scala(第二版)》-CH2 控制结构和函数

少年壮志不言愁
劝君惜取少年时

  • 在Scala中if/else结构有返回值,这个值就是跟在if/else之后的表达式的值

     scala> val x = 2
     x: Int = 2
     scala> val s = if(x > 1) 1 else -1
     s: Int = 1
    
  • Scala中的表达式有类型,例如上面表达式if/else的类型是Int,又比如if (x>0) "a" else -1的类型是两个分支的公共超类型Any
    如果没有else,Scala中处理等同于if(x > 1) 1 else (),引入类Unit
    Unit类型只有一个值,写作()

  • Scala中,{ }块包含一系列表达式,结果也是一个表达式。块中最后一个表达式的值就是的值。

  • 输出使用print/println函数

  • readLine从控制台读取一行输入,readIntreadDoublereadBytereadShortreadLongreadFloatreadBooleanreadChar读取数字、Boolean和字符

  • 循环

    • for (i <- 表达式) 让变量i遍历<-右边的表达式的所有值
    • Scala中,循环使用并不频繁,通常可用某个函数处理。
    • Scala没有提供break或者continue语句跳出循环,这里举例一下使用Breaks对象中的break方法跳出循环
      object BreakLoop {
       |   def main(args: Array[String]) {
       |     val a = 0
       |     val numList = List(1, 2, 3, 4, 5, 6)
       |     val loop = new Breaks
       |     loop.breakable {
       |       for( a<- numList) {
       |         println( "a is : " + a )
       |         if( a == 3 ){
       |         loop.break
       |         }
       |        }
       |      }
       |      println("Loop End")
       |     }
       | }
      
  • 高级for循环

    • 变量<-表达式的形式提供多个生成器,每个生成器可以带上if守卫
    • for推导式:如果for循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集合中的一个值
  • 定义函数:函数名、参数和函数体。Scala编译器可以通过=右侧的表达式的类型推断出函数返回类型

  • 接收可变长度参数列表的函数

     def sum(args:Int*)={ var result = 0; for(arg <- args) result += arg; result}
     val s = sum(1,2,3,4,6)
    

    函数得到的是一个类型为Seq的参数,用for循环访问每一个元素。但如果已经有一个值的序列,则不能直接传入函数中,需要告诉编译器希望这个参数被当做参数序列处理,追加:_*.

    val s = sum(1 to 5:_*) // 此处将1 to 5做参数序列处理
    
  • 过程: 如果函数体包含在花括号中但没有前面的=号, 那么返回类型就是Unit。这样的函数称为过程。过程不返回值

  • 懒值: 当val被声明为lazy时,它的初始化将被推迟,直到首次对它取值。懒值对于开销较大的初始化语句有用,是介于val和def的中间状态,val在被定义时即被取值;lazy在被首次使用时取值;def在每一次被使用时取值。懒值并非没有额外开销,每次访问懒值时都会有一个方法被调用,这个方法会以线程安全的方式检查该值是否已被初始化

  • 异常: Scala没有“受检”异常,不需要声明说函数或方法可能会抛出某种异常。控制器将在离抛出点最近的处理器中恢复,如果没有找到符合要求的异常处理器,则程序退出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,392评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,258评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,417评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,992评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,930评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,199评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,652评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,327评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,463评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,382评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,432评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,118评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,704评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,787评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,999评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,476评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,057评论 2 341

推荐阅读更多精彩内容