scala学习

Scala

第一章章节目标

  1. 掌握变量,字符串的定义和使用

  2. 掌握数据类型的划分和数据类型转换的内容

  3. 掌握键盘录入功能

  4. 理解Scala中的常量,标识符相关内容

1.输出语句和分句

1.1输出语句
  1. 方式一:换行输出
格式:println(数据)
  1. 方式二:不换行输出
格式:print(数据)
1.2 分号

Scala语句中,单行代码最后的分号可写可不写.如果是多行代码写在-行, 则中间的分号不能省略,最后-条代码的
分号可省略不写.

2. Scala中的常量

2.1概述

常量指的是:在程序的运行过程中,其值不能发生改变的量.

2.2分类

●字面值常量(常用的有以下几种)
。整型常量
。浮点型常量
。字符常量
。字符串常量.
。布尔常量
。空常量
●自定义常量(稍后解释)

2.3代码演示
//整型常量
println(10)
//浮点型常量
println(10.4)
//字符串常量
println('sq')
//字符常量
println('a')
//布尔常量
println(true,flase)
//空常量
println(null)

3.Scala中的变量

3.1概述

我们将来每一天编写scala程序都会定义变量, 那什么是变星,它又是如何定义的呢?
变量,指的就是在程序的执行过程中,其值可以发生改变的量.定义格式如下:

3.2语法格式

Java变量定义

int a = 0;

Scala中,可以使用val和var来定义变量,语法格式:

val/var 变量名:变量类型 = 初始值

其中
●val 定义的是不可重新赋值的变量,也就是自定义常量. .
●var 定义的是可重新赋值的变量

注意: scala中定义变量时,类型写在变量名后面

3.3 示例

需求:定义一个变量保存一个人的名字

val name: String = "tom"
name: String = tom
3.4 val和var的区别

示例

给名字重新进行赋值,观察其变化,会发现报错了

示例

用var重新定义变量来保存一个人的名字“tom”

3.5使用炎型推断来定乂変量

scala的語法要比ava筒浩,我們可以使用一-神更筒浩的方式来定乂変量。

示例
使用更筒浩的語法定乂一个変星保存一个人的名字"tom"

4. 字符串

scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式。
●使用双引号
●使用插值表达式
●使用三引号

4.1使用双引号

语法

val/var 变量名 = "字符串"

示例

有一个人的名字叫做zhangmi,请打印出来他的名字以及名字的长度

scala> println(name + name.length)
zhangmi7
4.2 使用插值表达式

scala中,可以使用插值表达式来定义字符串,有效避免大量字符串的拼接。
语法

val/var 变量名 = s"${变量/表达式}字符串"

注意

  • 在定义字符串之前添加s
  • 在字符串中,可以使用${}来引用变量或者编写表达式
4.3 使用三引号

如果有大段的文本需要保存,就可以使用三引号来定义字符串。例如:保存一大段的SQL语句。三个引号中间的所
有内容都将作为字符串的值。

语法

va1/var 变量名 = """字符串1
字符串2"""

示例

定义一个字符串,保存sql代码

select 
		*
from
		t_user
where
		name = "zhangsan"

打印sql语句

4.4 拓展:惰性赋值

​ 在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行。这些SQL语句,如果直接加载到VM中,会有很大的内存开销,如何解决这个问题呢?
​ 当有一些变量保存的数据较大时,而这些数据又不需要马上加载到VM内存中。就可以使用惰性赋值来提高效率。
语法格式:

lazy val/var 变量名 = 表达式

示例

​ 在程序中需要执行一条以下复杂的SQL语询,我们希望只有用到这个SQL语句才加载它。

5. 标识符

5.1概述

​ 实际开发中,我们会编写大星的代码,这些代码中肯定会有变量,方法,类等.那它们该如何命名呢?这就需要用
到标识符了.标识符就是用来给变量,方法,类等起名字的. Scala中的标识符和ava中的标识符非常相似.

5.2命名规则

●必须由大小写英文字母,数字,下划线_, 美元符$ ,这四部分任意组合组成.
●数字不能开头.
●不能和Scala中的关键字重名.
●最好做到见名知意.

5.3命名规范

●变量或方法:从第二个单词开始,每个单词的首字母都大写,其他字母全部小写(小驼峰命名法).

