Scala安装与语言基础语法笔记

来源:互联网 发布:excel数据列表创建列表 编辑:程序博客网 时间:2024/06/05 16:09

工欲善其事必先利其器,先把环境配置一下吧。

下载

各种平台下scala: http://www.scala-lang.org/download/
这里用windows平台下:
windows: scala 2.12.1: http://downloads.lightbend.com/scala/2.12.1/scala-2.12.1.zip
java环境 JDK1.8:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html (我比较喜欢免安装版的,自己网上找找吧)

配置环境:

1. 右击我的电脑-> 点击”属性”->点击“高级系统设置”

这里写图片描述

2. 点击“环境变量”
在系统变量中 添加 JAVA_HOME=”D:\JAVA\JDK”
在PATH中新建 %JAVA_HOME%\bin
在系统变量中 添加 SCALA_HOME = “G:\bigdatas\scala-2.12.1”
在PATH中新建 %SCALA_HOME%\bin
ps:这里的添加的地址都是你所安装jdk scala的本地磁盘地址

3. 运行测试 判断是否安装成功

这里写图片描述

IDE工具用的是IDEA的社区版本,下载地址:
http://www.jetbrains.com/idea/download/download-thanks.html?code=IIC


新建一个scala.class ,注意kind选择object,因为scala需要一个main入口

这里写图片描述

Scala基础语法

常用数据类型:
数值型:Byte,Char,Short,Int,Long,Float和Double
Boolean类型Boolean
与java不同的是,这些在scala中都是类,并不区分基本类型和引用类型
声明变量和值
声明常量 val,即不可改变,类似于java 中的final
声明变量 var,即可改变
与java不同的是,scala可以不用指定类型,因为scala可以推断出来是什么类型,而java就必须先声明

  val x = 0   var y = 1   y = 2   // 给常量赋值会出现编译错误  // x = 3 // 显式指定变量类型  val x1: Int = 0   var y1: Int = 0

定义变量时没有指定变量类型。这是否意味着 Scala 是和 Python 或者 Ruby 一样的动态类型语言呢?恰恰相反,Scala 是严格意义上的静态类型语言,由于其采用了先进的类型推断(Type Inference)技术,程序员不需要在写程序时显式指定类型,编译器会根据上下文推断出类型信息。比如变量 x被赋值为 0,0 是一个整型,所以 x的类型被推断出为整型。当然,Scala 语言也允许显示指定类型,如变量 x1,y1的定义。一般情况下,我们应尽量使用 Scala 提供的类型推断系统使代码看上去更加简洁。

运算符
算术运算符 + , - , *, / , %
关系运算符 == , !=, > ,<, >= , <=
逻辑运算符 &&, || , !
赋值运算符 = ,+= ,-= , *= , /= , %= , <<=, >>=, &= , ^=, |=

if条件表达式
if/else语法结构和java一样,不过在scala中if/esle表达式有值,这个值就是if或else中最后一行语句返回的值。例如

object Test02 {  def main(args: Array[String]): Unit = {    val age=10    println(if(age>12)true else false)  }//result : false

也可将if表达式赋予一个变量,例如:

object Test02 {  def main(args: Array[String]): Unit = {    val age=20    val isadult = if (age>10) true else false    println(isadult)  }}//result: true

还可以这么写:

object Test02 {  def main(args: Array[String]): Unit = {    val age=20    var isadult=false     if(age>10) isadult=true else isadult=false    println(isadult)  }}//result: true

if表达式的类型推断: scala中每个表达式都有一个类型,而if和else的值类型可能不同,此时会自动推断,取公共父类型。例如:

object Test02 {  def main(args: Array[String]): Unit = {    val age=20     println(if(age>10) "adult" else 0)  }}

这里写图片描述

这里if返回值是String类型,else返回值是Int类型,则表达式返回类型是Any,Any是String与Int的公共父类型(依据下图可知)。
如果else部分缺失,则默认else的值为Unit,也用()表示

这里写图片描述

scala类型图:

语句终止,块表达式
通常scala不需要语句终结符,默认将每一行作为一个语句。如果在单行写多个语句,则需要以分号符隔开,例如:

var a,b,c=10;if(a>5){b=b+1;c=c+1} ;printf("%d,%d,%d",a,b,c)//result  10,11 ,11

块表达式:
块表达式指的就是{ }中的语句序列,可以包含多条语句,最后一个语句的值就是表达式的返回值,例如:

   var a,b,c=10    val res = if(a>5){ //res 为if语句最后一行返回值a+b+c      a+=1      b+=1      a+b+c    }    println(res)  }  //result: 32

循环:
scala拥有和java一样的while循环,没有for(初始化变量;边界条件;更新变量)循环,如果是这样的循环,则可以使用while循环或for语句实现(这个for语句与java中的for语句时有差别的,使用了一个类似R中的提取符号<-)
while循环:

  var a=5    while (a>0){      a=a-1 //注意 scala中并没有像java中的a-- 或者a++操作       print(a+" ")    }    //result:4 3 2 1 0 

do-while循环

var a = 5    do  {      a = a - 1      print(a + " ")    } while (a > 0)    //result:4 3 2 1 0 

while循环显示做判断,再执行代码块,而do-while是先执行代码块,再进行判断。

如何跳出循环:

1.使用Boolean类型变量

2.使用return发挥

3.使用Breaks对象中的break方法

Boolean跳出循环:

var flag=true    var a=5    while(flag){      a=a-1      println(a)      if(a==2) {        flag = false      }    }

return跳出循环:

for (i<-1 to 10){      println(i)      if(i==5) return    }

有点类似java中的

public void f(){        return;  }

break跳出循环:

import scala.util.control.Breaks._/**....*/ breakable {      for (i <- 1 to 10) {        println(i)        if (i == 5) break()      }    }

这个break不太习惯,没java好用
简单for语句:

for(i<- 0 to 5) print(i+" ") 

像不像在与机器说话一样:提取(<-)0到5(0 to 5)之间的数 并且打印(print)
until语句:
不包含上界

for (i<- 1 until(5)) print(i+" ")//result: 1 2 3 4 

if守卫(即输出带if的bool类型的判断语句,满足某种条件输出)

for (i<- 1 to 20 if(i%2==0)) print(i+" ")//打印出1到20之间能被2整除的数字//result:2 4 6 8 10 12 14 16 18 20

for生成集合

print(for (i<- 1 to 10) yield(i))//result:Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

参考:
https://edu.hellobi.com/course/107

0 0
原创粉丝点击