参考的视频教程见:https://www.bilibili.com/video/av33447780?p=34
Scala 和 Java 一样,有7中数值类型Byte、Char、Short、Int、Long、Float 和 Double(无包装类型)和 Boolean、Unit类型。
注意:Unit表示无值,和其他语言中void一样。用作不返回任何结果的方法的结果类型。Unit只有一个是实例值,写成().
Any类为所有类型的祖先,相当于Java类型的object对象。
//变量的定义
// /**
// * 可以是var 和val 修饰
// * var 修饰的可以改,val 不可以,相当于java 中final 修饰的变量
// *
// * var |val 变量名称(:类型) = 值
// *
// * Unit 数据类型相当于java中void 关键字,但在scala中它的表现形式为()
// *
// */
例如:
val a = "laolao"
val a:Int = 2
val s = println("hello") //s的类型就是Unit,println没有返回值
//字符串的格式化输出
val name = "lisi"
// var age = 18
// //普通输出
// println("name = "+ name,"age = "+age) //这里加逗号输出会有一对括弧括起来
// println("name = "+ name + "age =" + age)
// //文字‘f’插值器允许创建一个格式化的字符串,类似于C语言的printf
// //使用'f'插值器时,所有变量引用都应该是printf样式格式说明符,如%d %f %c等
// //这里$name%s打印String变量James 和 $height%2.2f打印浮点值1.90
// println(f"姓名:$name 年龄:$age") //println 打印有换行
// printf("姓名:%s,年龄:%d",name,age)//没有换行
//
// //‘s’允许在处理字符串时直接使用变量
// //在println语句中将String变量($name)附加到普通字符串中
// println (s"name = $name,age = $age")
// //字符串插入器还可以处理任意表达式
// //使用‘$’字符串插入器处理具有任意表达式(${1 + 1})的字符串(1+1)的以下代码片段
// //任何表达式都可以嵌入到${}中
// println(s"1 + 1 = ${1+1}")
// val stu = new day01.Student("wang", 18)
// println(s"name = ${stu.name }")
条件表达式
//条件表达式if else 的用法
// //有返回值,返回最后一行的代码
// val i: Int = 12
// if(i>10) i else 0 //相当于下面
// val s = if(i > 10)
// { i
// 100 //返回这个100
// }
// else
// 0
// val r = if(i < 8) i //else 没有写,编译器会自动推测出你什么都没有返回,就是Unit 类型
// val r1 = if(r < 8) i else "xx00" //r1 的类型为Any 类型,因为String为AnyRef类型,而Int为AnyVal 类型
// //AnyRef 和 AnyVal 的父类 为Any 类型
for循环的使用
//for 循环没有返回值,要想有返回值用yield 关键字
val arr = Array(1, 2, 3, 4)
//
// for(ele <- arr)
// println(ele)
// //用下标来遍历
// val element = Array(0,1,2,3)
// for(ele <-element)
// println(arr(ele))
//要是给了一个你不知道多少元素的数组你怎么遍历呢? to 方法(左闭右闭),until 方法(左闭右开)
// for(ele <- 0 until 4)
// println(arr(ele))
// for(ele <- 0 to 3)
// println(arr(ele))
// for(ele <- 0 until arr.length)
// println(arr(ele))
// //for循环中还可以增加守卫
// for(ele <- arr; if ele %2 == 0) println(ele) //还可以吧分号去掉
// for(ele <- arr if ele % 2 == 0) println(ele)
// //双层for 循环
// for(i <- 1 to 3; j <- 1 to 3 if i!=j) println(10 * i + j) //双层for循环中不可以吧中间的分号去掉
//返回值 yield 它会返回一个新的集合
val r1 = for (ele <- arr; if ele % 2 == 0) yield ele
println(r1.length)
运算符/运算符重载
Scala中的+号可不是一个运算符,而是一个方法。
// Scala 中的+-/*等操作符的作用与Java一样,位操作符也一样,只是有一点特别的,这些操作符实际上是方法
// a + b是 a.+(b)方法的简写
// arr map(x => x) 是arr.map(x => x)的简写
方法的定义与调用
/***
* 定义方法及调用
* 格式:def methodName([list of parameters]):[return type] = {}
* 如果不使用等号和方法体,则隐式声明抽象方法
* def add(a: Int, b: Int):Int = a + b //:Int 也可以省略不写,编译器自己可以推测
* add(3,5)
* 也可以定义不带返回值的方法 : def sayHello = println("hello")
* 调用: 直接sayHello 不可以sayHello()
* 也可以这样定义: def sayHello() = println("hello")
* 调用: sayHello 或者 sayHello()
*/
/***
* 方法如何转换为函数呢? 如add方法: add _
* 方法名 + 空格 + 下划线
* 转化的函数的调用:此时的函数是没有名字的
*/
函数的定义
/***
* 函数的定义:
* 定义方式一: val f1 = (x: Int ,y: Int) => x + y
* 对应的函数签名为:f1: (Int ,Int) => Int = <function2> 2 代表有两个参数
* 定义方式二: val f2:(Int ,Int) => Int = (x,y) => x + y
* 对应的函数签名为:f2: (Int ,Int) => Int = <function2>
* 例如: val ff1 = (name: String) => println(name)
* val ff2: (String) =>Unit = a =>println(a)
* 下面为没有任何参数的函数,函数的返回类型为Int
* 例:val f3:() => Int = () => 1
* 签名为: f3: () =>Int = <function0>
* 在交互式窗口中,比如定义了一个数组,数组下面有很多方法,例如arr.+(不是要加+号)制表符可以查看底下所有方法
* 要是你想看map方法,arr.map + 制表符
*/