谁适合阅读本教程?java
本教程适合想从零开始学习 Scala 编程语言的开发人员,强烈建议你有必定的 JAVA 基础,由于 Scala 从 JAVA 演化而来
一、解释器
二、基础语法
三、函数
四、条件与循环
顾名思义就是在命令行调用scala的基础环境,咱们在第一篇演示的命令行输出Hello,World!
便是。固然Scala在交互模式下可以作不少的事情。在这里咱们只作简单的输出演示。 CTRL+C
退出交互模式spring
相似于咱们在命令行经过 <font color=#7A67EE>java *.java执行</font>同样,咱们经过记事本建立一个文件HelloWorld.scala
,存储在指定目录,我存储在了/Users/sunliangliang/Desktop/temp
这个目录下,代码以下编程
object HelloWorld { /* 这是个人第一个Scala项目, * 输出"Hello,Scala!" */ def main(args: Array[String]) { println("Hello, Scala!") } }
在命令行执行 scala /Users/sunliangliang/Desktop/temp/HelloWorld.scala
,看到以下输出结果 springboot
Scala
和scala
在程序中含义不一样def main(args: Array[String]): Unit = { print("Hello world") }
语法规范基本和java同样,其余可参考java相关规范。微信
val 常量名 :数据类型 = 值
scala采用数据类型在后面的方式数据结构
val str : String = "Scala"
var 变量名 : 数据类型 = 值
,以下图编程语言
var number : Int = 2
如上面,注意运算符先后空格,行结尾分号可省略,数据类型Int和String都是大写,这是不一样于java的一些地方ide
<font color = red>scala全部的数据类型都是对象,没有java的原生基本类型</font>
Scala和java的数据类型基本一致函数
数据类型 | 描述 |
---|---|
Byte | 同java byte |
Short | 同java short |
Int | 同java int |
Long | 同java long |
Float | 同java float |
Double | 同java Double |
Char | 同java char |
String | 同java String |
Boolean | 同java boolean, true/false |
Unit | 无值,同java void,用于不返回结果的函数。Unit只有一个实例值,写成() |
数据类型 | 描述 |
---|---|
Null | 同java null |
Nothing | 全部类的最底端,全部其余类型的子类型 |
Any | 其余类的超类,全部类的父类 |
AnyRef | 其余全部类的基类 |
以下图为Scala数据结构的结构图oop
Scala有39个关键字,有一部分和java重合
以下图所示是java和Scala的重合的地方
以字母或者下划线开头,以后能够跟字母数字或者下划线。不能使用$,尽管能够编译经过
Scala遵循java的驼峰式标识符,所以尽管下划线是合法的,可是为了同java保持一致,尽可能不要使用
由一个或多个操做字符组成,同java或其余语言,如
+ ++ ::: <?> :->
等
函数和方法相似,这里的方法和java中的基本一致,二者主要区别在于在Scala中函数是一个值,能够赋值给一个val变量,而方法不能够。
def 方法名(参数列表): 返回类型 = {方法体},如:
def add(x:Int,y:Int): Int = { x+y }
在scala中方法体的最后一行做为函数的返回值,不须要写return
方法名(参数)
,同java,以下图
object Helloworld { def main(args: Array[String]): Unit = { val result = add(2,7)//调用函数 println(result) } /** * 方法的定义与声明 * @param x * @param y * @return */ def add(x:Int,y:Int): Int = { x + y } }
val multiply = (x:Int,y:Int) => x*y;//定义一个函数,乘法
println(multiply(2,5)) //函数的调用
方法和函数之间也能够相互转换,以下
val plus = add _
神奇的下划线将方法转化为了函数,注意==上面的代码须要写在方法体外,做为全局的变量==
同java的main函数,scala中main函数一样做为函数的入口。在scala中,main函数必须定义在object中(Java中,main函数必须是class中的static方法),有两种方式,第一种参考上面Helloworld
代码,另外一种以下
object FastScalaApp extends App { override def main(args: Array[String]): Unit = { print("FastScalaApp started!!!") } }
这种相似于springboot中的入口类
/** * 条件语句 * @param x */ def condition(x:Int): Unit ={ if (x>10){ print("x 比 10 大") } else if (x == 10){ print("x 和 10 相等") }else{ print("x 比 10 小") } }
此处,else if 和 else也可省略。
一个if语句能够跟着一个可选的else if ... else
注意事项
- 一、if后面能够有0或者多个else语句,可是整个语句的最后,即前面条件都匹配不到才会执行
- 二、if后能够有0或者多个else if语句,else if语句在if 和 else语句之间
- 三、一个else if 匹配成功后续的else if 和 else就都不会执行。
if(x > 5){ if (x<10){ print("x 在5 和10 之间") } }
scala的循环类型和java同样,包含如下三类
循环类型 | 描述 |
---|---|
while循环 | 同java |
do ... while循环 | |
for循环 |
循环控制语句
控制 | 描述 |
---|---|
break | 结束循环并执行循环下语句 |
/** * while循环 */ def whileLoop(): Unit ={ var num = 10 while (num>0){ println(num) num = num-1 } }
输出结果以下:
/** * do while循环 */ def doWhileLoop(): Unit ={ var num = 10; do { println(num) num=num-1 }while(num>0) }
Scala的for循环特性被称之为for推导式
或for表达式
for循环最简单的语法是
for(var x <- Range){ ... }
Range能够是数字范围,表示i到j的值。<font color=red> <-运算符
</font>称之为生成器,它从一个范围中获取值
/** * for循环 */ def forLoop(): Unit ={ for (x <- 1 to 10){ println(" x = "+x) } }
以下图,x的值输出了10
def untilForLoop(): Unit ={ var y = 10; for (y<- 1 until 10){ println("y = " +y) } }
以下图,y的值不包含10
即嵌套for循环
def for01(): Unit ={ for (i<- 1 to 8 ; j<- 6 to 10){ if (i==j){ println(s"i=$i, j=$j") } } }
for循环中的yield关键字会将当前元素记录下来保存到集合中,结束循环后返回该集合。scala的for循环有返回值,返回值为被循环对象。
/** * yeild 会将处理后的结果返回给list */ def forWithYield(): Unit ={ val list = for (i<- 1 to 10) yield i*2 for(i<- list){ println(i) } }
yield后能够跟表达式
一、yield关键字,在每次for循环会生成一个缓冲变量,循环结束以后,将buffer中的变量合并返回一个集合
二、合并返回的集合和循环中的数据类型一致。
这种语法是scala和java的区别,循环守卫,又称循环保护,本质上就是条件判断。条件判断为TRUE
时则进入循环体,不然跳出,相似java的continue
关键字
def for02(): Unit ={ for (i<- 1 to 10 if i%2==0){ println("符合条件的i = "+i) } }
上面的代码其实等价于
def for03(): Unit ={ for(i<- 1 to 10){ if (i%2==0){ println("符合条件的i = "+i) } } }
这就是scala的神奇之处,这样会削减代码量,后面还有不少相似的方式。
这里咱们能够改造以前嵌套for循环的例子,以下
def for001(): Unit ={ for (i<- 1 to 8 ; j<- 6 to 10 if i==j){ println("i和j的交集为:i=j="+i) } }
/** * for循环与list */ def forLoopWithList(): Unit ={ val list = List(1,2,3,4) for (i<- list){ print("i = "+i) } }
注意事项:
scala的for循环表达式和java仍是有很大区别的,可是基本原理是同样的。
def result(): Unit ={ var sum = 0; var totalNum = 0; for (i<- 1 to 100 if i%3==0){ totalNum+=1 sum+=i } println(s"100之内3的倍数的数有 sum=$sum, totalNum = $totalNum") }
以上内容有部分来自网上查阅的资料,若有版权问题。请与联系我:
email : liangliang1259@163.com
微信: 点击添加