[Scala]001-初识

2023-11-05

Scala,发音:skɑːlə。取自于 Scalable(可伸缩、可扩展的)Language简写。

01、基本概念
1)多范式:多种编程方法。目前有四种程序设计方法:面向过程、面向对象、函数式、泛型。

编程范式(programming paradigm(范例、样式、典范)),是指计算机编程的基本风格或典范模式。借用哲学术语,如果说每个编程者都在创造虚拟世界,那么编程范式就是他们置身其中自觉不自觉采用的世界观和方法论。编程是为了解决问题,而解决问题可以有多种视角和思路,其中普适且行之有效的模式被归结为范式。比如常用的“面向对象编程”就是一种范式。由于着眼点和思维方式的不同,相应的范式自然各有侧重和倾向,因此一些范式常用‘oriented’来描述。换言之,每种范式都引导人们带着某种的倾向去分析问题、解决问题,这不就是“导向”吗?如果把一门编程语言比作兵器,它的语法、工具和技巧等是招法,它采用的编程范式则是心法。编程范式是抽象的,必须通过具体的编程语言来体现。它代表的世界观往往体现在语言的核心概念中,代表的方法论往往体现在语言的表达机制中。一种范式可以在不同的语言中实现,一种语言也可以同时支持多种范式。比如,PHP可以面向过程编程,也可以面向对象编程。任何语言在设计时都会倾向某些范式,同时回避某些范式,由此形成了不同的语法特征和语言风格。抽象的编程范式须要通过具体的编程语言来体现。范式的世界观体现在语言的核心概念之中,范式的方法论体现在语言的表达机制中。一种语言的语法和风格与其所支持的编程范式密切相关。

参考:多范式编程语言【详解】

2)可伸缩的语言:
被设计成使用者的需求而成长,可应用在很大范围的编程任务上,从写个小脚本到建立大系统。
语言的可伸缩可以按照“项目大小,就像代码行数”或者“处理能力(像‘需要达到每秒处理 10 万请求’)”来理解,即 性能、(项目)大小的伸缩性。
参考:
可伸缩性:动态和静态程序设计语言
Scala,可扩展的语言
可伸缩性/可扩展性(Scalable/scalability):详解

面向对象编程:
Object Oriented Programming,OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

函数式编程:
Functional Programming,把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

总结:
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。

Scala 运行在Java虚拟机上,并兼容现有的Java程序。

Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。

2、Scala语言学习Outline

1)历史版本 预览
2001,联邦理工学院洛桑(EPFL)的Martin Odersky 基于Funnel的工作开始设计Scala;
2003底/2004初,发布Java平台的Scala;
2004-6,发布.NET平台的Scala;
2006-3,发布Scala语言的第二个版本v2.0;
2009-9,发布2.7.6;

2013-1-4,发布2.10.0;

2014-4-16,发布2.11.0,会继续支持Java 6;

2014-12,发布2.11.4;

2017-11,发布2.11.12;

2017-1,发布2.12.0,要求Java 8;

参考官方changelog
官方2.11.4、对应java下载安装:JDK 1.6+
Scala 2.11.4 标准库-文档

alpha版本:内部测试版,供开发、测试人员使用;
beta版本:公开测试版,给“部落”/忠实用户测试用;
RC版本(Release Candidate),软件/操作/语言的候选版本;
stable版本:稳定版,最终发行版。

其中一个流行的原因:
Spark,专为大规模数据处理而设计的快速通用的计算引擎。spark它是用Scala编写的。

2)语言特征
① 面向对象特性:每个值都是对象,对象的数据类型、行为 由类和特质描述。类抽象机制的扩展有两种途径:

  • 子类继承;
  • 灵活的混入机制

② 函数式编程:函数也能当成值来使用。
③ 静态类型:具备类型系统,通过编译时检查,保证代码的安全性、一致性
④ 扩展性:提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构。
⑤ 并发性:使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。
Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。

3)学习前奏
Scala首先是OO, Java语法过于冗余, 一种比较平庸的语言, Scala首先做的是简化, 以更为简洁的方式来编写OO, 主要利用‘type inference’能推断出来的, 你就不用写, 但如果仅仅这样, 不如用python
所以Scala象其名字一样, “可伸展的语言”, 它是个大的集市, 它积极吸纳其他语言的优秀的特征, 最重要的就是FP, 你可以使用Scala来写OO, 但它推荐使用FP的方式来写Scala; 还包括Erlang里面的actor模型
所以Scala并不容易学, 因为比较繁杂。

4)思维导图
在这里插入图片描述

参考:
Scala语法基础
Scala 2.8+ Handbook
Effective Scala

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Scala]001-初识 的相关文章

