2.Scala基础语法-2

2.1 操作符运算

  • 使用中缀数学操作符+、-、*、/、%并产生对应的数值结果
  • 使用比较操作符<、>、>=、=<并产生布尔值结果
  • 使用逻辑操作符&&、||并产生布尔值结果
  • 使用对等操作符==、!=并产生布尔值结果
  • 使用位操作符&、|、^、~并产生数值结果

  • 实际上,ScaLa没有任何操作符,所有的操作符运算都是对方法(函数)的调用
    • 如1+2实际上是调用了.+() 这个方法1.+(2)
    • 在具体的调用中,调用+实际上包含了+的各种类型参数的重载,而无需额外定义
  • 前缀后缀操作符是一元操作符,而中缀操作符是二元操作符
  • 操作符具有优先级
    • 1+5*4=21 (1+5)*4=24
    • 操作符优先级一般如下:
    • 特殊字符 > */% > ± > : > =!> <> > & > ^ > | > 其他字母 > 赋值操作符
    • scala支持如“***”“±+”之类的操作符重载,考虑其优先级一般以第一个符号为主
    • 值得注意的是,形如“*=”的操作符重载,会被认为是赋值操作符而具有最低的优先级 即 m *= n+5 等价于m *= (n+5)

2.2 通用规范

2.2.1 标识符与命名

  • 首字符为字母,后续字符任意字母和数字,可后接下划线_
  • 首字符为操作符,后续字符为任意操作符
  • Scala中有些保留字,不能用作标识符,但是反引号括起除外
  • 如return是保留字,标志为Do.return是非法的,但可以标志为Do. return
  • 具体保留字一般可以通过查询保留字表得出,往往是常用的有特定含义的单词,如case、else等

2.2.2 语句结束

  • Scala是基于行的语言,分号和换行均可作为语句的结束
  • 判定换行是否为语句的结束有以下规则:
    • 换行前的符号是一个语句的结束:常量、标识符、保留字及其他分隔符
    • 换行后的符号是一个语句的开始:除部分分隔符及保留字外的所有符号
    • 符号处在一个允许多语句的区域:Scala源文件中,匹配的{与}间
  • 换行不作为语句的结束
    • 匹配的(与)之间,[与]之间
    • XML模式下的区域
    • case符号及匹配的=>符号之间
    • if、while、for、type是允许跨两行的合法语句

2.2.3 编程规范

  • Scala是一门相当自由的语言,合法的语句却不一定好读、便于理解
  • 通常的Scala编写规范
    • 代码格式化,不同段落、不同文件的Scala应保持相同的语法格式
    • 层次间缩进,避免长语句
    • 合理的命名
      • 短作用域短名字,长作用域长名字
      • 通用缩写,词意与目的相近,莫要使用add来命名一个做减法的函数
      • 避免不同用途时重用名字
      • 避免用反引号声明保留字
      • 有返回值的方法(函数)用可描述的名字
    • 利用{}创建复合表达式
    • 及时注释 // /* */

2.2.4 Scala运行模式

  • 交互模式
    • CMD运行scala
  • 脚本模式
    • 创建一个源文件:HelloWorld.scala,保存在目录:D:\software\scala-2.12.3\bin 下,并在其中编写以下代码

    • CMD中编译执行

2.3 运算符和规范实战

scala> 1.+(2)
res10: Int = 3

scala> 1+2*3-4
res11: Int = 3

scala> 1+(2*3)-4 
res12: Int = 3 

scala> var m =0 
m: Int = 0 

scala> m += 1 

scala> m 
res15: Int = 1 

scala> m *= res12 + 3 

scala> m 
res17: Int = 6 

scala> m = 2 m: Int = 2 

scala> m *= res12 + 3 

scala> m 
res19: Int = 12 

scala> val val = 1 
<console>:1: error: illegal start of simple pattern 
val val = 1 
    ^
scala> val def = 1 
<console>:1: error: illegal start of simple pattern 
val def = 1 
    ^ 


scala> :power 
** Power User mode enabled - BEEP WHIR GYVE ** 
** :phase has been set to 'typer'. ** 
** scala.tools.nsc._ has been imported ** 
** global._, definitions._ also imported ** 
** Try :help, :vals, power.<tab> ** 

scala> nme.keywords 
res21: Set[$r.intp.global.TermName] = Set(abstract, >:, true, val, do, throw, <-, package, _, macro, @, object, false, this, if, then, var, trait, ., catch, with, def, else, class, type, #, lazy, null, =, <:, override, protected, =>, private, sealed, finally, new, implicit, extends, final, for, return, case, import, forSome, :, super, while, yield, try, match, <%) 

scala> if (m>1){ 
     | println(m) 
     | } 
12

scala> //comment 

scala> /* 
     | comment1 
     | comment2 
     | */ 
     | m 
res24: Int = 12 

scala> print(m) 
12
scala> println(m) 
12
  • 创建代码文件 D:\tmp\test1.scala.txt
val v1 = 3 

var v2 = v1 + 4

println(v1,v2)
  • 执行文件
C:\Users\THINKPAD>

D: D:\>cd tmp 

D:\tmp>scala test1.scala.txt 
(3,7) 

D:\tmp>

2.3.1 列表

scala> val lis1 = List(1,2,3) 
lis1: List[Int] = List(1, 2, 3) 

scala> val lis2 = List(1,2,'a') 
lis2: List[Int] = List(1, 2, 97) 

scala> val lis3 = List('c','b','a') 
lis3: List[Char] = List(c, b, a) 

scala> lis3(0) 
res9: Char = c 

scala> val pls1 = List(3,4,5,6) 
pls1: List[Int] = List(3, 4, 5, 6) 

scala> pls1(1) 
res10: Int = 4 

scala> pls1.filter(x => x>4) 
res11: List[Int] = List(5, 6) 

scala> pls1.filter(_>4) 
res12: List[Int] = List(5, 6) 

scala> 0 max 10 
res19: Int = 10 

scala> val pv3 = 123.45f 
pv3: Float = 123.45 

scala> pv3/3 
res20: Float = 41.149998 

scala> pv3/3 max 30
res21: Float = 41.149998 

scala> val yb1 = (pv3/3 max 30) > 40 
yb1: Boolean = true 

scala> 0 min 10 
res22: Int = 0 

scala> pls1 
res25: List[Int] = List(3, 4, 5, 6) 

scala> 2 :: pls1 
res26: List[Int] = List(2, 3, 4, 5, 6) 

scala> yb1 :: pls1 
res27: List[AnyVal] = List(true, 3, 4, 5, 6) 

scala> val pls2 = List(7,8) 
pls2: List[Int] = List(7, 8) 

scala> pls1 ::: pls2 
res28: List[Int] = List(3, 4, 5, 6, 7, 8)

2.3.2 集合

scala> val set1 = Set(3,3,4,5,5) 
set1: scala.collection.immutable.Set[Int] = Set(3, 4, 5) 

scala> set1(0) 
res13: Boolean = false 

scala> set1(1) 
res14: Boolean = false 

scala> set1.head 
res17: Int = 3 

scala> set1.last 
res18: Int = 5

scala> set1(4) 
res29: Boolean = true

大数据视频推荐:
CSDN
大数据语音推荐:
企业级大数据技术应用
大数据机器学习案例之推荐系统
自然语言处理
大数据基础
人工智能:深度学习入门到精通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值