基本语法

声明值和变量

Scala有两种类型的变量:

  • val:是不可变的(变量的引用不可变),在声明时就必须被初始化,而且初始化以后就不能再赋值;

  • var:声明的时候需要进行初始化,初始化以还可以再对其赋值

1. scala> val str = "hello world"
  str: String = hello world
2. scala> val str2 : String = "hello world"
  str2: String = hello world
3. scala> val str3:java.lang.String = "hello world"
  str3: String = hello world
scala> import java.lang._ //导入Java.lang包里面所有的东西
import java.lang._
scala> println(str)
hello world
scala> str = "hello world"
<console>:8: error: reassignment to val
      str = "hello world"
          ^
scala> var price = 6.3
price: Double = 6.3
scala> price = 9.9
price: Double = 9.9
scala> 2*9+4
res0: Int = 22

基本数据类型和操作

  • Scala的数据类型包括:Byte、Char、Short、Int、Long、Float、Double和 Boolean

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

值类型 描述
Byte 8位有符号补码整数, 数值区间为 -128 到 127
Short 16位有符号补码整数。数值区间为 -32768 到 32767
Int 32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float 32 位, IEEE 754标准的单精度浮点数
Double 32 位 IEEE 754标准的单精度浮点数
Char 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String 字符序列
Boolean true或false
  • 字面量(literal)

scala> val i = 123
i: Int = 123
scala> val i = 3.12
i: Double = 3.12
scala> val i = 12l
i: Long = 12
scala> val i = 2.1f
i: Float = 2.1
scala> val i = 'a'
i: Char = a
scala> val i = "hello"
i: String = hello
操作符
  • 在Scala中,可以使用加(+)、减(-) 、乘(*) 、除(/) 、余数(%)等操作 符,而且,这些操作符就是方法。

  • 例如:5 + 3和(5).+(3)是等价的

scala> val sum = 5 + 3
sum: Int = 8
scala> val sum = (5).+(3)
sum: Int = 8
  • 和Java不同,在Scala中并没有提供++和--操作符,当需要递增和递减时,可以 采用如下方式表达:

scala> var i = 8
i: Int = 8
scala> i += 1
scala> print(i)
9
富包装类
  • 对于基本数据类型,除了以上提到的各种操作符外,Scala 还提供了许多常用运算的方法,只是这些方法不是在基本类 里面定义,还是被封装到一个对应的富包装类中

  • 每个基本类型都有一个对应的富包装类,例如Int有一个 RichInt类、String有一个RichString类,这些类位于包 scala.runtime中

  • 当对一个基本数据类型的对象调用其富包装类提供的方法, Scala会自动通过隐式转换将该对象转换为对应的富包装类 型,然后再调用相应的方法。例如:3 max 5

Range

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

  • Range可以支持创建不同数据类型的数值序列,包括Int、 Long、Float、Double、Char、BigInt和BigDecimal等

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

scala> 1 to 5
res4: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)
scala> 1.to(5)
res7: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)
  • 创建一个从1到5的数值序列,不包含区间终点5,步长为1

scala> 1 until 5
res8: scala.collection.immutable.Range = Range(1, 2, 3, 4)
  • 创建一个从1到10的数值序列,包含区间终点10,步长为2

scala> 1 to 10 by 2
res9: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
  • 创建一个Float类型的数值序列,从0.5f到5.9f,步长为0.3f

scala> 0.5f to 5.9f by 0.8f
res10: scala.collection.immutable.NumericRange[Float] = NumericRange(0.5, 1.3, 2.1, 2.8999999, 3.6999998, 4.5, 5.3)

控制台输入输出语句

  • 为了从控制台读写数据,可以使用以read为前缀的方法, 包括:readInt、readDouble、readByte、readShort、 readFloat、readLong、readChar readBoolean及 readLine,分别对应9种基本数据类型,其中前8种方法没 有参数,readLine可以不提供参数,也可以带一个字符串 参数的提示

  • 所有这些函数都属于对象scala.io.StdIn的方法,使用前 必须导入,或者直接用全称进行调用

scala> import io.StdIn._
import io.StdIn._
scala> var i = readInt()
67
i: Int = 67
scala> var i = readFloat()
6
i: Float = 6.0
scala> var i = readBoolean()
false
i: Boolean = false
scala> var str = readLine("please input your name:")
please input your name:
please input your name:str: String = xiao bo
  • 为了向控制台输出信息,常用的两个函数是print()和println(), 可以直接输出字符串或者其它数据类型

  • Scala还带有C语言风格的格式化字符串的printf()函数

