文章目录

  • Scala语言编程基础
  • 1、实验描述
  • 2、实验环境
  • 3、相关技能
  • 4、知识点
  • 5、实现效果
  • 6、实验步骤
  • 7、总结

Scala语言编程基础

1、实验描述

  • 完成Scala的基本操作,达到对Scala的基本熟悉。
  • 实验时长:
    • 45分钟
  • 主要步骤:
    • 练习Scala的基础语法
    • 学习使用Scala的基本数据类型
    • 学习使用Scala的函数

2、实验环境

  • 虚拟机数量:1
  • 系统版本:Centos 7.5
  • JDK 版本:1.8.0_131
  • Scala版本:2.11.11

3、相关技能

  • Scala 交互式环境的使用
  • Scala的语法形式

4、知识点

  • Scala基础概念
  • Scala交互式命令行
  • Scala基础语法
  • Scala数据类型
  • Scala函数与类
  • Scala的集合

5、实现效果

6、实验步骤

6.1Scala基本概念:Scala是一个类似于Java的多范式编程语言,集成了面向对象和函数式编程的特性。Scala的特点主要有:面向对象、函数式编程、静态类型、运行于JVM(Java虚拟机),能执行Java代码

6.2Scala交互式命令行:

6.2.1Scala有一个类似与Python 的交互式命令行,
在终端输入关键字“scala”就可以进入,前提是要安装完scala,具体安装步骤如下

6.2.1.1复制软件公共目录“/home/zkpk/tgz/”下的scala压缩包到zkpk的家目录下

[zkpk@master ~]$ cd[zkpk@master ~]$ cp tgz/scala/scala-2.11.0.tgz  /home/zkpk

6.3解压并安装scala

[zkpk@master ~]$ tar xvzf scala-2.11.0.tgz

6.3.1查看scala目录

[zkpk@master ~]$ ll scala-2.11.0/

6.3.2配置scala环境变量

6.3.2.1使用vim 编辑 “/home/zkpk/.bash_profile
文件,里面追加如下所示内容,并保存.

[zkpk@master ~]$ vim /home/zkpk/.bash_profile

6.3.2.2使用source命令使,环境变量生效

[zkpk@master ~]$ source  /home/zkpk/.bash_profile

6.3.2.3验证scala安装,命令行键入scala出现如图4所示即可

[zkpk@master ~]$ scala

6.3.2.4可以进行简单的算数运算,

scala> 1 + 1res0: Int = 2scala>

6.3.2.5退出时,只需要输入组合键“Ctrl +D”即可。

6.4基础语法。

6.4.1首先我们编写一个入门级的“hello world”,
使用vim编辑一个“.scala”后缀的文件。

[zkpk@master ~]$ vim HelloWorld.scala

6.4.2输入如下内容

object HelloWorld {def main(args: Array[String]) {//打印出字符串      println("Hello, world!")    }

6.4.3然后在命令行编译程序。编译后会生成一个.class
后缀的同名文件,我们只需要运行这个文件就可以了

[zkpk@master ~]$  scalac HelloWorld.scala[zkpk@master ~]$  scala  HelloWorldHello, World!

6.5常用的数据类型和变量, 为了方便演示,我们的操作都在scala命令行中进行

6.5.1常见的类型

数据类型    描述Byte    8位有符号值,范围:-128~127Short    16位有符号值,范围:-32768~32767Int    32位有符号值,范围:-2147483648~2147483647Long    64位有符号值,范围: -9223372036854775808~9223372036854775807Float    32位IEEE754单精度浮点数Double    64位IEEE754双精度浮点数Char    16位无符号Unicode字符,范围:U+0000~U+FFFFString    字符串Boolean    布尔值:true / falseUnit    表示没有值Null    空或空引用Nothing    每一个其他类型的子类型,包括无值Any    任何类型的超类型,任何object都是Any类型的AnyRef    任何引用类型的超类型

6.5.2值和变量

6.5.2.1命令行键入scala进入scala交互式环境

6.5.2.2可以使用var声明变量,使用val声明值(也就是常量)。如:

下所示,如果改变val声明的常量的值就会报错。

scala> val res1= 1 + 1res1: Int = 2scala>scala> var name = "zkpk"name: String = zkpkscala> name = "hello"name: String = hello

6.6函数:函数通过def定义,在Scala中,你需要为函数参数指定类型签名。函数的形式如下所示

def functionName ([list of parameters]) : [return type] = {   function body   return [expr]}

6.6.1Ctrl +D 组合键退出交互式环境,然后新建Test.scala类,键入如下内容并保存。

object Test {    def main(args: Array[String]) {        var result: Int = addOne(10)        println(result)    }    def addOne(x: Int): Int = {        return x + 1    }}

6.6.1.1上面的代码中,定义了main函数和addOne函数。前面说了,main函数是程序入口函数,每个程序都必须要有的,addOne函数接收一个Int型参数,返回加1后的值。

6.6.1.2依次编译运行程序后,会看到程序的打印结果与我们的预期相符。

6.6.2函数的定义:在函数不带参数的情况下,调用的时候可以不用写括号,函数体内如果只有一条表达式,
则可以省略函数的大括号。如下所示

