Scala入门系列(一):基础语法
Scala基础语法
Scala与JAVA的关系
Scala是基于Java虚拟机,也就是JVM的一门编程语言,所有Scala的代码都需要经过编译为字节码,然后交由Java虚拟机来运行。
所以Scala和JAVA是可以无缝互操作的,Scala可以任意调用Java的代码,这两种语言的关系事非常紧密的。
Scala解释器的使用
- REPL:Scala解释器也被称为REPL,会快速编译Scala代码为字节码,然后交给JVM来执行。
- 计算表达式:命令行内,键入Scala代码,解释器会直接返回结果给你(附带变量类型)。
- 内置变量:res0、res1
- 自动补全
声明变量
- val:常量,声明后不可改变其值
- var:变量,声明后可以修改值
建议使用val,因为在大型复杂的spark分布式系统中,需要大量的网络传输数据,使用var可能会担心值被错误的更改,所以val可以很大程度上增加大型复杂分布式系统的健壮性和安全性。
在JAVA大型复杂系统的研发中,也使用了类似的特性,我们通常会将传递给其他模块/ 组件/ 服务的对象,设计成不可变类(Immutable Class)。在里面也会使用java的常量定义,比如final,从而提高系统的鲁棒性和安全性。
- 指定变量类型: val name: String = null
- 声明多个变量:val name1, name2: String = null ; val num1, num2 = 100
数据类型与操作符
- 基本数据类型:Byte、Char、Short、Int、Long、Float、Double、Boolean, 咋一看与java的基本数据类型的包装类型相同,但是scala没有基本数据类型与包装类型的概念,统一都是类。scala会自己负责基本数据类型和引用数据类型的转化操作。
- 例如,Scale提供了RichInt、RichDouble、RichChar,RichInt就提供了to函数,1 to 10,此处int先隐式转换为RichInt,然后在调用其to函数。
- 基本操作符:与java类似
- 但是,在scala中,这些操作符其实是数据类型的函数,比如1+1, 可以写成 1.+(1)
- scala中没有提供++ 、--操作符。
函数调用与apply函数
函数调用方式:
scala> import scala.math._
import scala.math._
scala> sqrt(2)
res2: Double = 1.4142135623730951
scala> pow(2, 4)
res3: Double = 16.0
scala> min(3, Pi)
res4: Double = 3.0
scala> max(3, Pi)
res5: Double = 3.141592653589793
注:如果调用函数时不需要传递参数,那么scala允许省略括号。
apply函数:
- 在Scala的object中,可以声明apply函数。而使用“类名()"的形式,其实就是“类型.apply()”的一种缩写。通常使用这种方法来构造类对象,而不是new。
- 例如,"hello World"(6), 因为在StringOps类中有def apply(n:Int): Char的函数定义,所以实际上是"hello World".apply(6)的缩写。
- 例如,Array(1, 2, 3, 4)相当于Array.apply(1, 2, 3, 4)
lazy值
如果一个变量声明为lazy, 则只有第一次使用该变量时,变量对应的表达式才会发生计算。这种特性对于特别耗时的计算操作特别有用,比如打开文件进行IO,进行网络IO等。
scala> import scala.io.Source._
import scala.io.Source._
scala> lazy val lines = fromFile("D://test.txt").mkString
lines: String = <lazy>
即使文件不存在,也不会报错,只有第一次使用变量时会报错
异常处理
Scala中的异常处理与捕获机制与Java是非常相似的。
try{
throw new IllegalArgumentException("x should not be negative")
} catch {
case _: IllegalArgumentException => println("Illegal Argument!")
} finally {
print("release resources!")
}
// Exiting paste mode, now interpreting.
Illegal Argument!
release resources!
Scala入门系列(一):基础语法的更多相关文章
- 快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...
- [转]快速入门系列--WebAPI--01基础
本文转自:http://www.cnblogs.com/wanliwang01/p/aspnet_webapi_base01.html ASP.NET MVC和WebAPI已经是.NET Web部分的 ...
- C#快速入门笔记(1)——基础语法
C#快速入门笔记(1)——基础语法 总体框架:
- openresty开发系列15--lua基础语法4表table和运算符
openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表)Table 类型实现了一种抽象的"关联数组".即可用作数组,也 ...
- openresty开发系列14--lua基础语法3函数
openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...
- openresty开发系列13--lua基础语法2常用数据类型介绍
openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...
- 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现
075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...
- 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现
074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...
- 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现
073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...
- 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法
072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...
随机推荐
- 用ajax的同步请求解决登陆注册需要根据服务器返回数据判断是否能提交的问题
最近在写www.doubilaile.com的登陆注册.需要用ajax请求服务器判断用户名是否存在,用户名和密码是否匹配,进而提交数据.碰到的问题是异步请求都能成功返回数据,但是该数据不能作为紧接着的 ...
- CDN 机制
CDN的全称Content Delivery Network,(缩写:CDN)即内容分发网络. CDN是一个经策略性部署的整体系统,从技术上全面解决由于网络带宽小.用户访问量大.网点分布不均而产生的用 ...
- eclipse安装checkstyle无法加载到preferences的问题
描述一下问题,eclipse安装checkstyle,不管是在线安装还是下载安装,在preferences都没有checkstyle选项,如下: 然我们要的效果是这样的: 解决方案如下: 1 启动 ...
- Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方案
Eclipse Maven 开发一个 jee 项目时,编译时遇到以下错误:Description Resource Path Location TypeDynamic Web Module 3.0 r ...
- Linux常用配置讲解
本文主要讲解Linux的用户设置.主机名设置.网络配置.防火墙配置 用户传输包的命令lrzsz的安装以及SSH服务配置等基本操作. 1. 用户名设置 服务肯定是为了用户,而用户可能对于Linux并不了 ...
- [转]如何查询SQL Server连接数
1.获取SQL Server允许同时用户连接的最大数 SELECT @@MAX_CONNECTIONS 2.获取当前指定数据库的连接信息 SELECT * FROM master.dbo.syspro ...
- 转载:Allegro实用技巧之模块复用
http://bbs.ednchina.com/BLOG_ARTICLE_3031842.HTM?click_from=8800032437,9950148743,2016-01-04,EDNCOL, ...
- javaweb-1-B/S初论
一.B/S结构的基本概念 1.什么是动态网页 2.为什么需要动态网页 3.如何实现动态网页 4.为什么学习B/S技术 4.1C/S结构 优点: 1.C/S架构的界面和操作可以很丰富. 2.安全性能可以 ...
- Unity3D高性能战争迷雾实现
效果图 先上效果图吧,这是为了吸引到你们的ヽ(。◕‿◕。)ノ゚ 战争迷雾效果演示图 战争调试界面演示图 由于是gif录制,为了压缩图片,帧率有点低,实际运行时,参数调整好是不会像这样一卡一顿的. 战争 ...
- flex布局元素操作详情
之前布局一直用的是 position,float之类的,趁着国庆学习一下 flex 布局 父元素: flex-direction: row row-reverse column column-reve ...