1.本章要点;

(1)if表达式有值;

(2)块也有值,是它最后一个表达式的值

(3)Scala的for循环就像是"增强版的"Java for循环

(4)分号不是必须的

(5)void 类型是Unit

(6)避免在函数的定义中使用return

(7)注意别在函数式定义中漏掉了=

(8)异常的工作方式和java或者c++中基本一样,不同的是你在catch语句中使用"模式匹配"

(9)Scala没有受检异常。

2.条件表达式

(1)Scala中的if/else表达式有值,这个值就是跟在if或者else之后的表达式的值。

对于java 或者c++中的?:操作符,Scala有同样的表达方式:

x>0?1:-1  //等同于if(x>0) 1 else -1

(2)Scala中每个表达式都有一个类型,如if(x>0) 1 else -1的类型是Int。对于混合类型的表达式:如下图所示,其中一个分支是java.lang.String,而另外一个分支是Int,所以公共超类是Any

(3)如果else部分缺失了,如if(x>0) 1,但是在Scala中每个表达式都有某种值。所以对于这种问题的一种解决方案是引入一个Unit类,写做()。void没有值但是Unit有一个表示"无值"的值。不带else的语句等同于

if(x>0) 1 else ()。

3.语句终止

4.块表达式和赋值

(1)块语句是一个包含于{}中的语句序列。{}包含一系列的表达式,其结果也是一个表达式。块的最后一个表达式的值就是块的值。val distance = {val dx=x-x0;val dy=y-y0;sqrt(dx*dx+dy*dy)}

(2){}块的值取其最后一个表达式,如下面的粗体标出。在Scala中,赋值动作本身是没有值的,或者说值是Unit类型的,即值的类型是{}。一个赋值语句结束的块,比如{r=r*n;n-=1}的类型是Unit的。所以下面的这种形式是错的:

x=y=1    返回值是Unit类型的。  y=1值是(),最后得到的x是一个Unit类型的值。

4.输入和输出

(1)println函数在打印完成之后会在内容后面追加一个换行符。

(2)相对应的print函数就不带有换行的功能。

print("Answer: ")

println(42)

等价于 println("Answer "+42)

5.循环

(1)Scala有和Java相同的while和do循环

(2)for循环的语法:for(i <- 表达式)  让变量i遍历<-右边的表达式的所有值。for循环的变量之前,并没有val或者var的指定。该变量的类型是集合的元素类型。循环变量的作用域一直持续到循环结束。

(3)在遍历字符串或者数组的时候,通常需要使用从0到n-1的区间。这个时候可以使用util方法,而并不是to方法。util方法返回讴歌并不包含上限的区间。

(4)在这里并不需要使用下标。

6.高级for循环和for推导式

(1)使用 变量<-表达式的形式提供多个生成器,使用分号将他们隔开。

(2)每个生成器都可以带一个守卫,以if开头的Boolean表达式:

(3)可以使用任意多的定义,引入可以在循环变量中使用的变量:

7.函数

(1)函数定义:需要给出函数的名称、参数和函数体。但是必须给出所有的参数的类型。Scala编译器可以通过=符号右侧的表达式的类型推断出返回值的类型,只要函数不是递归的,就不需要指定返回值的类型。

def abs(x:Double) = if(x>=0) x else -x

(2)如果函数体需要多个表达式来完成,可以使用代码块。块的最后一个表达式的值就是函数的返回值。

Scala新版本学习(2):的更多相关文章

  1. scala新版本学习(3)

    1.REPL:读取->求值->打印->循环.Scala程序将输入的内容快速的编译成为字节码,然后字节码文件交给Java虚拟机进行执行. 2.val是值不可变,var值可变.在变量声明 ...

  2. Scala新版本学习(1):

    1.进官网:https://www.scala-lang.org/ 上面就是进入Scala社区后的一个画面,官方对Scala的简单介绍是:Scala将面向对象和函数式编程集合在一个简洁的高级语言中,S ...

  3. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  4. Scala学习(一)--Scala基础学习

    Scala基础学习 摘要: 在篇主要内容:如何把Scala当做工业级的便携计算器使用,如何用Scala处理数字以及其他算术操作.在这个过程中,我们将介绍一系列重要的Scala概念和惯用法.同时你还将学 ...

  5. Scala 递归学习的例子

    为了学习Spark,我开始了学习Scala.加油! 递归的一个题目: 代码: // Why x is Float, but when we use 3.0 for example, it return ...

  6. scala基础学习(一)

    scala学习 scala与java的不同之处: 1.scala中任何一个操作符都是一个方法. s = 1+2;    可以写作:s=(1).+(2) 2.异常捕获采用模式匹配的方式. try { v ...

  7. Scala系统学习(四):Scala变量

    变量是保存存储值的内存位置的名称.这意味着当创建变量时,可以在内存中保留一些空间. 根据变量的数据类型,编译器分配内存并决定可以存储在预留内存中的内容.因此,通过为变量分配不同的数据类型,可以在这些变 ...

  8. Scala系统学习(三):Scala基础语法

    如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...

  9. Scala入门学习随笔

    推荐学习视频:慕课网http://www.imooc.com/learn/613,讲师:辰风 ScalaAPI:http://www.scala-lang.org/api/current/#packa ...

随机推荐

  1. 转:VMware 15 安装 MAC OS 10.13 原版(详细图文教程)

    -----------------转载------------------------ 原文:https://blog.csdn.net/qq_40147863/article/details/847 ...

  2. PM2工作原理

    PM2工作原理 要理解pm2就要理解god和santan的关系,god和santan的关系就相当于盖娅和黑底斯在pm2中的01世界中,每一行代码每一个字节都安静的工作god就是Daemon进程 守护进 ...

  3. DP&图论 DAY 3 上午

    DP&图论  DAY 3  上午 状态压缩dp >状态压缩dp ◦状态压缩是设计dp状态的一种方式.◦当普通的dp状态维数很多(或者说维数与输入数据有关),但每一维总量很少是,可以将多维 ...

  4. Linux 命令速记本

    # 比较1.txt和2.txt的差异 comm [---] .txt .txt # 求1.txt和2.txt的MD5用于区分两个文件是否相同 md5sum .txt .txt #tr 用于转换或删除文 ...

  5. 代码实现将键盘录入的数据拷贝到当前项目下的text.txt文件中,键盘录入数据当遇到quit时就退出

    package com.looaderman.test; import java.io.FileNotFoundException; import java.io.FileOutputStream; ...

  6. Linux性能分析之上下文切换

    而在每个任务运行前,CPU 都需要知道任务从哪里加载.又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器 CPU 寄存器,是 CPU 内置的容量小.但速度极快的内存.而程序 ...

  7. 在mac下安装fiddler

    说明:学习fiddler好久了,一直以来也没形成文档,之前学的一些知识也快忘得差不多了:正好利用假期,把之前学的知识都捡起来,捋一遍,形成文档,供以后使用的时候参考和借鉴 一:下载Mono 因为fid ...

  8. com.jniwrapper.util.ProcessorInfo

    MyEclipse 9.x Crack报错 com.jniwrapper.util.ProcessorInfo usercode or systemid is empty! 卸载JDK9,改成JDK8

  9. Windows 下关于转码的函数

    std::string& MsgFieldList::GBToUTF8(std::string& des,const char* str) { WCHAR *strSrc; TCHAR ...

  10. 2019牛客暑期多校训练营(第一场)-E(DP)

    题目链接:https://ac.nowcoder.com/acm/contest/881/E 题意:求可分解成n个AB和m个BA的字符串的个数. 思路: 首先根据贪心思想,前n个A可作为AB的A,后m ...