暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Scala学习笔记(一)

哦呦明知山有虎 2020-07-18
795

Scala学习笔记

近日在b站学习Spark,需要使用到Scala语言,写下此笔记,观看的是韩顺平老师的尚硅谷大数据课程。

第一章 Scala概述

1.1 Scala简单介绍

Spark是新一代内存级大数据计算框架,是大数据的重要内容。Spark是使用Scala编写的。因此为了更好地学习Spark,需要掌握Scala这门语言。Scala是Scalable Language的简写,是一门多范式(范式/面向对象/函数式编程)的编程语言。Spark的兴起,带动Scala语言的发展。

Scala官方网站:

https://www.scala-lang.org/

1.2 Scala与java之间的关系

1.3 scala语言特点

Scala是一门以java虚拟机为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。

  • scala是一门多范式的编程语言,Scala支持面向对象和函数式编程。
  • scala源代码(.scala)会被编译成Java的字节码(.class),然后运行在JVM之上,并可以调用现有的Java类库,实现两种语言的无缝对接。
  • scala单独最为一门语言来看,非常的简介高效(三元运算,++,--)
  • scala源于Java,但是其中加入了创造者自己的思想,弄清楚区别,是快速掌握的窍门。

1.4 scala快速入门

我们先看一个简单的Demo

object HelloScala{
def main(args:Array[String]):Unit = {
println("hello World!")
}
}

将程序编译后会出出现两个.class文件。

  • HelloScala.class
  • HelloScala$.class

说明:

  1. object 表示一个伴生对象,这里可以简单的理解就是一个对象。
  2. HelloScala就是对象名字,它底层真正对应的类名是HelloScala类型的一个静态对象MOUDLE$.
  3. 当我们编写一个object HelloScala底层会生成两个.class文件,分别是HelloScala和HelloScala$
  4. scala在运行时的流程:先从HelloScala.scala的main开始执行,然后调用HelloScala$.scala中的主方法。
  5. def 表示的是一个方法,这是一个关键字。
  6. main表示方法名,表示了程序入口。
  7. args:Array[String]表示形参,scala的特点是在讲参数名在前,类型在后
  8. Array[String]表示类型数组。
  9. Unit= 表示该函数的返回值为空null。

其中,Scala语言包含三种输出方式:

  • 字符串通过+号连接(类似于Java)
  • printf用法(类似C语言)字符串通过%传值。
  • 字符串通过$引用。

1.5 Scala中的注释类型

代码注释,我愿称之为「代码之光」!这里主要介绍文档注释。

文档注释:

object TestScala {
 def main(args: Array[String]): Unit = {
   println("Hello Scala")
}
 /**
  * sum 2 numbers
  * @example
  *         input 1,2
  *         return 3
  * @param n1
  * @param n2
  * @return n1+n2
  */

 def sum(n1: Int, n2: Int): Int = {
   return n1 + n2
}
}

第二章 Scala的变量

2.1 变量的介绍

变量相当于内存中一个数据存储空间的表示。

示例代码:

object VarDemo {
 def main(args: Array[String]): Unit = {
   var age:Int = 10
   var sal:Double = 23.34
   var name:String = "ergouzi"
   var isIn:Boolean = false
}
}

变量声明的基本语法为:

varval  变量名[:变量类型] = 变量值

注意事项:

  • 声明变量时,类型可以省略(编译器自动推导,即类型推导)
  • 类型确定后,就不能修改,说明Scala是强数据类型语言。
  • 在声明/定义一个变量时,可以使用var或者val来进行修饰,var修饰的变量可以改变,val修饰的变量不可以改变。
  • val修饰的变量在编译后等同于加上final。

「问题」:为什么Scala设计者要设计  var  和  val ?

  1. 在实际编程中,更多的是获取或者创建一个对象后,就读取该对象的属性,或者修改对象的属性值,很少去改变这个对象本身。
  2. 「因为val没有线程安全的问题,因此效率比较高」
  3. 如果对象需要变化,则使用var。
  4. var修饰的对象引用可以改变,val修饰的则不可以改变,但对象的状态确是可以改变的。(比如:自定义对象、数组、集合等等)
  5. 声明变量时,需要初始化值。

2.2 数据类型

2.2.1 Scala数据类型介绍

  • Scala与Java有着相同的数据类型,「在Scala中数据类型都是对象」,也就是说scala没有java中的原生类型
  • Scala数据类型分为两大类  AnyVal(值类型)和AnyRef(引用类型),注意:「不管是AnyVal还是AnyRef都是对象」
object VarDemo {
 def main(args: Array[String]): Unit = {
   //因为Int是一个类,所以他的一个实例,就可以使用很多方法
   //在Scala中,如果一个方法,没有形参,就可以省略()
   var num1:Int = 10
   println(num1.toDouble + num1.toString)
}
}

  • 相对于java的类型系统,scala要复杂一些,也正是这复杂多变的类型系统才让面向对象编程和函数式编程完美的融合在了一起。

Scala数据类型体系一览图

往期回顾

Spark学习笔记(一)

Spark学习笔记(二)

Spark学习笔记(三)

欢迎大家关注微信公众号:哦呦明知山有虎



文章转载自哦呦明知山有虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论