Scala基础(一)

什么是Scala

Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序

Scala特性

  • 面向对象特性
    ①每个值都是对象
    ②对象的数据类型和行为由类(Class)和特征(Trait)描述
    ③利用特征实现混入式多重继承
  • 函数式编程
    ①每个函数都是一个值
    ②支持高阶函数、柯里化(currying)、样例类(case class)及模式匹配等
  • 静态类型语言
  • 扩展性:隐式类、字符串插值

Scala基础语法

变量和常量
  • 变量:赋值后可以改变,生命周期可以被多次赋值
    var 变量名:类型=值
  • 常量:复制后不可变,类似于java中的final变量
    val 常量名:类型=值
  • 使用类型别名定义变量
    type 类型别名=类型

示例:
在scala命令行中运行

// 变量
var i = 10 // i: Int = 10
i = 11 // i: Int = 11
// 常量
val j = 10 // j: Int = 10
j = 11 // error: reassignment to val
// type关键字
type z=String // defined type alias z
val str:z="lisi" // str: z = lisi
val str = "lisi" // 此句等同于上述两句
Scala关键字

在这里插入图片描述

Scala数据类型

Scala与java有着相同的原始数据类型

数据类型描述
Byte8位有符号整数。数值区间-128 ~ 127
Short16位有符号整数。数值区间-32768 ~ 32767
Int32位有符号整数。数值区间 -2147483648 ~ 2147483647
Long64位有符号整数。 -9223372036854775808 ~ 9223372036854775807
Float32位IEEE 754 单精度浮点数
Double64位IEEE 754 双精度浮点数
Char16位无符号Unicode字符。区间值为U+0000 ~ U+FFFF
Booleantrue或false
String等于java.lang.String
Scala数据类型层次结构

在这里插入图片描述
Any:所有类型的超类(顶级类型)
AnyVal:表示值类型的超类
AnyRef:表示引用类型的超类,对应java.lang.Object
Unit:表示无值,类似Java中的void
Nothing:所有类型的子类
Null:表示null或空引用,null是Null类型的唯一实例

字符串插值
  • s插值器:允许将变量引用、表达式直接插入字面字符中
val name="lisi"
println(s"Hello,$name")	//Hello,lisi
println(s"1+1=${1+1}") 	//1+1=2  
  • f插值器
val height=456.23d
val name="lisi"
print(f"$name%s is $height%2.2f meters tall"))

2.2f含义代表:第一个2代表位数(包含小数点),当总位数超过时无影响,小于时用空格填补;后一个二代表保留小数位数,四舍五入,不足补0

  • raw插值器
print(s"a\nb")		//将输出换行符
print(raw"a\nb")	//输出原始字符
Scala条件控制
  • if语句
object Demo1 {
  def main(args: Array[String]): Unit = {
    val a=10
    if(a>10){
      println(a+"大于10")
    }else if(a==10){
      println(a+"等于10")
    }else{
      print(a+"小于10")
    }
  }
}

上述语句可以简写为:

val i = 10;
val b = if(i==10) i+"等于10" else if(i>10) i+"大于10" else i+"小于10"
println(b)
Scala循环控制
  • while循环
object HelloWorld {
  def main(args:Array[String]):Unit={
    var x=0
    while(x<=10){
      println(x)
      x=x+1
    }
  }
}
  • do-while循环
object HelloWorld {
  def main(args:Array[String]):Unit={
    var y=0
    do{
      println(y)
      y=y+1
    }while(y<=10)
  }
}
  • for循环
val num:Int = 10;
for ( i: Int <- 1 to num ) 
{     
    println( i * 100 );
}
for { i: Int <- 1 until 100 by 2}
{
    val y = 2*i;
    println( y );
}

其中to和until都表示创建一个区间Range,但是to包含该值,until不包含;by代表步长,及i每次加2

  • 中断
    在scala中使用break需要导包
// 方式一
import scala.util.control.Breaks._
var num=10
breakable{
  for(x<-num to 1 by -1){
    if(x<3) break
    println(x)
  }
}
// 方式二
import scala.util.control.Breaks._
var num=10
val loop=new Breaks
loop.breakable(
  for(x<-num to 1 by -1){
    if(x<3) loop.break
    println(x)
  }
)
  • for循环过滤
// 多个条件使用分号分隔
val num:Int = 10;
for ( i: Int <- 1 to num; if i%2==0;if i>5 ) 
{     
    println( i * 100 );
}
  • for循环返回值
object Demo3 {  
	def main(args: Array[String]): Unit = {
	    val i = 100
    	val result = for(x<- 1 to i;if x%2==0;if x%5==0 ) yield x 
    	for(i <- result){
    	      println(i)
        }
    }
 }

for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值