Scala入门基础 - 语法篇

变量语法格式

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

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

** 可以使用更简洁的方式定义变量 **

var name = "tom"

scaka可以自动根据变量的值自动推断出变量的类型,这样写的代码更简洁

var str = s"${name}is a boy !"
var str = """
				三引号这里放大量文本
			"""

惰性赋值

当有一些变量保存的数据较大时,而这些数据又不需要马上加载到JVM内存中。我们就可以使用惰性赋值来提高效率

语法格式:

lazy val / var 变量名 = 表达式

Scala数据类型

基本数据类型和java一样,所有数据类型首字母大写
Scala中数据类型层次机构
在这里插入图片描述

for循环

守卫:
for表达式中可以添加if判断就称之为守卫。我们可以使用守卫让for表达式更加简洁。
语法:

for(i <- 表达式/数组/集合  if 表达式){
   // 逻辑代码
 }

示例:

for(i <- 1 to 10 if i %3 == 0) println(i)

for推导式:
scala中的for也是有返回值的,在for循环体中,可以使用yield表达式构建出一个集合,我们把使用yield的for表达式称之为推导式
示例:
生成一个 10、20、30、… 100的集合
参考代码:

val v = for(i <- 1 to 10) yield i*10
println(v)

方法

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

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

注意:递归方法必须写返回值

方法参数

scala中发方法参数,使用比较灵活。它支持以下几种类型的参数:

  • 默认参数(定义参数的时候给定参数的默认值)
  • 带名参数 (在调用方法时,可以指定参数的名称来进行调用)
  • 变长参数 (如果方法的参数是不固定的,可以将该方法的参数定义为变成参数)
def 方法名(参数名:类型*):返回值类型 = {  }
方法调用方式

在scala中,有以下几种方法调用方式:

  • 后缀调用法
  • 中缀调用法
  • 花括号调用法
  • 无括号调用法

在编写spark,flink程序时,会经常使用这些方法调用方式

后缀调用法:
这种方式和java没有区别,非常简单

对象名.方法名(参数)
Math.abs(-1)

中缀调用法

语法:对象名  方法名  参数
例:  1 to 10
例:  Math abs -1

扩展知识:
在scala中,操作符即方法
如: 1 + 1
上式中的 “+” 就是一个方法

花括号调用法:

例: Math.abs { -1 }
例: Math.abs {
       			println("打印绝对值了")
       			-1
       }

注意:方法只有一个参数的时候,才能使用花括号调用法

无括号调用法:
如果没有参数,可以省略方法名后面的括号

// 定义无参数方法
def sayHello() = println("Hello, Scala")
// 调用
sayHello()
sayHello

注意:
在scala中如果方法的返回值类型是Unit类型(也就是没有返回值),这样的方法称之为过程(procedure)
过程的等号(=)可以省略不写,例如:
def sayHello() = print(“Hello”)
改为:
def sayHello() { print(“hello”) } // 这个花括号不能省略

惰性方法

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

注意:

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

使用场景:

  1. 打开数据库
  2. 提升默写特定模块的启动时间
  3. 确保对象中的某些字段能优先初始化

函数

scala中是支持函数式编程的,将来编写Spark/Flink程序将会大量用到函数

定义函数

val 函数变量名 =   (参数名:参数类型, 参数名:参数类型...) => 函数体

 var total = (a:Int, b:Int) => {a + b}
 println(total(1,2))

注意:

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

方法和函数的区别

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

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

结论:在scala中,函数式对象,而方法时属于对象的,所有可以理解为:方法归属于函数

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

var 变量名 = 方法名 _   //  格式为:方法名 + 空格 + 下划线
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值