Scala编程(一)
1.1 编程范式
编程范式
是指计算机编程的基本风格或典型范式,常见的编程范式主要包括命令式编程和函数式编程。面向对象编程就是命令式编程,比如C++、Java。
函数式编程又称泛函编程,它将计算机的计算视为数学上的函数计算,并且避免状态以及可变数据。函数编程语言最重要的基础是λ\lambdaλ演算,它的函数可以接受函数当做输入和输出。主要有Haskell、Erlang、Lisp。
215年以来,计算机能力的增长不依赖于CPU主频的增长,而是依赖CPU核数的增多,CPU开始从单核发展到双核,再到四核甚至更多。
对于命令式编程而言,由于涉及到多线程之间的状态共享,需要引入锁机制实现并发控制。而函数式编程则不会再多个线程之间共享状态,也就不会造成资源争用,不需要锁机制保护可变状态,不会出现死锁,更好地实现并行处理。函数式编程更好地利用处理器多核提供的并行处理能力,代码更简洁,更易被理解。
Scala语言的名称来自“Scalable”,意为可伸展的语言,归功于集成面向对象和函数式语言的优点。
是纯粹的面向对象语言,没个值都是对象,没有java中的原生类型。
Scala官方下载地址
1.2 基础知识
9种基本数据类型:
- 整数类型:Byte、Short、Int、Long、Char
- 浮点数类型:Float、Double
- Unit类似java中的void,什么都不是,不返回任何结果。
Scala中的操作符其实是方法,也就是水5+3和5.+(3)是等价的,每个值都是一个对象,5是Int类型的对象。
注意:
- a=b=5是合法的语句,但是不表示将a个b的值都赋值为5。而是首先执行b=5,使得b的值为5,赋值表达式的值为Unit类型,这样a就成为了
Unit
类型了,用圆括号表示,即()
。 - 每个基本类型都对应有一个Rich富包装类,必要时会进行隐式转换。
声明
两张类型的变量,分别使用关键字val和var进行声明。
使用var声明的变量,是可变的。
使用val声明的变量,在声明时就必须被初始化,一旦初始化就不能再赋值。
由于Scala提供了一种乐行推断机制,所以声明的时候可以不指定类型,但浮点数除外。
输出:print、printf、和println,后者会在末尾自动换行
控制结构
- 选择控制结构、
- 与Java不同的是,Scala中的if表达式会返回一个值,因此将if表达式赋值给一个变量,这与Java中的三元操作符“?:”有些相似。例如:
scala> val a = if(6>0) 1 else -1
- 与Java不同的是,Scala中的if表达式会返回一个值,因此将if表达式赋值给一个变量,这与Java中的三元操作符“?:”有些相似。例如:
- 循环控制结构、
- while:和Java一样
- for循环:
-scala> for(变量 <- 表达式){语句块}
变量不用使用val或var进行声明;
-scala> for(i<--1 to 3){print(i)}
- 守卫式(Gaurd)scala> for(i <- 1 to 5 if i%2==0){println(i)}
- 异常处理结构
- 在方法声明中不需要像Java一样使用throw语句,但是用try-catch结构捕获异常。
- 循环控制:
breakable{ ... if(...) break ... }
1.3 面向对象
Scala的类用关键字class声明
class Counter{
//这里定义类的字段和方法
}
抽象类
使用abstract关键字修饰class,定义为抽象类,抽象字段必须要有声明类型。与Java不同的是,Scala里的抽象方法不需要加abstract修饰符,抽象类不能进行实例化,只能作为父类被其他子类继承。
和java一样,Scala只支持单一继承,不支持多重继承,即子类只能有一个父类。使用extends关键字。
- 重载父类的抽象成员时,override是可选的,而重载父类的非抽象承欢时,override关键字是必选的。
- 只能重载val类型的字段,而不能重载var类型的字段。
scala类的层级结构。位于最顶层的是Any,最底层的是Null和Nothing,Nothing没有实例,主要用于异常处理函数返回的类型,
特质(trait)
Scala对java接口的概念进行了改进,使用“特质”来实现代码的多重复用,不仅实现了接口的功能,还具备很多其他的特性。Scala的特质是代码重用的基本单元,可以同时拥有抽象方法和具体方法。Scala一个类只能集成自一个超类,但可以混入多个特质,从而重用特之中的方法和字段,实现了多重继承。
trait Human{def xxx();var xxy:Intdef xyy(){xxc()}
}
特质定义好以后,就可以使用extends和with关键字,把它混入到类中。如果要混入多个特质,可以连续使用多个with。
1.4 函数式编程
函数可以像任何其他数据类型的值一样被产地和操作。函数的使用方式和其他数据类型的使用方式完全一致,可以将函数赋值给变量,也可以将函数作为参数传递给其他函数,还可以将函数作为其他函数的返回值。
Scala在架构上提倡上层采用面向对象编程,底层采用函数式编程。
REPL:“读取-求值-输出”循环(英语:Read-Eval-Print Loop,简称REPL)。
Scala编程(一)相关推荐
- 大数据Scala编程.问题集(02)
大数据Scala编程.问题集(02) by 高焕堂 洞庭国际智能硬件检测基地 & 中云大数据中心(IDC) 首席架构师 微博:@高焕堂_台北 Q-02: Scala语言的trait具有什么设计 ...
- scala编程_Scala编程语言简介
scala编程 Scala is a programming language that integrates the object oriented and functional language ...
- Hbase table CRUD操作及scala编程
Hbase shell操作 1) 插入数据:put只能插入一个单元格 指定 表名.行键.列名.列值.[时间戳] hbase(main):081:0> put 'ns3:emp','rk0001' ...
- spinal HDL - 01 - 环境搭建与Scala编程指南
写在前面 SpinalHDL这个语言,我是在了解了香山处理器Chisel才知道的,一直想用一用,SpinalHDL和Chisel师承一脉,都是基于Scala来进行电路描述.其本质上仍旧是HDL而非HL ...
- Scala编程——下界介绍与实例分析
最近又在重温Scala编程.上bilibili网站看了韩顺平老师在尚硅谷的Scala编程语言的教学视频.发现韩老师有关Scala下界的介绍与示例说明,讲解的不是很清晰.并认为可能会给一些学习Scala ...
- scala编程_Scala可以带回编程的喜悦吗?
scala编程 编程不再有趣. 这是开发人员Eric Allman在他最新的博客文章中声称的,他继续抱怨说,如今Java开发人员的许多工作包括单调地将库,集成框架,重构,测试和部署现有代码组成. 埃里 ...
- 【图文详细 】Scala——编程练习
6.Scala 编程练习 6.1.99 乘法表 package com.mazh.scala.funny object Table99 { def main(args: Array[String]) ...
- Scala编程基础——集合高阶函数
Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...
- Scala编程初级实践-统计学生成绩
Scala编程初级实践 统计学生成绩 学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号.性别.课程名1.课程名2等,后面每一行代表一个学生的信息,各字段之间用空白符隔开 Id gende ...
- Scala 编程基础 C(函数式编程)
文章目录 1. 函数定义和高阶函数 2. 针对集合的操作 3. 函数式编程实例:WordCount 1. 函数定义和高阶函数 Scala是一门多范式编程语言,混合了面向对象编程和函数式编程的风格.在过 ...
最新文章
- python创意编程比赛-报名了!2019年全国青少年创意编程与智能设计大赛报名开始了...
- 如何用auto_ptr做为函数的参数进行传递
- “高级”数据结构——树状数组
- SVN更新项目A C D M G U R I的含义
- Cloud一分钟 | 阿里云发布飞天2.0操作系统;京东云串联生态伙伴专治“看病难”...
- 双端堆c语言,数据结构——双端堆(C语言)
- Logistic分类函数
- Eclipse 使用常见问题汇总
- FPS游戏通用自瞄实现
- Windows命令行:将多个TS文件合并成MP4
- 自增约束(auto_increment)
- 正大国际期货:如何提升外盘恒指交易技巧?
- iText操作word
- 密西西比河谷州立大学:Android应用程序开发(四)
- Bellman——Ford算法
- 逍遥模拟器使用指南(三、连点 连击)
- apache带宽配置
- 【前端篇】火狐浏览器打开调试器,报“Error: Incorrect contents fetched, please reload.”
- android和MTKP60区别,联发科P60和骁龙625哪个好 骁龙625与联发科P60区别对比 (全文)...
- Excel管理项目步骤,用Excel制作甘特图和自动报表来推进项目进度太牛了!
热门文章
- Github已标星80,java语言自学教程
- 训练神经网络的常用方法之共轭梯度法
- 刚开始怎么做好项目管理?
- 鸿蒙系统是不是改名了,华为鸿蒙系统改名换姓了!新名字更有魅力,网友:不愧是爱国之人...
- solidworks开发语言php,Solidworks开发语言对比及分析
- mysql 人名用什么类型_MySQL 基础(二)
- 维基解密爆料CIA监控技术 科技公司如何接招
- OpenGL3.3透视矩阵原理计算
- 数据仓库---JPivot连接MySQL VS PostgreSQL
- 操作系统真象还原第3章:完善MBR