Scala基础语法
scala是一种多范式的编程语言,其设计的初衷是要集成面向对象和函数式编程的特性。并兼容java程序。
为什么要学scala?
1.优雅
2.速度快
3.能融合到hadoop生态圈
安装sdk
- 到官网(https://www.scala-lang.org/)下载对应操作系统的sdk包。最好不要选择最新的版本
- 可以cmd到源码包内执行scala,或者配置环境变量直接执行scala进入交互式窗口
idea集成scala
- 点击新建项目,选择scala
- 右侧选择idea自身的scala项目,下一步
- 选择好jdk和scala后点击finsh,一个scala项目就创建完成了
基本语法(为了方便使用scala交互式窗口)
-
数据类型
Unit 表示无值,与其他语言中的void等同。用作不返回
任何结果方法的返回值类型,Unit只有一个实例值()
Any 是相当于java中的Object
Anyval 中包含七种基本的值类型(基本类型)
AnyRef 中包含所有的引用类型
-
变量
定义变量(val 修饰的变量值不能再改变)
1.var 变量名 = 值
2.var 变量名:数据类型 = 值
3.val 变量名 = 值
定义Unit类型的变量
1. val u:Unit = print(“hello world”)
2. val s=() -
字符串的格式化输出
普通输出
print(“name=”+name,“age=”+age) //有括号
print(“name=”+name+“age=”+age) //没括号
printf动态取值输出
//f相当于printf,这里%s打印的是字符类型,%1.2f打印的是float类型
println(f"$name%s,学费= $pirce%1.2f,网址是$url");//该输出有换行
printf("%s , 学费= %1.2f ,网址 = %s",name,price,url)//该输出没有换行
s字符串插入器(可以处理表达式)
println(s"age=${12+6}") //使用s申明,表达式写在${}中
对象属性的输出
var stu = new student()
println(s"name=${stu.name}") -
条件表达式
if (后面没有判断时,可以省略{},默认返回Unit。{}中的最后一行为返回值)
1.if(条件) 符合值 else 不符合值
2.if(条件){ 符合值}else if(条件) 符合值 else 不符合值
for
1.for(i<-表达式/数组/集合){}
2. 1 to 10(相当于 1 to (10)) 左闭右闭区间
for(1<- 0 to(5)){}
3.1 until 10 左闭右开区间
for(1<-0 until arr.length){}
4.for(i<-arr;if i %2==0){} //;可以省略if为循环条件
//双层for循环加循环条件,第一个;不可以省略
5.for(i<-1 to 3;j<-1 to 3;if i!=j){}
6.yield关键字
for(i<-arr if i%2==0) yield i //返回值为一个数组,会过滤出符合你条件的集合 -
运算符/操作符重载
scala中的操作符的作用与java中一样,只不过这些操作符与运算符是方法。
例如 a + b 等同于 a.+(b),省略时使用空格隔开 -
方法的定义
def 方法名(形参:类型,形参2:类型):返回值类型={} //除了def 方法名 与等号之外都可以省略不写 如果定义时没写()则调用时也不能写()
add _ //在scala中方法与函数不为一个概念,方法可以加 _(这里为空格+下划线)转为函数
-
函数的定义
(Int,Int,Int)=> Int = //()内表示形参类型,=>左边表示返回值类型,=左边表示参数返回值类型
交互式窗口中res42默认表示匿名函数
- var fxo = (a:Int,b:Int) =>a+b
- vat fxo2:(Int,Int)=>Int=(a,b)=>a+b
-
传值调用和传名调用
函数的参数可以是一个具体的数值,可以是一个表达式
def test(x:Int) = {} //传值调用
def test(x: =>Int) = {} //传名调用,传入的方法会被隐式转换成函数