1. Scala语言的特点

  a. 多范式编程语言,面向对象(抽象、封装)和函数式(过程、结果)编程

  b. 代码简洁 ==>可读性较差

  c. 代码会被变异成Java字节码,运行在JVM上

2. Scala语言基础

  a. 变量修饰符

  var :修饰的变量在整个生命周期内可被重新赋值

  val :类似于java中的final,初始化后不能被重新赋值

  * 当修饰符作用于集合类型时,修饰的是类型,可理解为仅限定集合类型的引用是否可变,并不限制集合中的值是否可变。

  b. 基本数据类型

  (1) 数值类型:Byte,Short,Int,Long,Float,Double;

    Byte:  8位有符号数字,从-128 到 127

    Short: 16位有符号数据,从-32768 到 32767

    Int:  32位有符号数据

    Long: 64位有符号数据  

  * scala中任何数据都是对象,1可以看成是Int对象

scala> 1+1
res0: Int = 2 scala> 1.+(1)
res1: Int = 2

  (2)字符类型和字符串类型:Char和String

  对于字符串,在Scala中可以进行插值操作。

scala> val name = "beichen"
name: String = beichen scala> s"Username : ${name}"
res2: String = Username : beichen

  (3)Unit类型:相当于Java中的void类型

  (4)Nothing类型:一般表示在执行过程中,产生了Exception

  c.类型修饰符

  :修饰数据类型,scala可自动推导数据类型,不用显示指定  

scala> val name : String = "beichen"
name: String = beichen scala> val name = "beichen"
name: String = beichen

  d. scala的循环

  (1) for循环

  使用 <- 提取符访问集合中的元素

scala> for(i <- 0 until 5){
| print(i + " ")
| }
0 1 2 3 4

  0 until 5 生成整型集合,不包含5 Rangescala.collection.immutable.Range = Range(0, 1, 2, 3, 4)

  0 to 5 包含5

  yield关键字用于for循环中可以产生一个新的集合  

  val names = List("beichen", "scala")
var upperNames = for{
s <- names
s1 = s.toUpperCase()
} yield s1
upperNames.foreach(println)

  * 使用yield时for循环的循环条件必须写在大括号内;foreach为集合类型的高级函数,可以接受参数为函数的参数。

  (2)wihle & do while与java类似

  * 区别在于break的用法,scala中break使用前需要使用导入 import util.control.Breaks._ 并使用 breakable将需要break的代码段包裹起来  

import util.control.Breaks._
val names = List("beichen", "scala")
var j = 0;
breakable{
while(j < names.length){
if(j % 2 == 1)break()
}
}

  e. scala中函数的参数  

  • 有两种函数参数的求值策略

   (x: Int)Call By Value:对函数实参求值,且仅求一次

   (x: => Int)Call By Name:函数实参每次在函数体内被用到时都会求值

  

  

  • 默认参数:定义参数时赋默认值
  • 代名参数:访问多参数函数时,可指定参数名称确定传入的参数值
  • 可变 参数:参数后面加* 标识多个同类型参数

  f. Scala的Lazy值(懒值):当val被申明为lazy时,它的初始化将被推迟,直到我们首次对它取值。

  可对应于Spark中的Transformation和Action算子进行理解,Transformation算子类似于lazy机制,不触发计算。

  定义时在前面加上lazy如: lazy val x:Int = 10

  g.scala中的异常处理,用法与java类似,catch部分使用模式匹配  

import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException object Test {
def main(args: Array[String]) {
try {
val f = new FileReader("input.txt")
} catch {
case ex: FileNotFoundException =>{
println("Missing file exception")
}
case ex: IOException => {
println("IO Exception")
}
}
}
}

  h.scala中的集合

  (1)数组,定长数组Array与变长数组ArrayBuffer  

val a = new Array[Int](10)
val b = new ArrayBuffer[Int]()

  (2)映射  

scala> var scores = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
scores: scala.collection.immutable.Map[String,Int] = Map(Alice -> 10, Bob -> 3,Cindy -> 8) scala> scores += ("beichen" -> 9)

  *此处scores是不可变Map,由于用var修饰,+=添加元素后返回的是新Map

scala> val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
scores: scala.collection.mutable.Map[String,Int] = Map(Bob -> 3, Alice -> 10, Cindy -> 8)

