scala 基本语法

1. 声明值和变量

1.1 常量声明

// val 不可变,在声明时就必须初始化,之后不能再赋值
val aa = "hello"
// aa: String = hello
// scala 具有类型自动推断功能,可根据右边的值进行变量类型推断

1.2 变量声明

import java.lang._ // "_"表示所有
// var 可变,在声明时也须初始化
var bb: java.lang.String = "11"
或
var bb: String = "11"

2. 基本数据类型和操作

与java不同,scala中的数据类型都是“类”,并且都是包Scala的成员。比如 Int -> scala.Int,其中比较特别的是String -> java.lang.String

2.1 字面量(literal)

val i = true
val i = 'A'

2.2 操作符

2.1 基本操作符

操作符就是方法(+,-,*等) ,即所有操作符都是函数!!!

a 方法 b <=> a.方法(b)

object T1 {
    def main(args: Array[String]): Unit ={
        var res = 5+3
        var res2 = (5).+(3)
        println(res2)
    }
}

2.2 富包装类

scala 中每个基本数据类型都有一个对应的富包装类(位于scala.runtime包中)

如 Int -- > RichInt, String -- > RichString

当一个基本数据类型的对象调用其富包装类提供的方法,scala会自动通过隐式转换将该对象转换为对应的富包装类型,然后再调用相应的方法。

var a = 5
var b = 2
var res3 = a.max(b)
// 5
var res4 = a min b
// 2

3. Range

创建一个从1到5的数值序列,包含区间终点5,步长为1。

println(1 to 5)
或
println(1.to(5))
// Range(1, 2, 3, 4, 5)

变形

println(1 until 5)
// Range(1, 2, 3, 4)
println(1 to 5 by 2)     
// Range(1, 3, 5)
println(0.1f to 1.0f by 0.2f)
// NumericRange(0.1, 0.3, 0.5, 0.7, 0.9)

val pt = LocalDate.parse("2021-08-31", DateTimeFormatter.ofPattern("yyyy-MM-dd"))
(1 to 3).map(pt.plusDays(_)).foreach(println)
// 2021-09-01
// 2021-09-02
// 2021-09-03

4. 控制台输入输出语句

import io.StdIn._

var i = readInt()
var res = readLine("please input your name:\n")
// 格式化输出
printf("name:%s, age:%d\n", "kk", 25)
// name:kk, age:25

5. 读写文件&异常处理

scala 不支持java中“受检查异常”

import java.io.PrintWriter
import java.io.{FileNotFoundException,IOException}
import scala.io.{Source,BufferedSource}


object T1 {
    // 读文件
    def read_file(file_name: String): Unit ={
        var f:BufferedSource = null
        try {
            f = Source.fromFile(file_name)
            val lines = f.getLines()
            for(line <- lines)
                println(line)
        } catch {
            case ex: FileNotFoundException =>
                println(ex.getMessage)
            case ex: IOException =>{
                println(ex.getMessage)
            }
        } finally {
            f.close()
        }
    }

    // 写文件
    def write_file(file_name: String): Unit ={
        var f:PrintWriter = null
        try {
            f = new PrintWriter("out.txt")
            for(i <- 1 to 5 by 2)
                f.println(i)   // 写入文件
        } catch {
            case ex: FileNotFoundException =>
                println(ex.getMessage)
            case ex: IOException =>{
                println(ex.getMessage)
            }
        } finally {
            f.close()
        }
    }

    def main(args: Array[String]): Unit ={
        var file_name = "out.txt"
        write_file(file_name)
        read_file(file_name)
    }
}

7. 控制结构

7.1 if 条件表达式

val x = -3
if(x>0){
    println("正数")
}else if(x==0){
    println("0值")
}else{
    println("负数")
}

注意:Scala 中if表达式的值可以赋值给变量

var x = if(3>0){
    "非负数"
}else{
    "负数"
}
println(x)

7.2 while 循环

7.2.1 while

var i = 1
var sum = 0
while(i<=100){
    sum += i
    i += 1
}
println(sum)

7.2.2 do while

var i = 1
var sum = 0
do {
    sum += i
    i += 1
} while(i<=100)
println(sum)

7.3 for 循环

"变量<-表达式"被称为生成器。

如果要过滤出一些满足指定条件的结果,需使用到“守卫(guard)”表达式。

for(i <- 1 to 5 if i%2==0)
    println(i)
// 2 4

// 双重循环
for(i <- 1 to 5 if i%2==0; j<-1 to 5 if j%2!=0)
    println(i+"\t"+j)
或
for(i <- 1 to 5 if i%2==0)
    for(j<-1 to 5 if j%2!=0)
        println(i+"\t"+j)

for 推到式

for结构可以在每次执行的时候创造一个值,然后将包含了所有产生值的集合作为for循环表达式的结果返回。

var r = for(i <- 1 to 5) yield{
    println(i); i}
println(r)
// Vector(1, 2, 3, 4, 5)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值