Scala学习第一章

Scala简介
Scala源自Java
Scala构建在JVN之上
Scala与Java兼容、互通
Scala的优势
多范式编程:面向对象编程、函数式编程
表达能力强,代码精简
大数据与Scala
Spqrk采用Scala语言设计
提供的API更加优雅
基于JVM的语言更融入Hadoop生态圈

Scala变量与常量
变量
赋值后可以改变,生命周期中可以被多次赋值

var 变量名称:类型=xxx

常量
赋值后不可变,类似于java中的final变量

val 常量名称:类型=xxx

在这里插入图片描述
在这里插入图片描述

使用类型别名定义变量
type关键字(不常用)
tyoe 类型别名 = 类型
例:type tt = String

val address:tt = "xxx" 

在这里插入图片描述

等同于 val address:String = "xxx"
在这里插入图片描述

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
Booleatrue或false
String等于java.lang.String

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

字符串插值
s插值器:允许将变量引用、表达式直接插入字面字符中

val name = "Aythna"
println(s"Hello,$name")	//Hello,Aythna
println(s"1+1 = ${1+1}")	//1+1 = 2

在这里插入图片描述

f插值器

val height = 1.9d
val neme = "lijia"
Println(f"$name%s is $height%2.2f)

在这里插入图片描述

raw插值器

s"a\nb"	//将输出换行符
raw"a\nb"		//输出原始字符

在这里插入图片描述

Scala条件控制
if语句

val x = 10 
if(x >0) {
println("x大于0")
}

在这里插入图片描述

if…else语句

val x = 10 
if(x > 10){
print("x大于10")
} else if{
print("x等于10")
} else {
print("x小于等于10")
}

在这里插入图片描述

条件语句返回值
Scala然和表达式都有返回值

val x = 10
val y = if(x == 10) x+1 else x+2	//单行表达式可省略

在这里插入图片描述

代码块"{…}"也是表达式,返回值为最后一个表达式结果

val x =10
val y = {
print("我是代码块")
x+1
}

在这里插入图片描述

val x =10
val y = {
x+1;Print("我是代码块")		//多个表达式使用";"分隔
}

在这里插入图片描述

Scala循环控制-1
while循环

var num:int = 0
while (num < 100) {
println(num)
num = num + 1
}

在这里插入图片描述

do {
println(num)
num = num +5
} while(num <100)

在这里插入图片描述

for循环

val num :int = 10
for(i:int <- 1 to num)
{
println(i*100)
}

在这里插入图片描述

for(i <- 1 until 100) {
val y = 2*i
println(y)
}

在这里插入图片描述

输出一个等腰三角形

    for (i <-1 until 6) {
      for (j <- 5 to i by -1) {
        print(" ")
      }
      for (j <- 1 to 2*i-1) {
        print("*")
      }
      println()
    }

在这里插入图片描述

输出一个空心的等腰三角形

for (i <- 1 until 6) {
 for (j <- 6 until i by -1) {
   print(" ")
 }
  for (j <- 1 to 2 * i - 1) {
    if (i ==5 || j == 1 || j == i * 2 -1) {
      print("*")
    }
    else {
      print(" ")
    }
  }
  println()
}

在这里插入图片描述

Scala循环控制-2
中断

import scala.util.control.Breaks._
val num:int = 10
for (i:int <- 1 to num by 2) {	//by表示步长为2
if(i >= 5) break
println(i*10)
}

在这里插入图片描述

breakable{
  for (x <- num to 1 by -1) {
    if (x < 3 ) break
    println(x)
  }
}

在这里插入图片描述

for循环过滤

val num = 10
for (i <- 1 to num;if i%2 == 0;if i >5){
println(i*10)
}

在这里插入图片描述

Scala循环控制-3
for循环返回值
for循环中的yield会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。也称for推导式

val i = 20
var resValue = for (x<- 1 to i; if x % 2 == 0; if x % 5 == 0) yield x
for (i <- resValue) {
println(i)
}

在这里插入图片描述

var resValue = for (x<- 1 to i; if x % 2 == 0; if x % 5 == 0) yield x
println (resValue)

在这里插入图片描述

Scala数组
存储固定大小的元素
数组索引从0开始
//数组创建方式一

    var array:Array[String] = new Array[String](3)
    array(0) = "hello"
    array(1) = "world"
    array(2) = "scala"
    println(array(0))

//数组创建方式二

    var array2 = Array("kb09","luoxing","gree","ruiwen")
    println(array2(1))

//数组创建方式三:区间数组

    var array3 = Array.range(1,10,2)

Array方法
++方法:
合并集合,并返回一个新的数组,新数组包含左右两个集合对象的内容。

val a = Array(1,2,3)
val b = Array(4,5)
val c = a ++ b

在这里插入图片描述

++:方法:
合并集合,并返回一个新的数组,新数组包含左右两个集合对象的内容。右边操纵数的类型决定着返回结果的类型

val a = List(1,2)
println(a.getClass.getName)
val b = scala.collection.mutable.LinkedList(3,4)
println(b.getClass.getName)
val c = a ++: b
println(c.getClass.getName)


在这里插入图片描述

+:方法:
在数组掐面添加一个元素,并返回新的对象,下面添加一个元素0

val a = List(1,2)
val b = 0 +: a	//b中的内容是(0,1,2)

在这里插入图片描述

:+方法:
在数组末尾添加一个元素,并返回新对象

val a = List(1,2)
val b = a :+ 0	//b中的内容是(1,2,0)

在这里插入图片描述

注意:此处不可将0写在前面,否则会出现如下报错
在这里插入图片描述

map方法:
对序列中的元素进行 f 操作

val array = Array(1,2,100)
array.map( x => 2 * x)

在这里插入图片描述

注意:对数组进行map操作,不会影响原数组的数据


版权声明:本文为qq_40333693原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。