zhangSanAge,student_ Country, getSum

●类或特质(Trait): 每个单词的首字母都大写,其他所有字母全部小写(大驼峰命名法)

Person, StudentDemo, Or der It ems

●包:全部小写, -般是公司的域名反写,多级包之间用.隔开.

com. itheima.add, cn. itcast . update

6.数据类型

6.1简述

数据类型是用来约束变星(常量)的取值范围的. Scala也是一个 强类型语言,它里边的数据类型绝大多数和ava-样.
我们主要来学习
●与ava不一样的一些用法
●scala

7. 类型转换

7.1概述

当Scala程序在进行运算或者赋值动作时,范围小的数据类型值会自动转换为范围大的数据类型值,然后再进行计算.
例如:1 + 1.1的运算结果就是一个Double类型的2.1. 而有些时候,我们会涉及到一些类似于"四舍五入”的动作,要把
-个小数转换成整数再来计算.这些内容就是Scala中的类型转换.

Scala中的类型转换分为值类型的类型转换和引用类型的类型转换,这里我们先重点介绍:值类型的类型转换.
值类型的类型转换分为:
●自动类型转换
●强制类型转换

7.2自动类型转换
  1. 解释
    范围小的数据类型值会自动转换为范围大的数据类型值,这个动作就叫:自动类型转换.
自动类型转换从小到大分别为:Byte, Short, Char -> Int -> Long -> Float -> Double
  1. 示例代码
va1 a:Int = 3

va1 b:Double = 3 + 2.21 //因为是int类型和doub1e类型的值进行计算,所以最终结果为: Double类型

val c:Byte = a + 1 //这样写会报错,因为最终计算结果是Int类型的数据,将其赋值Byte类型肯定不行.


7.3强制类型转换
  1. 解释

    范围大的数据类型值通过一定的格式(强制转换函数)可以将其转换成范围小的数据类型值, 这个动作就叫:强制
    类型转换.

    注意:使用强制类型转换的时候可能会造成精度缺失问题!

  2. 格式
    val/var变量名:数据类型=具体的值. toXxx
    //Xxx表示你要转换到的数据类型

  3. 参考代码

va1 a:Double = 5.21
va1 b:Int = a.toInt
7.4值类型和String类型之间的相互转换
  1. 值类型的数据转换成String类型

格式:

va1/var变量名:String =值类型数据+""

格式二:

val/var变量名:String =值类型数据. toString

示例
将Int, Double, Boolean类型的数据转换成其对应的字符串形式
参考代码:

va1 a1:Int = 10
val b1:Double = 2.1
va1 c1:Boolean = true
//方式一:通过和空字符串拼接的形式实现
val a2:String = al + ""
va1 b2:String = b1 + ""
val c2:String = c1 + ""

//方式二:通过toString函数实现
val a3:String = a1.toString
val b3:String = b1.toString
val c3:String = c1.toString
  1. String类型数据转换成其对应的值类型

格式

val/var b 变量名 = 字符串值.toXXX //XXX表示你要转换到的数据类型

注意:

  • String类型的数据转换成Char类型的数据,方式有点特殊,并不是调用toChar,而是调用toCahrArray
  • 这里先了解,以后再说

8. 键盘录入

8.1概述

前边我们涉及到的数据,都是我们写"死”的,固定的数据,这样做用户体验并不是特别好.那如果这些数据是由用户
录入,然后我们通过代码接收,就非常好玩儿了.这就是接下来我们要学习的Scala中的"键盘录入"功能

8.2使用步骤

1.导包.

格式: import scala.io.StdlIn

2.通过stdIn.readxxx()来接收用户键盘录入的数据

接收字符串数据: StdIn.readLine()
接收整数数据: StdIn.readInt()

8.3示例

● 提示用户录入字符串,并接收打印.

print1n("请录入一个字符串: ")
va1 str = StdIn.readLine()
print1n("您录入的字符串内容为: " + str)

●提示用户录入整数,并接收打印.

print1n("请录入一整数: ")
va1 str = StdIn.readInt()
print1n("您录入的整数内容为: " + str)

1.方法

1.1概述

