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
  • 循环控制结构、
    • 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编程(一)相关推荐

  1. 大数据Scala编程.问题集(02)

    大数据Scala编程.问题集(02) by 高焕堂 洞庭国际智能硬件检测基地 & 中云大数据中心(IDC) 首席架构师 微博:@高焕堂_台北 Q-02: Scala语言的trait具有什么设计 ...

  2. scala编程_Scala编程语言简介

    scala编程 Scala is a programming language that integrates the object oriented and functional language ...

  3. Hbase table CRUD操作及scala编程

    Hbase shell操作 1) 插入数据:put只能插入一个单元格 指定 表名.行键.列名.列值.[时间戳] hbase(main):081:0> put 'ns3:emp','rk0001' ...

  4. spinal HDL - 01 - 环境搭建与Scala编程指南

    写在前面 SpinalHDL这个语言,我是在了解了香山处理器Chisel才知道的,一直想用一用,SpinalHDL和Chisel师承一脉,都是基于Scala来进行电路描述.其本质上仍旧是HDL而非HL ...

  5. Scala编程——下界介绍与实例分析

    最近又在重温Scala编程.上bilibili网站看了韩顺平老师在尚硅谷的Scala编程语言的教学视频.发现韩老师有关Scala下界的介绍与示例说明,讲解的不是很清晰.并认为可能会给一些学习Scala ...

  6. scala编程_Scala可以带回编程的喜悦吗?

    scala编程 编程不再有趣. 这是开发人员Eric Allman在他最新的博客文章中声称的,他继续抱怨说,如今Java开发人员的许多工作包括单调地将库,集成框架,重构,测试和部署现有代码组成. 埃里 ...

  7. 【图文详细 】Scala——编程练习

    6.Scala 编程练习 6.1.99 乘法表  package com.mazh.scala.funny object Table99 { def main(args: Array[String]) ...

  8. Scala编程基础——集合高阶函数

    Scala编程基础--集合&高阶函数 集合 Scala中集合分为可变集合和不可变集合 可变集合:可以修改.添加.移除一个集合的元素. 不可变集合:安全的并发访问. 不可变集合,相比之下,永远不 ...

  9. Scala编程初级实践-统计学生成绩

    Scala编程初级实践 统计学生成绩 学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号.性别.课程名1.课程名2等,后面每一行代表一个学生的信息,各字段之间用空白符隔开 Id gende ...

  10. Scala 编程基础 C(函数式编程)

    文章目录 1. 函数定义和高阶函数 2. 针对集合的操作 3. 函数式编程实例:WordCount 1. 函数定义和高阶函数 Scala是一门多范式编程语言,混合了面向对象编程和函数式编程的风格.在过 ...

最新文章

  1. python创意编程比赛-报名了!2019年全国青少年创意编程与智能设计大赛报名开始了...
  2. 如何用auto_ptr做为函数的参数进行传递
  3. “高级”数据结构——树状数组
  4. SVN更新项目A C D M G U R I的含义
  5. Cloud一分钟 | 阿里云发布飞天2.0操作系统;京东云串联生态伙伴专治“看病难”...
  6. 双端堆c语言,数据结构——双端堆(C语言)
  7. Logistic分类函数
  8. Eclipse 使用常见问题汇总
  9. FPS游戏通用自瞄实现
  10. Windows命令行:将多个TS文件合并成MP4
  11. 自增约束(auto_increment)
  12. 正大国际期货:如何提升外盘恒指交易技巧?
  13. iText操作word
  14. 密西西比河谷州立大学:Android应用程序开发(四)
  15. Bellman——Ford算法
  16. 逍遥模拟器使用指南(三、连点 连击)
  17. apache带宽配置
  18. 【前端篇】火狐浏览器打开调试器,报“Error: Incorrect contents fetched, please reload.”
  19. android和MTKP60区别,联发科P60和骁龙625哪个好 骁龙625与联发科P60区别对比 (全文)...
  20. Excel管理项目步骤,用Excel制作甘特图和自动报表来推进项目进度太牛了!

热门文章

  1. Github已标星80,java语言自学教程
  2. 训练神经网络的常用方法之共轭梯度法
  3. 刚开始怎么做好项目管理?
  4. 鸿蒙系统是不是改名了,华为鸿蒙系统改名换姓了!新名字更有魅力,网友:不愧是爱国之人...
  5. solidworks开发语言php,Solidworks开发语言对比及分析
  6. mysql 人名用什么类型_MySQL 基础(二)
  7. 维基解密爆料CIA监控技术 科技公司如何接招
  8. OpenGL3.3透视矩阵原理计算
  9. 数据仓库---JPivot连接MySQL VS PostgreSQL
  10. 操作系统真象还原第3章:完善MBR