文章目录

  • 1 简介
  • 2 特点
  • 3 函数式编程
  • 3 为什么要学习Scala
  • 4 第一个程序
  • 5 使用IDEA创建Scala项目
  • 6 Scala的变量
    • 6.1 var变量
    • 6.2 val变量(推荐)
  • 7 Scala的基本数据类型与操作
    • 7.1 数据类型
    • 7.2 操作符
  • 8 range
  • 9 键盘输入语句

1 简介

  • Scala是一门多范式的编程语言
  • Scala运行在Java虚拟机上,并兼容现有的Java程序
  • Scala源代码被编译成Java字节码,所以它可以运行在JVM之上,并可以调用现有的Java类库
  • Scala函数式编程更适合用于Map/Reduce和大数据模型,它摒弃了数据与状态的计算,着眼于函数本身
  • Spark、Flink等都是采用Scala开发的

2 特点

Scala运行在Java虚拟机之上,轻松实现和丰富的Java类库互联互通,既支持面向对象的编程方式,又支持函数式编程,属于静态语言(但是像动态语言一样简介)

总结起来,Scala具有4个核心特点:

  • OOP v.s. OFP:面向对象和函数式
  • Static Type:静态类型
  • Expansibility:扩展性
  • Concurrency:并发性

3 函数式编程

1、特点

  • 函数是一等公民
  • 以表达式为中心
  • 无副作用
  • 不修改状态
  • 引用透明

2、 优势

  • 代码简洁,开发速度快
  • 接近自然语言,易于理解
  • 易于代码管理
  • 适合并发编程
  • 适用于热开发

3、 总结

纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数只要输入确定,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数的内部变量状态不确定,同样的输入可能得到不同的输出,这种函数是有副作用的

3 为什么要学习Scala

1、API优雅

2、速度快:Scala语言表达能力强,开发速度快;Scala是静态编译的,和JRuby和Groovy比起来速度快很多

3、能融合到Hadoop生态圈:Spark不能够替代Hadoop,但是可以完善Hadoop生态,但是Java做出来的API太丑

4 第一个程序

//1、object表示一个伴生对象,简单理解为一个对象
//2、a就是对象的名字,它底层真正对应的类名是a$
//   对象是a$类型的一个静态对象MODULE$
//3、当我们编写一个object对象时,在底层会生成两个.class文件,分别为a和a$
object a {//4、def表示一个方法,是一个关键字
//5、main表示方法名称
//6、args: Array[String]表示形参,scala的特点是参数名在前面,类型在后面
//7、Array[String]表示类型是一个数组
//8、: Unit=表示该函数的返回值为空def main(args: Array[String]): Unit = {print("hello world!");}
}

Scala在运行时的流程如下:

  • 先从 a 的 main 开始执行
  • 然后调用 a$ 类的方法 a$ .MODULE$.main
  • 即执行了下面的代码
public void main(String[]args){Predef..MODULE$.print("hello world!");}

5 使用IDEA创建Scala项目

1、创建一个普通的maven项目

2、在main目录下创建一个scala目录,并标记为source root目录

3、加入scala框架(第一次配置选择configure,选择本机的scala目录)


4、选择创建scala项目(选择object)

6 Scala的变量

6.1 var变量

我们在Scala解释器输入var i发现它能够自己识别变量的类型

var变量是可以改变的

完整定义格式:var index1 : Int=1

6.2 val变量(推荐)

val变量是不可变的,相当于java中的常量

例如:

var变量是不好的存在,在Scala中尽可能使用val的不变量,主要原因是:

  1. val的不可变有助于清理头绪,但是相对的会付出一部分性能代价
  2. 使用var,可能会担心值被错误的更改
  3. 使用val而不是var的第二点好处是他能更好支持等效推论

7 Scala的基本数据类型与操作

7.1 数据类型

Scala拥有和java一样的数据类型,和java的数据类型内存布局、精度完全一致

  • Byte、Char、Short、Int、Long、Float、Double和Boolean。
  • Unit:表示无值,与void相同
  • Null:表示空值或空引用,可以赋值给任意引用类型(AnyRef),但是不能赋值给值类型(如:Int、Float、Char、Boolean等)
  • Nothing:最底端,表示没有值
  • Any:表示所有类型的超类,任何实例都属于Any类型
    例如:person p = new person();any是new person()的超类
  • AnyRef:表示所有类型的超类

在Scala中,这些类型都是“类”,并且都是包“scala”的成员,比如,Int的全名是scala.Int。对于字符串,Scala用java.lang.String类来表示字符串。

例如:

7.2 操作符

在Scala中,可以使用加(+)、减(-) 、乘(*) 、除(/) 、余数(%)等操作符,而且,这些操作符就是方法。例如,5 + 3和(5).+(3)是等价的,也就是说:

a 方法 b
a.方法(b)

需要注意的是和Java不同,在Scala中并没有提供++和–操作符,当需要递增和递减时,可以采用如下方式表达:

scala> var i = 5;
i: Int = 5
scala> i += 1  //将i递增
scala> println(i)
6

8 range

