Scala基础学习

(一)Scala基础语法

1、Scala变量

三种变量修饰符:val(常量,一旦赋值不可再更改)、var(变量,可更改)、lazy val(惰性求值的常量,当定义的值可能不会被使用时可用该修饰符)。

可以注意到每行语句后可不加分号。。。。

2、Scala类型体系

3、控制结构和函数

3.1、条件表达式

3.2、块表达式

{}块包含一系列表达式,其结果也是一个表达式,块最后一个表达式的是就是块的值。

3.3、while循环、for循环

        

3.4、try表达式

3.5、函数

      

函数默认参数和带名参数

可变长参数


 

(二)Scala面向对象

1、类的定义和使用

2、构造器的使用

除主构造器之外,类允许多个辅助构造器,它的名称为this,

3、继承和重写

4、抽象类的使用

Scala抽象类不能被实例化,包含若干定义不完全的方法,具体的实现由子类去实现。重写抽象方法时,不需要使用abstract关键字,override可省略,若类存在抽象方法时,该类必须声明为abstract。

5、伴生类和伴生对象

  • 在Scala中没有静态修饰符,单例对象的成员全部都是静态的
  • 单例对象与类同名时,这个单例对象被称为这个类的伴生对象,而这个类被称为这个单例对象的伴生类。
  • 伴生类和伴生对象要在同一个源文件中定义,伴生对象和伴生类可以互相访问其私有成员。
  • 不与伴生类同名的单例对象称为孤立对象。
  • 伴生对象方便伴生类的构建,可做为当前类的静态方法、成员的集合。 

6、apply方法的使用

6.1、当快捷方式使用

所以当调用一个Object的时候,其实就是相当于调用了这个Object的apply方法。比如Array对象定义了apply方法,所以可以通过Array(2,4,6)创建数组,而不需new。

6.2、scala会自动为case class生成apply方法

6.3、在class中的apply

7、case class的使用

当一个类被生成为case class 时,scala会默认作如下工作:

  • 如果参数不加var/val修改,默认为val
  • 自动创建伴生对象,实现apply方法,方便了我们在创建对象时不使用new
  • 实现自己的toString、hashCode、copy和equals方法

8、trait特征的使用

Trait(特征) 相当于 Java 的接口,Scala的类只能够继承单一父类,但是如果是 Trait(特征) 的话就可以继承多个,从结果来看就是实现了多重继承,使用with关键字即可


(三)Scala集合

1、数组

1.1、定长数组

1.2、变长数组:数组缓冲

1.3、遍历数组

1.4、数组转换

1.5、常用函数

2、Map映射

2.1、构造映射

2.2、获取映射中的值

2.3、更新映射中的值

2.4、迭代映射

3、Option、Some及None

Option可以存储任意类型的值,它有两个子类:Some和None。当程序回传Some的时候,代表这个函式成功地给了你一个值,而你可以透过get()函数拿到那个值,如果程序返回的是None,则代表没有值可以给你。

Option存在的意义,:就是为了在代码中注明, 让人一看就知道:"这个东西有可能是空的!你们用的时候给我小心点" 。 有了这个暗示, 你可就不能随意取出option里面的东西了, 警醒你每次使用, 都要先判断. isEmpty 或是 nonEmpty

4、Tuple(元组)的使用

  • tuple最多支持22个元素
  • Tuple 不能通过一个泛型参数来指定所有元素的类型,如Tuple3[Int](1,2,3)

5、List列表

构造List的两个基本单位是 Nil 和 ::,List一旦创建,已有元素的值不能改变,可以使用添加元素或删除元素生成一个新的集合返回。

List的三个基本操作:head 返回列表第一个元素、tail 返回一个列表,包含除了第一元素之外的其他元素、isEmpty 在列表为空时返回true。

:::::操作符——::把一个新元素组合到已有元素的最前端,然后返回结果List;:::用于连接两个List

  


(四)Scala模式匹配(match case)

1、基本数据匹配及if防卫

2、变量模式

匹配的表达式会被赋值给那个变量

3、类型匹配

4、匹配数组、列表

