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入门系列(一):基础语法的更多相关文章

  1. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  2. [转]快速入门系列--WebAPI--01基础

    本文转自:http://www.cnblogs.com/wanliwang01/p/aspnet_webapi_base01.html ASP.NET MVC和WebAPI已经是.NET Web部分的 ...

  3. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

  4. openresty开发系列15--lua基础语法4表table和运算符

    openresty开发系列15--lua基础语法4表table和运算符 lua中的表table 一)table (表)Table 类型实现了一种抽象的"关联数组".即可用作数组,也 ...

  5. openresty开发系列14--lua基础语法3函数

    openresty开发系列14--lua基础语法3函数 一)function (函数) 有名函数: optional_function_scope function function_name( ar ...

  6. openresty开发系列13--lua基础语法2常用数据类型介绍

    openresty开发系列13--lua基础语法2常用数据类型介绍 一)boolean(布尔)布尔类型,可选值 true/false: Lua 中 nil 和 false 为"假" ...

  7. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  8. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

  9. 073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现

    073 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 05 综合案例-数组移位-主方法功能1和2的实现 本文知识点:综合案例-数组移位-主方法功能1和2的实现 说 ...

  10. 072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法

    072 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 04 综合案例-数组移位-在指定位置处插入数据方法 本文知识点:综合案例-数组移位-在指定位置处插入数据方法 ...

随机推荐

  1. sublime text3 开发必备插件

    1,Package Control 通俗易懂地说,这个是你在完成安装SublimeText后必须安装的东西.你问为什么?因为有了这个特殊的"插件包",你可以很容易地安装.升级.删除 ...

  2. Maven 设置Maven源/镜像

    在Eclipse/ InteliJ Idea使用Maven时,企业提供的本地仓库经常有些Jar包下载不下来,所以.配置Maven设置国内镜像对开发人员来说是必不可少的.今天写一篇自己配制的Maven镜 ...

  3. poj 2345 Central heating

    Central heating Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 678   Accepted: 310 Des ...

  4. 【Aladdin Unity3D Shader编程】之一 基本入门

    OpenGL.DirectX以及GLSL.HLSL.CG OpenGL和DirectX是图像应用编程接口,用于渲染二维或者三维图形. GLSL着色语言是用来在OpenGL中着色编程的语言,有点在于跨平 ...

  5. 自建梯子教程:vultr+ssr+SwitchyOmega

    1 综述 在饱受蓝灯挂掉之苦半个月后,终于决定自己搭建VPS服务器FQ了.虽然网上VPS服务器教程很多,但是我按照那些教程弄好VPS服务器总是不稳定,用着用着就不能用了.这应该是这次GFW升级带来的后 ...

  6. 【框架学习与探究之日志组件--Log4Net与NLog】

    前言 本文欢迎转载,作者原创地址:http://www.cnblogs.com/DjlNet/p/7604340.html 序 近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依 ...

  7. TOMCAT启动到一半停止如何解决

    当你的项目过大的时候,往往会导致你的TOMCAT启动时间过长,启动失败,遇到该情况可以试一下下面两招: TOmcat启动到一半的时候停止了,以下原因: 1.  tomcat启动时间超过了设置时间: 解 ...

  8. 几种常用的ajax 跨域请求

      前 言 首先,我们要明白,什么是跨域,为什么要跨域. 由于JS中存在同源策略.当请求不同协议名不同端口号下面的文件时,将会违背同源策略,无法请求成功!需要进行跨域处理! 这篇文章就为大家详细介绍一 ...

  9. 使用git命令将本地项目上传到Gitlab上

    1.首先需要安装本地需要安装git 2.在gitlab上创建项目, 如下图, 点击右上角加号到项目创建页面, 填写项目名称, 选择项目访问权限, private为授权的组员才能访问. 3.打开项目源代 ...

  10. Mac上编译并运行Android5.0源码

    下载.配置环境.build和运行参考的都是Android Source提供的文档,包括:Initializing a Build Environment,Downloading the Source和 ...