在执行for循环时,我们经常会用到数值序列,比如,i的值从1循环到5,这时就可以采用Range来实现。

在创建Range时,需要给出区间的起点和终点以及步长(默认步长为1)。下面通过几个实例来介绍:

1、创建一个从1到5的数值序列,包含区间终点5,步长为1

scala> 1 to 5
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)

之前我们已经介绍过,在Scala中允许对“字面量”直接执行方法,所以,上面的代码,也可以用下面的代码来实现:

scala> 1.to(5)
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)

2、创建一个从1到5的数值序列,不包含区间终点5,步长为1

scala> 1 until 5
res1: scala.collection.immutable.Range = Range(1, 2, 3, 4)

3、创建一个从1到10的数值序列,包含区间终点10,步长为2

scala> 1 to 10 by 2
res2: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)

9 键盘输入语句

例子:从控制台接收用户信息(姓名,年龄,薪水)

import scala.io.StdInobject TestScala {def main(args: Array[String]): Unit = {println("请输入姓名")val name = StdIn.readLine()println("请输入年龄")val age = StdIn.readInt()println("请输入薪水")val sal = StdIn.readDouble()printf("name=%s age=%d sal=%f",name,age,sal)}
}

【Scala】Scala语言基础(IDEA创建项目、基本数据类型、range、键盘输入语句)相关推荐

  1. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...

  2. C语言编程>第二十二周 ④ 从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组

    例题:从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组中. 例如,输入 " ...

  3. C语言,标识符和关键字,以及键盘输入语句

    文章目录 标识符的命名规则和规范 标识符概念 标识符的命名规则 标识符命名规范 关键字 键盘输入语句 介绍 步骤 : 案例演示: 课后练习题 标识符的命名规则和规范 标识符概念 1)C 语言 对各种变 ...

  4. 重温C语言六:标识符与键盘输入语句

    文章目录 一.标识符 1.标识符概念 2.标识符的命名规则 3.判断下列标识符 4.标识符命名规范 5.关键字 二.键盘输入语句 1.介绍 2.步骤: 练习: 一.标识符 1.标识符概念 1)C语言对 ...

  5. c++ 读文件_C语言处理文件基础知识:文件、流和键盘输入

    文件是一块存储信息的存储器区域,可能这样说很多同学不理解,通俗来说,就是在磁盘上划分一块区域用于存放特定的数据,比如文本数据就是文本文件,音频数据就是音频文件.当然,文件夹也是一个特殊的文件.通常,文 ...

  6. 一篇文章带你玩转C语言基础语法。2:数据类型。千字总结

    我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位

  7. c语言基础学习12_项目实战:快译通字典

    ============================================================================= ====================== ...

  8. c语言基础学习11_项目实战:IDE(集成开发环境)

    ============================================================================= ====================== ...

  9. R语言基础知识(1)-数据类型及其常用方法

    转载请注明出处:https://blog.csdn.net/xiezhiliang22 1 R语言数据类型 总体的数据类型分为4类,数据框,列表,矩阵,数组. 2 数据框 构造数据框 x <- ...

最新文章

  1. Jmeter中中文乱码
  2. mysql教程为什么很多都用dos_在dos操作mysql基础教程详解
  3. 苹果css攻击,研究人员设计了一种新的CSS和HTML攻击 导致iPhone重启或冻结Mac
  4. 第1章 数据可视化概述
  5. sublime 设置自动更新_Win10关闭自动更新的三种方法
  6. CAD软件下载,打版,服装CAD设计软件
  7. Win10 虚拟机安装 Windows xp(professional sp3)简记(非教学)
  8. 【数据库技术与应用】Part01——数据库系统概述
  9. 老电脑 xp 和深度linux的哪个更快,深度系统和雨林木风xp系统哪个好
  10. 【Multisim仿真】74LS193+74LS138流水灯
  11. 20182319彭淼迪第一周学习总结
  12. Python3.7+tkinter实现身高计算器
  13. 移动端适配之一:到底什么是像素
  14. 高通骁龙芯片的随身wifi入门刷机教程
  15. 微前端系列讲解--应用集成方案(qiankun+umi+vue)
  16. 计算机应用基础心得体会300字,网络远程学习的心得体会
  17. python3格式化输出
  18. linux搭建泰拉瑞亚(Terraria)服务器
  19. Unix、x86左右互搏 惠普“龙跃”乃“缓兵之计”?
  20. 如何快速写一个脚本文件

热门文章

  1. 智能家居齐发力:鸿蒙专攻系统、海尔智家专注入户、小米侧重连接
  2. GRE over IPsec VPN配置
  3. ACS600变频器晶闸管供电部分用户手册
  4. 海洋石油工程项目数字化建设方案
  5. 计算机副教授要求,浙江大学计算机学院2011年副教授职务任职条件.doc
  6. 魔鬼经济学---趣记
  7. sparksql查询hive表报错:codec com.hadoop.compression.lzo.LzoCodec not found 问题探究
  8. 一部面包车创业项目,流动小生意投资一万元创业日入800元
  9. 妈!他还没回来,一定有别的女人了!
  10. 世界杯四分之一决赛手记 - Part 2