【Scala】Scala语言基础(IDEA创建项目、基本数据类型、range、键盘输入语句)
文章目录
- 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的不变量,主要原因是:
- val的不可变有助于清理头绪,但是相对的会付出一部分性能代价
- 使用var,可能会担心值被错误的更改
- 使用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、键盘输入语句)相关推荐
- [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题
作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了Go的编译运行 ...
- C语言编程>第二十二周 ④ 从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组
例题:从键盘输入一组小写字母,保存在字符数组str中,请补充fun函数,该函数的功能是:把字符数组str中字符下标为偶数的小写字母转换成对应的大写字母,结果仍保存在原数组中. 例如,输入 " ...
- C语言,标识符和关键字,以及键盘输入语句
文章目录 标识符的命名规则和规范 标识符概念 标识符的命名规则 标识符命名规范 关键字 键盘输入语句 介绍 步骤 : 案例演示: 课后练习题 标识符的命名规则和规范 标识符概念 1)C 语言 对各种变 ...
- 重温C语言六:标识符与键盘输入语句
文章目录 一.标识符 1.标识符概念 2.标识符的命名规则 3.判断下列标识符 4.标识符命名规范 5.关键字 二.键盘输入语句 1.介绍 2.步骤: 练习: 一.标识符 1.标识符概念 1)C语言对 ...
- c++ 读文件_C语言处理文件基础知识:文件、流和键盘输入
文件是一块存储信息的存储器区域,可能这样说很多同学不理解,通俗来说,就是在磁盘上划分一块区域用于存放特定的数据,比如文本数据就是文本文件,音频数据就是音频文件.当然,文件夹也是一个特殊的文件.通常,文 ...
- 一篇文章带你玩转C语言基础语法。2:数据类型。千字总结
我的个人主页:☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主 欢迎各位
- c语言基础学习12_项目实战:快译通字典
============================================================================= ====================== ...
- c语言基础学习11_项目实战:IDE(集成开发环境)
============================================================================= ====================== ...
- R语言基础知识(1)-数据类型及其常用方法
转载请注明出处:https://blog.csdn.net/xiezhiliang22 1 R语言数据类型 总体的数据类型分为4类,数据框,列表,矩阵,数组. 2 数据框 构造数据框 x <- ...
最新文章
- Jmeter中中文乱码
- mysql教程为什么很多都用dos_在dos操作mysql基础教程详解
- 苹果css攻击,研究人员设计了一种新的CSS和HTML攻击 导致iPhone重启或冻结Mac
- 第1章 数据可视化概述
- sublime 设置自动更新_Win10关闭自动更新的三种方法
- CAD软件下载,打版,服装CAD设计软件
- Win10 虚拟机安装 Windows xp(professional sp3)简记(非教学)
- 【数据库技术与应用】Part01——数据库系统概述
- 老电脑 xp 和深度linux的哪个更快,深度系统和雨林木风xp系统哪个好
- 【Multisim仿真】74LS193+74LS138流水灯
- 20182319彭淼迪第一周学习总结
- Python3.7+tkinter实现身高计算器
- 移动端适配之一:到底什么是像素
- 高通骁龙芯片的随身wifi入门刷机教程
- 微前端系列讲解--应用集成方案(qiankun+umi+vue)
- 计算机应用基础心得体会300字,网络远程学习的心得体会
- python3格式化输出
- linux搭建泰拉瑞亚(Terraria)服务器
- Unix、x86左右互搏 惠普“龙跃”乃“缓兵之计”?
- 如何快速写一个脚本文件
热门文章
- 智能家居齐发力:鸿蒙专攻系统、海尔智家专注入户、小米侧重连接
- GRE over IPsec VPN配置
- ACS600变频器晶闸管供电部分用户手册
- 海洋石油工程项目数字化建设方案
- 计算机副教授要求,浙江大学计算机学院2011年副教授职务任职条件.doc
- 魔鬼经济学---趣记
- sparksql查询hive表报错:codec com.hadoop.compression.lzo.LzoCodec not found 问题探究
- 一部面包车创业项目,流动小生意投资一万元创业日入800元
- 妈!他还没回来,一定有别的女人了!
- 世界杯四分之一决赛手记 - Part 2