一、数据类型
- 基本数据类型与引用类型:Java与Scholar在基本数据类型和引用类型上的区别。Scholar中所有类型都是类,包括基本数据类型的包装类。
- 数据类型转换:Scholar负责基本数据类型和引用类型的转换,提供了多种增强功能和方法。
- 特殊类型:介绍了nothing、any、anyone、VAL等特殊类型及其用途。
二、变量与常量定义
- 强类型与弱类型语言:Java(强类型)和JavaScript(弱类型)在变量定义上的差异。
- Scholar中的变量与常量:在Scholar中如何使用VAR定义变量,使用VAL定义常量。
- 数据类型指定:在Scholar中定义变量时可以指定数据类型,而定义常量时则不需要。
三、操作符
- 算术运算符:包括加减乘除和百分号等。
- 关系运算符:如大于、小于、等于等。
- 逻辑运算符:包括与、或、非等。
四、字符串插值
- S插值:在字符串前加S可以使用变量。
- F插值:除了S的功能外,还可以进行格式化输出。
- RAW插值:与S类似,但不会对字面值进行编码。
例如
scala> var name = "tom"
name: String = tom
scala> var src = s"hello ${name}"
src: String = hello tom
scala> val name1 = "tom"
name1: String = tom
scala> val name2 = "lxs"
name2: String = lxs
println(s"hello,${name1 +","+ name2}!")
五、条件表达式
- 单分支与多分支:分为if、if-else、if-else if-else。
- 混合类型表达:在条件表达式中可以赋值不同类型的值,返回类型一般为any。
- 无else的情况:如果没有else部分,返回类型为anywhere,表示空值。
示例如下:
val x = 1
//判断x的值,将结果赋给y
val y = if (x > 0) 1 else -1
//打印y的值
println("y=" + y)
//支持混合类型表达式
val z = if (x > 1) 1 else "error"
//打印z的值
println("z=" + z)
//如果缺失else,相当于if (x > 2) 1 else ()
val m = if (x > 2) 1
println("m=" + m)
//在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
val n = if (x > 2) 1 else ()
println("n=" + n)
scala> val y = if(1>1) 1 else "error"
y: Any = error
当y的值类型既可能为Int又可能为String时,它的类型被定义为Any,是Int和String的父类。
没有else时,会默认为else (),
y的类型被定义为AnyVal
六、数据类型转换
转换方法:通过调用函数进行数据类型转换,如toInt()。
转换应用:如何将字符串转换为数字进行计算。
示例如下
七、块表达式
块表达式的使用:在声明变量或常量时,可以使用块表达式来表示涉及if-else等条件的情况。
八、循环语句
for循环:详细讲解了for循环的基本语法和应用,包括从1到10的循环示例,强调了Scholar语言中for循环的简洁性。
示例如下:
scala>for (i <- 1 to 10) println(i)
打印1到10
scala> 1 to 10
res6: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala>for (i <- 1 until 10) println(i)
打印1到9
//包含开头不包含结尾
scala> 1 until 10
res0: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
遍历字符串:
相当于java中的fore
scala> val str = "hello"
str: String = hello
通过下标遍历字符串:
scala> for (i <- 0 until str.length) println(str.charAt(i))
h
e
l
l
o
遍历数组:
scala> val arr = Array(1,2,3,4,5,6)
arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)
通过下标遍历数组:
scala> for(i <- 0 until arr.length) println(arr(i))
1
2
3
4
5
6
双重循环:
输出个位数与十位数不相同的两位数(个位、十位数均从1-3取值)
scala> for(i <- 1 to 3;j <- 1 to 3 if i != j) println(i*10+j)
12
13
21
23
31
32
数组操作:
对数组中的每个数乘以10,生成一个新数组:
scala> val arr = Array(1,2,3,4,5,6)
arr: Array[Int] = Array(1, 2, 3, 4, 5, 6)
更简单的方法:
scala> for (i <- arr) yield i*10
res4: Array[Int] = Array(10, 20, 30, 40, 50, 60)
for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是Map,被循环的是 List,返回的就是 List,以此类推。把数组中的偶数取出来乘以100得到一个新的数组
for(i<- arr if i%2 ==0)println(i*100)
更简单的方法:
scala> for (i <- arr if i%2==0) yield i*100
res11: Array[Int] = Array(200, 400, 600)
while循环:介绍了while循环的基本语义,并通过示例展示了其应用。
示例如下:
while循环:基本语义与Java相同。
var n = 10
while(n > 0) {
println(n)
n -= 1
}
do while循环:对比了do while循环与while循环的不同,强调了do while循环先执行循环体再检查条件的特点。
示例如下
循环区间及索引
to和until的区别:解释了to表示闭区间,until表示左闭右开区间,并通过示例展示了它们在循环中的应用。
索引的使用:强调了索引从0开始,遍历数组时需要注意索引的范围。
双重循环及数组操作
双重循环:通过示例展示了如何在Scholar语言中使用双重循环来输出个位数和十位数不相同的两位数。
数组操作:讲解了如何遍历数组并对数组中的每个元素进行操作,例如将数组中的每个元素乘以10。
九、循环的返回值
for循环的返回值:介绍了Scholar语言中for循环可以有返回值,并通过示例展示了如何利用返回值进行操作。
十、操作符重载
方法调用:Scholar语言中没有运算符,所有的操作都是通过方法调用来实现的,并通过示例展示了如何定义和调用加法方法。
示例如下
在scala里面没有运算符,所有的符号其实都是方法。
scala> val a = 1.+(2)
a: Int = 3
相当于是,1这个实例调用+方法,传入了一个参数2
定义一个+方法:
scala> def +(x : Int,y : Int):Int = { x + y }
$plus: (x: Int, y: Int)Int