Scala:
变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构(List/Tuple/Range/Vector/Set/Map)与迭代器

  • 变量声明

    • val:是不可变的,在声明时就必须被初始化,而且初始化以后就不能再赋值(赋值报错)

    • var:是可变的,声明的时候需要进行初始化,初始化以后还可以再次对其赋值
    • 显式声明变量的类型

    Scala具有“类型推断”能力(类型推断机制),可以自动推断出变量的类型。

    Scala 解释器输入多行代码:
    通常而言,只要Scala解释器推断出你的代码还没有结束,应该延续到下一行,解释器就会在下一行显示一个竖线“|”,可以继续输入剩余的代码,比如,我们要输入表达式val str = “Hello World!”,我们只在命令提示符后面输入“val str = ”然后就回车,显然,这个表达式还没有结束,所以解释器会在下一行显示一个竖线“|”,可以在第2行继续输入”Hello World!”然后回车,解释器就会得到执行结果。

  • 基本数据类型

    • Scala的数据类型包括:Byte、Char、Short、Int、Long、Float、Double、Boolean

    注:
    在 Scala,这些类型都是“类”,并且都是包 scala 的成员,如 scala.Int;
    对于字符串,Scala用java.lang.String类来表示字符串,自己并未定义;

    • 字面量

      • 字面量包括整数字面量、浮点数字面量、布尔型字面量、字符字面量、字符串字面量、符号字面量、函数字面量和元组字面量
      • Scala允许对“字面量”直接执行方法
  • 运算符

    • 算术运算符:在Scala中,可以使用加(+)、减(-) 、乘(*) 、除(/) 、余数(%)等算术操作符,而且,这些操作符就是方法;

    注:和Java不同,在Scala中并没有提供++和–操作符,需要采用+=形式

    • 关系运算符

      • 大于(>)、小于(<)、大于等于(>=)和小于等于(<=)

    • 逻辑运算符:&&、||、!
    • 位运算符:&、|、^(按位异或)、-(按位取反)
  • 输入输出

    • 输入

      • readInt、readFloat等
    • 输出:print println printf (scala.Predef)
    • 插值字符串

  • 读写文件

    • 写文本文件:java.io.PrintWriter


    new PrintWriter(“output.txt”)中只给出了文件名,并没有给出文件路径,采用相对路径,这时文件就会被保存到启动Scala REPL时的当前目录下;如果我们想把文件保存到一个指定的目录下,就需要给出文件路径。

    • 读文本文件:使用scala.io.Source的getLines方法
  • 分支与循环

    • if

      • vim if_try.scala

      注:
      上述形式代码直接scala filename.scala即可;
      与Java不同的是,Scala中的if表达式的值可以赋值给变量;

    • while

      • 1:

      • 2:do while

    • for

      • 格式:for (变量<-表达式) 语句块;

      "变量<-表达式"被称为生成器(generator);

      • 例:

        • 打印1到5

        注:i 不需要提前进行变量声明

        • 打印1到5之间的奇数

        • 打印1到5之间的偶数:守卫(guard)表达式

        • Scala 多生成器

        • 多生成器&守卫表达式

        • for 推导式:yield

        带有yield关键字的for循环,被称为“for推导式”。这个概念源自函数式编程,也就是说,通过for循环遍历一个或多个集合,对集合中的元素进行“推导”,从而计算得到新的集合,用于后续的其他处理。

      • Scala无break与continue,解决方法如下


        break:

        continue:

  • 异常捕获:Scala异常为不受检异常,try catch

  • 数据结构

    • Array

      • 声明一个长度为3的整型数组并赋值

      需要注意的是,在Scala中,对数组元素的应用,是使用圆括号,而不是方括号

      • 声明一个长度为2的字符串数组
      • 更加简洁的数组声明和初始化方法
      • 多维数组
    • Tuple(Scala 元祖)

    当需要访问元组中的某个元素的值时,可以通过类似tuple._1、tuple._2、tuple._3这种方式就可以实现

    • List


      注:
      列表有头部和尾部的概念,可以使用arr.head来获取上面定义的列表的头部(第一个),使用arr.tail来获取上面定义的列表的尾部(除第一个);
      我们可以使用::操作(右结合的),在列表的头部增加新的元素,得到一个新的列表;
      Nil表示空列表;

    • Vector

    +:与:+

    • Range(在执行for循环时,我们经常会用到数值序列,可以使用range实现)

      • 创建一个从1到5的数值序列,包含区间终点5,步长为1:to


      • 创建一个从1到5的数值序列,不包含区间终点5,步长为1:Until
      • 创建一个从1到10的数值序列,包含区间终点10,步长为2:to、by
      • 创建一个从0.5到5.6的浮点序列,步长为0.3:to、by
    • Set(不重复,无序,以“哈希”方法对元素的值进行组织)

      • 不可变集(缺省情况下创建的是不可变集)

      即使是可变类型变量(var),myset还是不可变集:
      myset += “d” 是新的不可变集赋值给可变的变量myset;
      如果使用val,mySet +=“Scala”执行时会报错,因为val声明的变量不可变;

      • 可变集

      如果要声明一个可变集,则需要引入scala.collection.mutable.Set包
      声明myMutableSet为val变量(不是var变量),由于是可变集,因此,可以正确执行myMutableSet += “Cloud Computing”,不会报错,可以这样理解,myMutableSet变量指向的可变集改变了,即加了一个Cloud Computing。

      注意:虽然可变集和不可变集都有添加或删除元素的操作,但是二者有很大的区别。对不可变集进行操作,会产生一个新的集,原来的集并不会发生变化。 而对可变集进行操作,改变的是该集本身。

    • Map

      • 不可变映射(默认情况下创建的是不可变映射)

      上面我们定义的是不可变映射,是无法更新映射中的元素的,也无法增加新的元素

      • 可变映射(如果需要创建可变映射,需要引入scala.collection.mutable.Map包)
      • 循环遍历映射
        • 基本格式:for ((k,v) <- 映射) 语句块
        • 遍历打印key、value
        • 遍历打印key
        • 遍历打印value
  • 迭代器

    • 在Scala中,迭代器(Iterator)不是一个集合,但是,提供了访问集合的一种方法。当构建一个集合需要很大的开销时(比如把一个文件的所有行都读取内存),迭代器就可以发挥很好的作用。