5、case class模式匹配

Option通常会用于模式匹配中,用于判断某个变量是有值还是没有值,这比null来的更加简洁明了

6、Some和None模式匹配


(五)Scala高阶函数

scala支持:

  • 把函数作为实参传递给另一个参数
  • 把函数作为返回值
  • 把函数赋值给变量
  • 把函数储存在数据结构里

1、匿名函数

=>  匿名函数,表示创建一个函数实例,只需要说明输入参数的类型和函数体即可,不需要名称

2、带函数参数的函数

3、柯里化currying

柯里化是把接收多个参数的函数变成接收一个单一参数的函数,并返回接收余下参数且返回结果的新函数的技术


(六)Scala隐式转换

1、隐式转换函数

隐式转换函数的函数名可以是任意的,与函数名称无关,只与函数签名(函数参数和返回值类型)有关。

如果当前作用域中存在函数签名相同但函数名称不同的两个隐式转换函数,则在进行隐式转换时会报错

例子:将整数转换成字符串类型

  

2、隐式类

隐式类的主构造函数参数有且仅有一个!之所以只能有一个参数,是因为隐式转换是将一种类型转换为另外一种类型,源类型与目标类型是一一对应的

例子:string中没有bark方法,通过隐式转换,调用对应的方法转换

3、隐式对象

4、隐式参数与隐式值

举例一:修改上面一个方法--

举例二:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Scala是一种多范式编程语言,既可以用于面向对象编程,也可以用于函数式编程,支持静态类型检查和类型推断。它受到Java和Ruby的启发,同时也受到函数式编程语言的影响,如Haskell和Erlang。 ### 回答2: Scala主要是学习以下几种语言: 1. Java:Scala是一种在Java虚拟机上运行的编程语言,并且与Java语言高度兼容。因此,学习Scala需要具备一定的Java基础,包括Java的面向对象编程思想、语法和常用的类库。 2. Functional Programming(函数式编程):Scala是一种支持函数式编程的语言,它引入了许多函数式编程的概念和特性,如高阶函数、不可变性和模式匹配等。因此,学习Scala需要学习一些函数式编程的基本理念和技术。 3. Static Typing(静态类型):与Java类似,Scala是一种静态类型语言,需要声明变量的类型,并且在编译时进行类型检查。因此,学习Scala需要对静态类型语言的基本概念和类型系统有一定的了解。 4. Object-Oriented Programming(面向对象编程):Scala是一种面向对象的语言,支持类、继承、多态等面向对象编程的特性。因此,学习Scala需要熟悉面向对象编程的基本思想和常用的设计模式。 总之,学习Scala需要掌握Java的基础知识、函数式编程的概念和技术,以及静态类型和面向对象编程的思想。这些知识将帮助开发者更好地理解和应用Scala编程语言。 ### 回答3: Scala主要是学习Java和函数式编程的语言。 首先,Scala是一种同时支持面向对象编程和函数式编程的语言。在面向对象方面,它借鉴了Java的语法和面向对象思想,因此熟悉Java的人可以很快上手ScalaScala提供了类、继承、多态和接口等特性,使得开发者可以使用面向对象的方式来组织代码和实现复杂的程序。 其次,Scala也是一种函数式编程语言,它引入了很多函数式编程的概念和特性。函数是Scala中的一等公民,可以作为参数或返回值进行传递。Scala提供了很多高阶函数的概念,比如map、filter和reduce等,这些函数可以很方便地操作集合数据。此外,Scala还支持不可变的数据结构和模式匹配等函数式编程的特性。 由于Scala和Java的紧密联系,学习Scala的过程中,对Java的知识会有帮助。熟悉Java的开发者可以借助Scala的优势来提高开发效率和代码可读性。同时,Scala也为Java开发者提供了平滑迁移的途径,可以逐渐引入Scala的特性和概念,使得代码更加简洁和灵活。 综上所述,学习Scala主要是学习Java和函数式编程的语言。掌握Java的开发者可以更快上手Scala,并且通过学习Scala的函数式编程特性,可以拓展自己的编程思维和方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值