随机推荐

  • CCF CSP 认证 201612-2 工资计算 C语言

    include
  • 用抽象分层的方法分析Android的渲染和显示系统

    Hello World
  • Hinton关于RBM的代码注解之(二)backpropclassify.m

    源代码 http www cs toronto edu hinton MatlabForSciencePaper html 这个是关于RBM的微调步骤的代码 代价函数是交叉熵 Version 1 000 Code provided by R
  • Springboot-aop(一)

    引入依赖
  • EfficientNet与EfficientDet论文解读

    这两项工作均来自Google Brain的大佬 EfficientDet可以看做EfficientNet的工作拓展 目前EfficientNet的代码已经开源 EfficientDet已经被复现 这两项工作的纸面效果看起来特别优秀 与其他工
  • Python3中PyMongo使用举例

    MongoDB是一个基于分布式文件存储的开源数据库 由C 语言编写 与平台无关 旨在为WEB应用提供可扩展的高性能数据存储解决方案 MongoDB是一个介于关系数据库和非关系数据库之间的产品 是非关系数据库中功能最丰富 最像关系数据库的 它
  • Bart模型应用实例及解析(二)————基于泰坦尼克号数据集的分类模型

    Bart模型应用实例及解析 二 基于泰坦尼克号数据集的分类模型 前言 一 数据集 1 数据集的获取 2 数据集变量名及意义 3 数据集处理 二 完整代码 三 代码运行结果及解析 1 数据描述性分析 2 建立Bart模型以及分析 3 各模型效
  • __HAL_TIM_SET_CAPTUREPOLARITY的巨坑

    本人在写输入捕获实验的时候使用HAL库中的函数 HAL TIM SET CAPTUREPOLARITY试图切换捕获极性 keil一直报错error expected error expected expression 原以为 HAL TIM
  • 51单片机---流水灯独立按键之控制速度

    文章目录 前言 一 问题 二 代码 前言 对于某些实验室的初级考核内容 以下是代码实例 一 问题 流水灯独立按键之控制速度 用按键控制led的流水灯的流速 要求 LED从左开始 然后左右来回流水 定义三个独立按键 按下按键 改变流速 要求实
  • go 面向对象的处理方式

    go语言特性 Golang语言没有C JAVA一样有面向对象 封装 继承 多态 相关的概念 但是面向对象只是一种编程思想 go借助于struct interface这两个go的数据类型可以实现面向对象的处理 struct是一种包含了数据成员
  • 决议要素_2020年每个网站测试人员的新年决议

    决议要素 您能够根据2019年的决议进行工作吗 我在这里听起来可能很可笑 但是作为Web开发人员 我在2019年的决心是在业余时间跳入Web测试 为什么 因此 我可以从测试人员的角度了解发布周期 我想穿他们的鞋子 从他们的眼神中看到SDLC
  • iframe视频加载完成前添加等待效果

    如图 在响应结果回来之前 保持转圈效果 代码 v loading 2 判断是否响应成功
  • intelliJ IDEA 编写邮箱注册功能报错 AddressException

    之前在myeclipse里面成功过一次 今天用intellij IDEA 来做新的项目 需要实现邮箱注册功能 写好后发现一直报AddressException的错误 网上查资料大多数说没有引入mail jar包 但查看库里有包 弄了一下午一
  • 网络安全初学者工具安装:Kali,Windows xp虚拟机,pikachu靶场,burpsuite安装配置,phpstudy安装(学习笔记)

    摘要 在互联网发展的时代背景下 网络安全成为了越来越不可忽视的重要领域 为此 各国都采取了维护网络安全的举措 对于网络安全人才的需求不断增大 我国作为世界上最多使用计算机人口的国家 对于网络安全人才更是供不应求 近年来 我国开始大力扶持网络
  • 组合预测模型

    组合预测模型 EMD GRU GRU时间序列预测对比 Matlab程序 目录 组合预测模型 EMD GRU GRU时间序列预测对比 Matlab程序 预测结果 基本介绍 程序设计 参考资料 预测结果
  • React+umi+ts+Ant Design前端框架搭建详解

    Ant Design是一个由Alibaba开发的优秀的UI库 它提供了很多易于使用和定制的高质量组件和样式 但是 React和Ant Design都不是完整的应用程序框架 因此需要其他工具和库来帮助我们构建前端应用 这些工具和库包括 Rea
  • jdk1.8的Future特性简介及使用场景

    文章目录 Future简介 什么是Future Future的使用场景 Future接口内部的常用方法 Future的常见用法 一 基础用法 重写Callable接口的call方法 放到异步线程的 submit方法中执行 代码实例 二 进阶
  • UEFI 之 Capsule Update (固件更新)

    概要 什么是UEFI Capsule Update呢 Capsule 顾名思义 是 胶囊 的意思 所以UEFI Capsule Update可以理解为胶囊式固件更新 UEFI规范定义了Firmware Management Protocol
  • 【华为OD机试真题 JS】靠谱的车

    标题 靠谱的车 时间限制 1秒 内存限制 262144K 语言限制 不限 程序员小明打了一辆出租车去上班 出于职业敏感 他注意到这辆出租车的计费表有点问题 总是偏大 出租车司机解释说他不喜欢数字4 所以改装了计费表 任何数字位置遇到数字4就
  • [Scala]001-初识

    Scala 发音 sk l 取自于 Scalable 可伸缩 可扩展的 Language简写 01 基本概念 1 多范式 多种编程方法 目前有四种程序设计方法 面向过程 面向对象 函数式 泛型 编程范式 programming paradi