scala-01

02.scala语言简介

  • scala是spark的语言基础,为了给spark学习打基础。

  • 早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性

  • flink是java开发的。以后会统一天下。但是flink为了迎合spark的用户,开放了scala的开发接口。

  • scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程。

  • 定义java类和scala类

03.scala开发环境安装

  • java环境编译执行流程
  • scala编译执行流程
  • 安装jdk、sdk、idea scala插件

04.scala解释器

  • 后续我们会使用scala解释器来学习scala基本语法,scala解释器像Linux命令一样,执行一条代码,马上就可以让我们看到执行结果,用来测试比较方便。
  • 要启动scala解释器,只需要以下几步:
    • 按住windows键 + r
    • 输入scala即可
    • 在scala命令提示窗口中执行:quit,即可退出解释器
println("123")
println("111")
println("222")
println("333")
  • :paste 粘贴模式 ctrl + d 结束

hello world

创建类

定义变量

数据类型

数据结构

方法

多个类的使用

线程

05.变量

java

final String name = tom

​ name = tom2

int age = 11

scala

val sex:String = “male”

​ sex = “female”

var sex:String = “male”

​ sex = “female”

lazy var sex:String = “male”

在scala中,可以使用val或者var来定义变量,语法格式如下:

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

其中

  • val定义的是不可重新赋值的变量
  • var定义的是可重新赋值的变量
  • scala可以自动根据变量的值来自动推断变量的类型,这样编写代码更加简洁。
  • 惰性赋值

06.字符串

scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式。

  • 使用双引号
  • 使用插值表达式
  • 使用三引号

07.数据类型与操作符

位运算符
&  
5 & 3

0101
0011
---------------&
0001       1     总结:同时为真,才为真。


|
0101
0011
---------------|
0111       7      总结:有真即真。


^
0101
0011
---------------^
0110     6         总结:相同为假,不同为真。


<<
8 << 2 = 32
1000 00
7 << 2 = 28        总结:7 * 2^2


>>
6 >> 1 = 3
5 >> 2 = 1         总结:5 / 2^2
基础类型类型说明
Byte8位带符号整数
Short16位带符号整数
Int32位带符号整数
Long64位带符号整数
Char16位无符号Unicode字符
StringChar类型的序列(字符串)
Float32位单精度浮点数
Double64位双精度浮点数
Booleantrue或false
  • scala类型层次架构

在这里插入图片描述

08.条件表达式

  • if(a > 10){

  • }else{}

  • 条件表达式就是if表达式 val name = “swk” val name = if() “swk” else “zbj”

  • 示例

    定义一个变量sex,再定义一个result变量,如果sex等于"male",result等于1,否则result等于0


    参考代码

    scala> val sex = "male"
    sex: String = male
    
    scala> val result = if(sex == "male") 1 else 0
    result: Int = 1
    
  • scala中,使用{}表示一个块表达式

  • 和if表达式一样,块表达式也是有值的

  • 值就是最后一个表达式的值

  scala> val a = {
       | println("1 + 1")
       | 1 + 1
       | }

09.循环

  • 在scala中,所有的值都是对象(值类型,引用类型)
  1*1=1
  1*2=2   2*2=4
  1*3=3   2*3=6   3*3=9
  1*4=4   2*4=8   3*4=12  4*4=16
  1*5=5   2*5=10  3*5=15  4*5=20  5*5=25
  1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
  1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
  1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
  1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
  for(i <- 1 to 9;j <- 1 to i){
       | print(j+"*"+i+"="+i*j+"\t")
       | if(i == j){
       | println()}
       | }

  • for
  for(i <- 表达式/数组/集合) {
      // 表达式
  }
  • for推导式、可以使用for推导式生成一个新的集合(一组数据)
  // for推导式:for表达式中以yield开始,该for表达式会构建出一个集合
  val v = for(i <- 1 to 10) yield i * 10
  • while
  scala> var i = 1
  i: Int = 1

  scala> while(i <= 10) {
       | println(i)
       | i = i+1
       | }

10.break和continue

  • break

示例

使用for表达式打印1-100的数字,如果数字到达50,退出for表达式

参考代码

// 导入scala.util.control包下的Break
import scala.util.control.Breaks._

breakable{
    for(i <- 1 to 100) {
        if(i >= 50) break()
        else println(i)
    }
}
  • continue

示例

打印1-100的数字,使用for表达式来遍历,如果数字能整除10,不打印

// 导入scala.util.control包下的Break    
import scala.util.control.Breaks._

for(i <- 1 to 100 ) {
    breakable{
        if(i % 10 == 0) break()
        else println(i)
    }
}

11.方法定义

语法

def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
    // 方法体:一系列的代码
}
  • scala定义方法可以省略返回值,由scala自动推断返回值类型。这样方法定义后更加简洁。

示例

定义递归方法(求阶乘)

参考代码

scala> def m2(x:Int) = {
     | if(x<=1) 1
     | else m2(x-1) * x
     | }
<console>:13: error: recursive method m2 needs result type
       else m2(x-1) * x

12.方法参数

  • 默认参数
    • 在定义方法时可以给参数定义一个默认值。

示例

  1. 定义一个计算两个值相加的方法,这两个值默认为0
  2. 调用该方法,不传任何参数

参考代码

// x,y带有默认值为0 
def add(x:Int = 0, y:Int = 0) = x + y
add()
  • 带名参数

    • 在调用方法时,可以指定参数的名称来进行调用。
  • 示例

    1. 定义一个计算两个值相加的方法,这两个值默认为0
    2. 调用该方法,只设置第一个参数的值

    参考代码

    def add(x:Int = 0, y:Int = 0) = x + y
    add(x=1)
    

  • 变长参数

  • 语法格式:

    def 方法名(参数名:参数类型*):返回值类型 = {
        方法体
    }
    

    参考代码

    scala> def add(num:Int*) = num.sum
    add: (num: Int*)Int
    
    scala> add(1,2,3,4,5)
    res1: Int = 15
    

13.方法调用方式

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

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

后缀调用法

这种方法与Java没有区别。

语法

对象名.方法名(参数)

中缀调用法

语法

对象名 方法名 参数

例如:1 to 10

花括号调用法

语法

Math.abs{ 
    // 表达式1
    // 表达式2
}

无括号调用法

  • 如果方法没有参数,可以省略方法名后面的括号

参考代码

def m3()=println("hello")
m3

14.函数

语法

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

示例

  1. 定义一个两个数值相加的函数
  2. 调用该函数

参考代码

scala> val add = (x:Int, y:Int) => x + y
add: (Int, Int) => Int = <function2>

scala> add(1,2)
res3: Int = 3
  • 方法和函数的区别
    • 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中
    • 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中
    • 函数是一个对象,继承自FunctionN,函数对象有apply,curried,toString,tupled这些方法。方法则没有
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值