实际开发中,我們需要編写大量的代码,这就勢必会渉及到重夏的需求.例如:求10和20的最大値,求11和22的最大値,像祥的需求,用来迸行比較的還輯代碕需要編写兩次,而如果把比較的還緝代碣放到方法中,只需要編写一次就可以了,文就是方法. scala中的方法和Java方法炎似,但scala与ava定乂方法的語法是不- -祥的。

1.2珸法格式
def 方法名(参数名:参数类型,参数名:参数类型) : [return type] = { 
//方法体
}

注意:

  • 参数列表的参数类型不能省略
  • 返回值类型可以省略,由scala自动推断
  • 返回值可以不写return,默认就是{}块表达式的值
1.3示例

需求

  1. 定义一个方法getMax,用来获取两个整型数字的最大值,并返回结果(最大值)
  2. 调用该方法获取最大值,并将结果打印到控制台上

参考代码

def getMax (a1: Int,a2: Int): Int{
 return if(a1 > a2) a1 alse a2
}

def getMax (a1: Int,a2: Int) = if(a1 > a2) a1 alse a2
1.4返回值类型推断

scala定义方法可以省略返回值的数据类型,由scala自动推断返回值类型。这样方法定义后更加简洁。
注意: 定义递归方法,不能省略返回值类型
示例
定义递归方法,求5的阶乘.
步骤
1.定义方法factorial,用来计算某个数字的阶乘

规律: 1的阶乘等于1,其他数字的阶乘为:n!=n*(n- 1)!

2.调用方法,获取5的阶乘,并将结果打印到控制台上.

参考代码

//1.定义方法factorial, 用来计算某个数字的阶乘 
def factorial(n:Int):Int = if(n == 1) 1 else n * factorial(n 一1) 
//2.调用方法,获取5的阶乘.
va1 result = factorial(5) 
//3.将结果打印到控制台上. 
println("result: " + result)
1.5惰性方法

当记录方法返回值的变量被声明为lazy时,方法的执行将被推迟,直到我们首次使用该值时,方法才会执行,像这样
的方法,就叫:惰性方法.
注意:

  1. Java中并没有提供原生态的"惰性’ '技术,但是可以通过特定的代码结构实现,这种结构被称之为:懒加载(也
    叫延迟加载)
  1. lazy不能修饰var类型的变量.

使用场景:
1.打开数据库连接

由于表达式执行代价昂贵,因此我们希望能推迟该操作,直到我们确实需要表达式结果值时才执行它

2.提升某些特定模块的启动时间.

为了缩短模块的启动时间,可以将当前不需要的某些工作推迟执行

3.确保对象中的某些字段能优先初始化

为了确保对象中的某些字段能优先初始化,我们需要对其他字段进行情性化处理

2.函数

scala支持函数式编程,将来编写Spark/Flink程序会大量使用到函数,目前,我们先对函数做一个简单入门, 在后续
的学习过程中,我们会逐步重点讲解函数的用法.

2.1定义函数

语法

(参数名:参数类型,参数名:参数类型....) =>函数体I

注意:
●在Scala中,函数是一个对象(变量)
●类似于方法,函数也有参数列表和返回值
●函数定义不需要使用def义
●无需指定返回值类型

2.2示例

需求:
1.定义一个计算两个整数和的函数
2.调用该函数

val getSum(a: Int, b:Int) => a+b
getSum
2.3方法和函数的区别

在Java中,方法和函数之间没有任何区别,只是叫法不同.但是在Scala中,函数和方法就有区别了,具体如下:

●方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
●可以将函数对象赋值给一一个变量, 在运行时,它是加载到VM的堆内存中
●函数是一个对象,继承自FunctionN, 函数对象有apply, curried, toString, tupled这些方法。 方法则没有

结论:在Scala中,函数是对象,而方法是属于对象的,所以可以理解为:方法归属于函数.

2.4方法转换为函数

有时候需要将方法转换为函数.例如:作为变量传递,就需要将方法转换为函数
格式

val变量名=方法名_
//格式为:方法名+空格+下划线

注意: 使用二即可将方法转换为函数
示例
1.定义一个方法用来计算两个整数和
2.将该方法转换为一个函数,并赋值给变量
参考代码

def add(a:Int ,b:Int) a+b
val getSum = add_

val sum = getSum(10,20)

案例:99乘法表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AodBJR1a-1648276383892)(/Users/kayleigh/Library/Application Support/typora-user-images/image-20220326142934025.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值