>>> Scale 编程基础 B(面向对象编程)
>>> Scale 编程基础 C(函数式编程)


中国大学MOOC-厦门大学林子雨-Spark编程基础(侵删)

Scale 编程基础 A(变量声明、基本数据类型、运算符、文件读写、分支与循环、数据结构)相关推荐

  1. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...

  2. Python基础——1.变量和简单数据类型

    Python基础--1.变量和简单数据类型 1.0 前言 1.1 运行hello.py 1.2 变量 1.2.1 变量的命名和使用 1.2.2 使用变量时避免命名错误 1.3 字符串 1.3.1 使用 ...

  3. 1.2编程基础之变量定义、赋值及转换 10 Hello, World 的大小

    http://noi.openjudge.cn/ch0102/10/ #include <bits/stdc++.h> using namespace std; int main( voi ...

  4. 变量的三重属性_TypeScript基础入门 - 变量声明(三)

    转载地址TypeScript基础入门 - 变量声明(三)​www.gowhich.com 项目实践仓库 https://github.com/durban89/typescript_demo.gitt ...

  5. Linux shell基础之变量声明和处理

    本篇博客将讲解shell编程语言中最基础的变量声明和处理. 先来说一下set:声明变量 set:查看变量,可以看到有很多是系统提前设置好的变量,比如系统环境变量PATH,ls命令中颜色的变量LS_CO ...

  6. 我与python约个会:10.程序编程基础4~变量运算符

    上一章讲解过了组合数据类型,本章进行变量以及各种编程需要的运算符的操作讲解 3.3 变量部分 3.4 运算符部分:主要讲解:赋值运算符.算数运算符.关系运算符.逻辑运算符.成员运算符.标识运算符 3. ...

  7. 可以声明一个抽象类类型变量_TypeScript系列(二)变量声明和数据类型

    一,变量声明 TypeScript是JavaScript的超集,在变量声明方式方面,关键字是和JavaScript保持一致的,并且推荐较新的 let 和 const 代替 var .至于为什么这样做, ...

  8. Scala的变量声明和数据类型详解

    变量声明 在声明变量时,Scala 允许你决定该变量是不可变(只读)的,还是可变的(读写).如下所示,不可变的"变量"用 val 关键字声明: val array: Array[S ...

  9. 【TS基础】变量声明

    变量声明 let和const是JavaScript里相对较新的变量声明方式. 像我们之前提到过的, let在很多方面与var是相似的,但是可以帮助大家避免在JavaScript里常见一些问题.cons ...

最新文章

  1. 机器学习知识点(三十六)分类器性能度量指标f1-score
  2. boos::reverse_iterator相关的测试程序
  3. Excel VBA 学习总结 - 数据验证与正则表达式
  4. Java模因拒绝死亡
  5. python程序、画一个笑脸_如何使用canvas画一个微笑的表情(代码示例)
  6. 在字典中根据条件来筛选数据
  7. Uva 11178 Morley定理
  8. 学习手册:浅析DDoS的攻击及防御
  9. 英语“就近原则”和“就远原则”
  10. (7)nodejs学习---之模板引擎jadeejs
  11. Android桌面插件宽度,android 屏幕适配插件
  12. Green Screen Wizard Pro(绿幕摄影软件)官方正式版V12.1 | 绿屏拍摄有什么软件?
  13. 用云开发搭建的微信答题小程序v1.0
  14. labview文件写入与读取
  15. 关于Angular Js动态表格合并单元格的一点见解
  16. linux-千兆网口测速只有百兆
  17. 次世代游戏建模师一个月的工资有多少?
  18. npm install的解决方法试错,还没解决。
  19. 基于MATLAB的人民币纸币面值识别
  20. OpenStack保姆级别安装教程

热门文章

  1. Phonics 自然拼读法 s,a,t,i,p,n Teacher:Lamb
  2. 潘多拉盒子 使用 hd-idle 硬盘休眠设置
  3. 免费QQ群管助手-帮你管理QQ群
  4. 知道创宇研发技能表v2.2
  5. Ecotourism--生态旅游
  6. 多模态自编码器从EEG信号预测fNIRS静息态
  7. 反软件盗版的最佳实践
  8. 推荐一些免费的网盘给你
  9. Unity 水体效果模拟
  10. 单位及主管部门同意报考证明单位不同意怎么办