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

23 篇文章 2 订阅
3 篇文章 0 订阅

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

下载

各种平台下scalahttp://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.8http://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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值