 object Test2 {    def main(args: Array[String]) {        var res: Int = addOne()        var res2: Int = addOne        println(res)        println(res2)    }    def addOne(): Int = 1 + 1}

6.6.2.1执行编译运行后,会看到程序的运行结果(打印两个数字2)。

6.6.3使用下划线*部分应用一个函数,结果将得到另一个函数。Scala使用下划线表示不同上下文中的不同事物,你通常可以把它看作是一个没有命名的神奇通配符。在{
* + 2 }的上下文中。如下所示

Test3.scalaobject Test {    def main(args: Array[String]) {        var add1 = add(1, _:Int) # 传入一个参数,另一个一个占位        var add2 = add1(2)    #此时再传入第二个参数        println(add2)           # 返回两个参数累加的结果    }    def add(x: Int, y: Int) :Int = {        return x + y    }}

6.6.4柯里化函数:就是允许函数的参数根据实际的情况扮演不同的角色。如下所示,我们可以直接传入两个参数。也可以填上第一个参数并且部分应用第二个参数。

6.6.4.1打开scala命令行键入如下内容测试

scala> def func(x:Int)=(y:Int) => x*yfunc: (x: Int)Int => Int             scala> val f1 = func(10)  #此时返回的是一个需要接受其余参数的函数f1: Int => Int = <function1>scala> f1(10)#此时传入其余的参数(返回结果)res1: Int = 100scala>

6.6.5可变长参数:可以向函数中传入多个同类型的参数,如下示例。

# 定义一个需要传入不定长参数,然后返回将传入的参数转换成大写的函数scala> def capaitalizeAll(args:String*)={     | args.map(_.capitalize)     | }capaitalizeAll: (args: String*)Seq[String]# 此时传入两个参数scala> capaitalizeAll("hello", "world")res2: Seq[String] = ArrayBuffer(Hello, World)scala>scala> capaitalizeAll("hello", "zkpk","org")res3: Seq[String] = ArrayBuffer(Hello, Zkpk, Org)

6.7类,在类中使用def定义方法,和val关键字定义变量。方法就是可以访问类的状态函数。

6.7.1构造函数:构造函数不是特殊的方法,是除了类的方法定义之外的代码。通常可以增加一个构造函数参数,并用它来初始化内部状态

class Calculator(brand: String) {    val color: String = if (brand == "zkpk") {        "blue"    } else if (brand == "hello") {        "black"    } else {        "white"    }    // 实例方法    def add(m: Int, n: Int): Int = m + n}object Test {    def main(args: Array[String]) {        // 你可以使用构造函数来构造一个实例        val calc = new Calculator("hello")        println(calc.color)    }}

6.7.2如果子类和父类在实际上没有什么区别,那么类型别名是优于继承的。

6.7.3重载,和java中类似,示例如下。

class EvenMoreScientificCalculator(brand: String) extends ScientificCalculator(brand) {  def log(m: Int): Double = log(m, math.exp(1))}

6.7.4抽象类: 定义一个抽象类,定义个方法但没有具体实现。不能创建抽象类的实例。

// 定义抽象类abstract class Shape {    def getArea():Int    // subclass should define this}// 扩展抽象类class Circle(r: Int) extends Shape {    def getArea():Int = { r * r * 3 }}object Test {    def main(args: Array[String]) {        // 创建类实例        val c = new Circle(2)        println(c.getArea)    }}

6.8特质(Traits: 特质是一些字段和行为的集合,可以扩展或混入我们的类中,class
可以扩展多个traits(使用关键字 with)。

6.9集合,Scala提供了常用的集合,包括:列表(List),集合(Set),映射(Map),选项(Option),元组(Tuple)

object Test {    def main(args: Array[String]) {        val x1 = List(1, 2, 3, 4)        val x2 = Set(1, 3, 5)        val x3 = Map("one" -> 1, "two" -> 2)        val x4 = (2, "two")          // 定义元组        val x5:Option[Int] = Some(5) // 定义选项        println(x1)        println(x2)        println(x3)        println(x4)        println(x5)    }}

7、总结

本次实验对scala的基本概念和使用语法有了深入的了解,为我们之后的使用和学习Spark打下了坚实的基础。

Scala语言编程基础相关推荐

  1. c语言从键盘输入千米数,第二章 C语言编程基础.ppt

    第二章 C语言编程基础 习题2 P51-7.8.13.14.16 2.4.8break 语句和continue语句 [例2.19] 输出100 - 200 之间不能被3整除的数. P44 2.4.9循 ...

  2. c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...

    中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc 中等职业学校计算机应用专业C语言编程基础科试卷及答案一.填空(共35分)1.Unix系统诞生于 年,是由 实验室的K和用汇编语言开发成功的 ...

  3. C语言对p1口取反,单片机c语言编程基础(5页)-原创力文档

    单片机的外部结构: 1. DIP40双列直插: 2. P0,P1,P2,P3四个8位准双向I/O引脚:(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20): ...

  4. Linux——Linux C语言编程基础知识

    源程序的编译 在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 通常在gcc后跟一些选项和文件名来使用gcc编译器.gcc 命令的基本用法如下:: gcc [option ...

  5. 嵌入式C语言编程课件,嵌入式系统C语言编程基础PPT课件

    <嵌入式系统C语言编程基础PPT课件>由会员分享,可在线阅读,更多相关<嵌入式系统C语言编程基础PPT课件(81页珍藏版)>请在人人文库网上搜索. 1.嵌入式系统C语言编程基础 ...

  6. r语言编程基础_这项免费的统计编程课程仅需2个小时即可学习R编程语言基础知识

    r语言编程基础 Learn the R programming language in this course from Barton Poulson of datalab.cc. This is a ...

  7. 数据库笔记09:Transact-SQL语言编程基础

    /*********************************  第九单元 Transact-SQL语言编程基础 ***********************************/ /* ...

  8. 51单片机c语言程序控制,51单片机C语言编程基础及实例.pdf

    基础知识: 51 单片机编程基础 第一节:单数码管按键显示 第二节:双数码管可调秒表 第三节:十字路口交通灯 第四节:数码管驱动 第五节:键盘驱动 第六节:低频频率计 第七节:电子表 第八节:串行口应 ...

  9. 【R语言编程基础】【课后习题答案】【全】

    文章目录 第1章 R语言概述 1.选择题 2.操作题 第2章 数据对象与数据读写 1.选择题 2.操作题 第3章 数据集基本处理 1.选择题 2.操作题 第4章 函数与控制流 1.选择题 2.操作题 ...

最新文章

  1. 书评与访谈:Scrum for Managers
  2. Missing separate debuginfos, use: debuginfo-install
  3. idea远程debug调试阿里云ECS
  4. 【复习资料】单片机与嵌入式系统原理及应用
  5. java不可变类型_Java中的值类型:为什么它们不可变?
  6. falsk 请求没有返回值报错
  7. OpenShift 4 - Knative教程 (1) 创建Serverless运行环境
  8. 在CentOS6和CentOS7安装epel仓库-最简单的方法
  9. python描述符魔术方法_Python类型转换的魔术方法详解
  10. 趣图:程序猿和运维狗的工作日常……
  11. 七月外贸新规,外贸人请查收
  12. 数采仪厂家_环保数采仪生产厂家
  13. 三.minio 的分布式部署、单节点多磁盘、多节点模式
  14. 复习C++期末考试题目
  15. 微信公众平台如何授权第三方平台,干货到!微信公众号怎样添加第三方平台及取消授权
  16. 数据结构 | 二叉树 先根、中根、后根遍历的非递归算法
  17. python开发cs程序_CSE209代做、代写Computer Graphics、代做CS/python编程设计代写Python程序|代做Processing...
  18. [数据库_2]-Windows 桌面数据库 Access 简明教程
  19. 中科红旗卖身内幕:收购方放言不惜代价拿下
  20. Flink(1.12版本)

热门文章

  1. 进度计划:什么是关键路径管理 1/2
  2. VSCode配置C/C++教程
  3. 360路由器刷openwrt、不死uboot、双系统 、wifi中继
  4. inflater.inflate 三个方法区别
  5. 阿里平头哥宣布开源四款玄铁 RISC-V 系列处理器
  6. OSChina 周日乱弹 —— 如何证明“女生=恶魔”?
  7. MyEclipse运行web项目页面有一个面板/logo标志怎么去掉
  8. PHP内容缓存Yac
  9. 海明校验码c语言源代码,校验码辅导之海明校验
  10. Python 简单数据/密码加密方法