scala> scores += ("beichen" -> 9)
res13: scores.type = Map(Bob -> 3, Alice -> 10, beichen -> 9, Cindy -> 8)

  *此处是可变Map,直接向其中添加元素

  (3) 元组(Tuple):用于表示不同数据类型的集合,可以取代java中使用JavaBean进行的数据封装,简化开发

scala> val t1 = ("beichen", 175, 65)
t1: (String, Int, Int) = (beichen,175,65) scala> t1._2
res16: Int = 175

  *元组中元素可以使用._访问,下标从1开始。

Scala语言基础的更多相关文章

  1. 大数据spark学习第一周Scala语言基础

    Scala简单介绍 Scala(Scala Language的简称)语言是一种能够执行于JVM和.Net平台之上的通用编程语言.既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Ode ...

  2. 大数据笔记(二十三)——Scala语言基础

    一.Scala简介:一种多范式的编程语言 (*)面向对象 (*)函数式编程:Scala的最大特点 (*)基于JVM 二.Scala的运行环境 (1)命令行:REPL 进入: scala 退出::qui ...

  3. Scala 基础(三):Scala语言快速开发入门

    1.Scala执行流程分析 2.Scala程序开发注意事项(重点) Scala源文件以 “.scala" 为扩展名. Scala程序的执行入口是main()函数. Scala语言严格区分大小 ...

  4. 关于学习Scala语言的一些感悟

    进入话题! 我们知道哈,Spark源码采用Scala语言编写,那么阅读Spark源码之前,是否一定先学Scala呢? 我个人认为,不必,只要我们有一些java或c++编写语言的基础,就可以看Spaar ...

  5. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  6. 【福利】送Scala语言入门视频学习资料

    没有套路真的是送!! 想要学好大数据,scala语言是必不可少的,spark和kafka等大数据重要组件都是用scala写的,想要彻底搞懂这些组件是如何运作的必须得看源码,而学习scala是看源码的必 ...

  7. Scala 语法基础

    一 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Java虚拟机上,并兼容现有的Java程序.Scal ...

  8. Scala语言

    一.Scala概述 Scala简介 Scala是一种针对JVM将函数和面向对象技术组合在一起的编程语言.所以Scala必须要有JVM才能运行,和Python一样,Scala也是可以面向对象和面向函数的 ...

  9. Scala语言笔记 - 第二篇

    目录 1 Map的基础操作 2 Map生成view和transform解析 ​ 最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程(Function Programming)能力,记录 ...

随机推荐

  1. shell脚本中用到的计算

    在shell脚本中计算一般会涉及到let.$(()).$[].bc(另扩展expr).其中let.$(()).$[]都是用来做基本整数运算,bc可以用来做浮点运算. (1).let.$(()).$[] ...

  2. cv2.bitwise_and的应用,

    import cv2 import numpy as np Load two images img1 = cv2.imread('messi.png') img2 = cv2.imread('logo ...

  3. python 内置数据结构 字符串

    字符串 一个个字符组成的有序的序列,是字符的集合 使用单引号,双引号,三引号引住的字符序列 字符串是不可变对象 Python3起,字符串就是Unicode类型 字符串定义 初始化 s1 = 'stri ...

  4. JS创建类和对象,看完了,头就不大了

    JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活 ...

  5. 一个小故事,玩转Python-while循环

    无论是传统编程场景还是当下火爆的人工智能应用场景,循环的应用都是必不可少的,上一篇文章中阐述了如何使用for循环来进行编程,这篇文章将会由一个小朋友经常听的故事来讲Python编程中的while循环. ...

  6. windows是下安装nvmw

    nvmw:Windows环境下的node多版本管理工具. 安装: 1.  git clone https://github.com/hakobera/nvmw.git 2.修改环境变量 计算机 -&g ...

  7. Python数据结构与语法

    字典:Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组.字典等其他容器模型:值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组:遍历字典时遍历的是键:访问v ...

  8. C# volatile 摘录

    C# 参考 volatile 关键字指示一个字段可以由多个同时执行的线程修改. 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制. 这样可以确保该字段在任何时间呈现的都是最新 ...

  9. upload上传通关游戏

    第一关:后缀名限制,抓包改一下后缀. 前端脚本检测文件扩展名.当客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消 息,前端的 js 脚本就对文件的扩展名进行检测来判断是否是可以上传的类型 ...

  10. 阿里云Centos 7.6安装Redis以及开启远程连接

    下载地址:http://redis.io/download,下载最新稳定版本. 本教程使用的最新文档版本为 5.0.5,下载并安装: $ wget http://download.redis.io/r ...