【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
- 即执行了下面的代码
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的不变量,主要原因是:
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) 68 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、键盘输入语句)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Sharding-Sphere 3.X今
- 下一篇: scala语言命名规范