目录

一、Scala简介

为什么使用scala

Scala对比Java

案例


一、Scala简介

scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程

  • 多范式:就是包含多种编程思想。目前主流的编程思想有4中,即面向对象、面向过程、面向函数、以及泛型
  • 面向函数一句话形容:函数也是一个对象,可以作为参数进行传递。

也就是:

面向对象 :传递的参数是具体的对象或者值

函数式编程:传递的参数可以是一个函数(处理逻辑)

  • 运行在JVM之上:

Scala程序编译执行流程

就像学习MapReduce中, 各种序列化器. 类比一下, 比如: IntWritable 以及 Text , 都是把内容进行序列化, 也就是输入不同, 输出相同. 不同的输入, 序列化为同样格式的内容, 运行在hadoop上. 同理, 我们可以认为, scala 和 java 就类比有个 ScalaWritable 以及 JavaWritable. 负责对java 以及Scala进行序列化, 输出是什么呢? 输出就是我们的字节码, 也就是 .class 文件. 用于运行在JVM之上.

早期,scala刚出现的时候,并没有怎么引起重视,随着Spark和Kafka这样基于scala的大数据框架的兴起,scala逐步进入大数据开发者的眼帘。scala的主要优势是它的表达性

为什么使用scala

开发大数据应用程序(Spark程序、Flink程序)

Spark生态并不是要取代Hadoop生态,而是为了更好的拓展大数据生态,两者结合.

而Spark由我们Scala开发的,我们学习Scala为了更好的去学习Spark。

表达能力强,一行代码抵得上Java多行,开发速度快。 优雅,代码简介逻辑更加清晰。

兼容Java,可以访问庞大的Java类库,例如:操作mysql、redis、freemarker、activemq等等

Scala对比Java

通过下面的案例,对比分别使用Java和Scala实现的代码数量

案例

定义三个实体类(用户、订单、商品)

Java代码

/*** 用户实体类*/
public class User {private String name;private List<Order> orders;public String getName() {return name;}public void setName(String name) {this.name = name;}public List<Order> getOrders() {return orders;}public void setOrders(List<Order> orders) {this.orders = orders;}
}/*** 订单实体类*/
public class Order {private int id;private List<Product> products;public int getId() {return id;}public void setId(int id) {this.id = id;}public List<Product> getProducts() {return products;}public void setProducts(List<Product> products) {this.products = products;}
}/*** 商品实体类*/
public class Product {private int id;private String category;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCategory() {return category;}public void setCategory(String category) {this.category = category;}
}

Scala代码

case class User(var name:String, var orders:List[Order]) // 用户实体类
case class Order(var id:Int, var products:List[Product]) // 订单实体类
case class Product(var id:Int, var category:String)   // 商品实体类

2021年大数据常用语言Scala(一):Scala简介相关推荐

  1. 2021年大数据常用语言Scala(四):基础语法学习 声明变量

    目录 声明变量 语法格式 在解释器中定义一个变量 val和var变量 使用类型推断来定义变量 惰性赋值 声明变量 我们将来每一天编写scala程序都会定义变量.那scala语言如何定义变量呢? 语法格 ...

  2. 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)

    目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...

  3. 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握

    目录 列表 List 重点掌握 不可变列表定义 可变列表 列表常用操作 列表 List 重点掌握 列表是scala中最重要的.也是最常用的数据结构.List具备以下性质: 可以保存重复的值 有先后顺序 ...

  4. 2021年大数据常用语言Scala(十四):基础语法学习 数组  重点掌握

    目录 数组  重点掌握 定长数组 变长数组 遍历数组 数组常用算法 数组  重点掌握 scala中数组的概念是和Java类似,可以用数组来存放一组数据.scala中,有两种数组,一种是定长数组,另一种 ...

  5. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  6. 2021年大数据常用语言Scala(二):Scala开发环境安装

    目录 开发环境安装 安装JDK 安装scala SDK 步骤 具体操作 安装IDEA scala插件 步骤 开发环境安装 学习如何编写scala代码之前,需要先安装scala编译器以及开发工具 sca ...

  7. 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数

    目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...

  8. 2021年大数据常用语言Scala(三十六):scala高级用法 泛型

    目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...

  9. 2021年大数据常用语言Scala(二十七):函数式编程 聚合操作

    目录 聚合操作 聚合  reduce 定义 案例 折叠  fold 定义 案例 聚合操作 聚合操作,可以将一个列表中的数据合并为一个.这种操作经常用来统计分析中 聚合  reduce reduce表示 ...

最新文章

  1. C++ 笔记(12)— 判断(if/if...else/switch、条件运算符)
  2. 简单好用!利用Spring AOP技术10分钟实现一个读写分离方案
  3. Linux要学git吗,git学习一 基于linux ubuntu git安装与配置
  4. 一文搞定Vim/Vi编辑器
  5. Docker: Jenkins里的pipeline编写基本技巧
  6. SpaceVim 语言模块 lua
  7. WORD出错:布局也会超出内容区
  8. x1c更改语言系统后开机超慢,大明:电脑重装系统后一个月变慢?简单五步设置,解决卡慢问题...
  9. [转]中国著名黑客你知道多少?
  10. 宏基 Acer 4741G ubuntu10.10 GT 330M显卡驱动
  11. matlab学习笔记 repmat函数与kron函数之区别
  12. ipsec-tools之racoon搭建
  13. 「链节点活动年度总结」2019年区块链行业会议回顾
  14. Unity人工智能之不断自我进化的五人足球赛
  15. 人工智能 漆桂林_认识一下计算机的新成员——人工智能
  16. 【敬伟ps教程】平移、缩放、移动、选区
  17. 区块链数字签名、验签,以及椭圆曲线算法JS库—elliptic的使用
  18. 最短路及最短路计数(SPFA)
  19. C专家编程 --- 书中案例汇编与分析(持续更新中)
  20. Unity3D 常用贴图加载方式

热门文章

  1. 2022-2028年中国新零售行业深度调研及投资前景预测报告(全卷)
  2. 【JavaWeb】servlet与http请求协议
  3. html,xml_网页开发_爬虫_笔记
  4. 自动驾驶开发云平台业务分析
  5. Halide视觉神经网络优化
  6. 英特尔Intel® Arria® 10 FPGA加速器设计
  7. AI芯片体系结构目标图形处理
  8. 编译器设计-符号表-中间代码生成
  9. 适用于Linux 2的Windows子系统上的CUDA
  10. 三维视觉惯性SLAM的有效Schmidt-EKF