scala> val a = 25
a: Int = 25
scala> val f = 53.0
f: Double = 53.0
scala> printf("my name is %s. I am %d years old and %.1f Kg.\n" , "xiao bo" , a , f)
my name is xiao bo. I am 25 years old and 53.0 Kg.
  • print()、println()和printf() 都在对象Predef中定义,该对象默 认情况下被所有Scala程序引用,因此可以直接使用Predef 对象提供的方法,而无需使用scala.Predef.的形式。

读写文件

  • Scala需要使用java.io.PrintWriter实现把数据写入到文件

scala> import java.io.PrintWriter
import java.io.PrintWriter
scala> val out = new PrintWriter("output.txt")
out: java.io.PrintWriter = java.io.PrintWriter@3db663d0
scala> for (i <- 1 to 5) out.println(i)
scala> out.close
  • 如果我们想把文件保存到一个指定的目录下,就需要给出文件路径

val out = new PrintWriter("/usr/local/scala/output.txt")
  • 可以使用Scala.io.Source的getLines方法实现对文件中所 有行的读取

scala> import scala.io.Source
import scala.io.Source
scala> val input = Source.fromFile("output.txt")
input: scala.io.BufferedSource = non-empty iterator
scala> val lines = input.getLines
lines: Iterator[String] = non-empty iterator
scala> for (line <- lines) println(line)
1
2
3
4
5

异常处理

  • Scala不支持Java中的“受检查异常”(checked exception), 将所有异常都当作“不受检异常”(或称为运行时异常)

  • Scala仍使用try-catch结构来捕获异常

Scala_基本语法的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  3. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  4. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性

    回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性 序 目前最新的版本是 C# 7.0,VS 的最新版本为 Visual Studio 2017 RC,两者都尚未进入正式阶段.C# 6.0 ...

  5. Velocity初探小结--velocity使用语法详解

    做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...

  6. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  7. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  8. 值得注意的ibatis动态sql语法格式

    一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...

  9. Flex 布局教程:语法篇

    作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...

随机推荐

  1. win10安装.net3.5

    近日有网友反映在windows10_64位系统电脑上安装Net framework3.5,操作时总失败,怎么办呢?小编下面就介绍win10 64位系统无法安装Net framework3.5的两种解决 ...

  2. BZOJ1088或洛谷2327 [SCOI2005]扫雷

    BZOJ原题链接 洛谷原题链接 很容易发现答案就只有\(0,1,2\)三种答案,而且只要知道第一个格子是否有雷就可以直接顺推下去了. 所以我们跑一次首位有雷,跑一次首位无雷判断是否可行即可. #inc ...

  3. Linux网络端口命名规则,一致性网络设备命名

    参考文档: https://www.cnblogs.com/pipci/p/9229571.html 一致性网络设备命名,即Consistent Network Device Naming. 一.服务 ...

  4. jQuery操作(二)

    一: 操作元素 1. 属性操作 1.1 $("p").text() $("p").html() $(":checkbox").val() 1 ...

  5. ark是什么

    https://github.com/QuadHex/ARK/releases 0.8.0版本网络使用evpp 调用 https://www.jianshu.com/p/9f09928829ba

  6. Java运行环境eclipse配置环境变量 sql server登录时用的账户以及注册码

    2019/1/18 13:44:53a:右键点击计算机  →  选择属性  →  更改设置  →  点击高级  →  点击环境变量  →  创建名为JAVA_HOME的环境变量  →  将jdk所在的 ...

  7. activemq , redis

    activemq是干什么的?即时消息通信,简单说: A发送消息给activemq 服务,B监听服务获取消息.假如有如下场景: A发送了一个请求,但是这个请求需要做 10 项工作,如果按照正常操作,需要 ...

  8. SpringBoot中文乱码解决方案

    转载:https://blog.csdn.net/wangshuang1631/article/details/70753801 方法一,修改application.properties文件 增加如下 ...

  9. 2019.02.09 bzoj2839: 集合计数(容斥原理)

    传送门 题意简述:对于一个有N个元素的集合在其2^N个子集中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数. 思路:考虑枚举相交的是哪kkk个,有CnkC_n^kCnk​种方案 ...

  10. 2019.01.26 codeforces 528D. Fuzzy Search(fft)

    传送门 fftfftfft好题. 题意简述:给两个字符串s,ts,ts,t,问ttt在sss中出现了几次,字符串只由A,T,C,GA,T,C,GA,T,C,G构成. 两个字符匹配的定义: 当si−k, ...