Scala基础教程(二):数据类型、变量
基础语法
关于Scala程序,这是非常要注意以下几点。
· 区分大小写 - Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义。
· 类名 - 对于所有的类名的第一个字母要大写。
如果需要使用几个单词来构成一个类的名称,每个单词的第一个字母要大写。
示例:classMyFirstScalaClass
· 方法名称 - 所有的方法名称的第一个字母用小写。
如果若干单词被用于构成方法的名称,则每个单词的第一个字母应大写。
示例:defmyMethodName()
· 程序文件名 - 程序文件的名称应该与对象名称完全匹配。
保存文件时,应该保存它使用的对象名称(记住Scala是区分大小写),并追加“.scala”为文件扩展名。 (如果文件名和对象名称不匹配,程序将无法编译)。
示例: 假设“HelloWorld”是对象的名称。那么该文件应保存为'HelloWorld.scala“
· def main(args: Array[String]) - Scala程序从main()方法开始处理,这是每一个Scala程序的强制程序入口部分。
Scala修饰符:
所有的Scala的组件需要名称。使用对象,类,变量和方法名被称为标识符。关键字不能用作标识符和标识是区分大小写的。Scala支持以下四种类型标识符:
文字标识符
字母数字标识符开始以字母或下划线,可以使用字母,数字或下划线。“$”字符在Scala中是保留关键字,标识符不能使用。以下是合法的字母标识符:
age, salary, _value, __1_value
以下是非法标识符:
$salary, 123abc, -salary
运算符标识
运算符识别符由一个或多个运算符字符。操作字符是可打印的ASCII字符,如+, :, ?, ~ 或#。以下是合法的运算符标识:
+ ++ ::: <?> :>
Scala编译器将在内部“轧”操作符标识符使它们成为合法的Java标识符,并嵌入$字符。例如,所述标识符:->将内部表示为$colon$minus$greater。
混合标识符
混合标识符由一个字母数字识别符,随后是一个下划线和运算符标识。以下是合法的混合标识符:
unary_+, myvar_=
在这里,作为一个方法名unary_+定义了一个一元+运算符和myvar_=用来作为方法名称定义了一个赋值运算符。
立即数标识符
一个文字标识是包含在反引号(` . . . `)的任意字符串。以下是合法的文字标识:
`x` `<clinit>` `yield`
Scala关键字:
下面的列表显示在Scala中的保留字。这些保留关键字不可以被用作常量或变量,或任何其他的标识符名称。
abstract |
case |
catch |
class |
def |
do |
else |
extends |
false |
final |
finally |
for |
forSome |
if |
implicit |
import |
lazy |
match |
new |
null |
object |
override |
package |
private |
protected |
return |
sealed |
super |
this |
throw |
trait |
try |
true |
type |
val |
var |
while |
with |
yield |
|
- |
: |
= |
=> |
<- |
<: |
<% |
>: |
# |
@ |
Scala中的注释
Scala支持单行和多行注释非常类似于Java。多行注释可以嵌套,但必须正确嵌套。可用的任何注释和所有字符都将被Scala编译器忽略。
object HelloWorld {
/* This is my first java program.
* This will print 'Hello World' as the output
* This is an example of multi-line comments.
*/
def main(args: Array[String]) {
// Prints Hello World
// This is also an example of single line comment.
println("Hello, world!")
}
}
空行和空格:
仅包含空格,可能带有注释行,被称为一个空行,并且Scala将会完全忽略它。标记可以通过空格和/或注释分开。
换行符:
Scala是面向行的语言,语句可以用分号(;)结束或换行符。分号在声明的结尾通常是可选的。可以键入一个想要的,如果语句出现其本身在一行。在另一方面,如果写在一行多个语句分号是必需的:
val s = "hello"; println(s)
Scala包:
包是一个代码命名的模块。例如,Lift 实用包net.liftweb.util。包声明是在源文件中的第一个非注释行,如下所示:
package com.liftcode.stuff
Scala的包可以被导入,使他们能够在当前编译范围内被引用。下面的语句是导入scala.xml包的内容:
import scala.xml._
可以导入封装的类和对象,例如,从scala.collection.mutable导入HashMap:
import scala.collection.mutable.HashMap
可以从一个单一封装的scala.collection.immutable包导入多个类或对象,例如,TreeMap和TreeSet:
import scala.collection.immutable.{TreeMap, TreeSet}
Scala的数据类型全部相同于Java中,具有相同的内存占用和精度。以下表是有关可在Scala中所有的数据类型的细节:
数据类型 |
描述 |
Byte |
8位有符号值。范围从-128到127 |
Short |
16位有符号值。范围从-32768至32767 |
Int |
32 位有符号值。范围从 -2147483648 to 2147483647 |
Long |
64位有符号值。从-9223372036854775808到9223372036854775807 |
Float |
32位IEEE754单精度浮点数 |
Double |
64位IEEE754双精度浮点数 |
Char |
16位无符号Unicode字符。范围由U+0000至U+FFFF |
String |
字符序列 |
Boolean |
无论是字面true或false字面 |
Unit |
对应于没有值 |
Null |
空或空引用 |
Nothing |
每一个其他类型的子类型; 包括无值 |
Any |
Any类型的超类型;任何对象是任何类型 |
AnyRef |
任何引用类型的超类型 |
上面列出的所有的数据类型是对象。没有原始的类型,如Java中。这意味着可以调用int,long等上的方法
Scala基本字面值:
Scala中使用的文字规则是简单和直观的。这部分解释了所有Scala中的基本文字。
整数值
整数文字通常是int类型,或类型龙其次是L或l后缀的时候。下面是一些整数文字:
0
035
21
0xFFFFFFFF
0777L
浮点型
浮点文字是Float类型后跟一个浮点类型后缀F或f时,否则是Double类型。下面是一些浮点文字:
0.0
1e30f
3.14159f
1.0e100
.1
布尔类型
布尔字面值true和false是Boolean类型的成员。
符号字面值
符号常量'x是简写的表达scala.Symbol(“X”)。Symbol是一个类,它的定义如下。
package scala
final case class Symbol private (name: String) {
override def toString: String = "'" + name
}
字符
字符文字是用引号括起来的单个字符。该字符是一个可打印的Unicode字符或转义序列描述。这里有一些字符文字:
'a'
'u0041'
'
'
' '
字符串常量
字符串常量是在双引号中的字符序列。字符或者是可打印Unicode字符或转义序列描述。下面是一些字符串:
"Hello,
World!"
"This string contains a " character."
多行字符串
多行字符串是包含在三重引号“”字符序列“...”“”。字符序列是任意的,不同之处在于它可以包含三个或更多个连续引号字符仅在未尾。
字符未必是可打印;新的一行或其他控制字符也是允许的。这里是一个多行字符串:
"""the present string
spans three
lines."""
NULL值
null是scala.Null类型一个值,因此这个引用类型兼容。它表示参考值是指一种特殊的“空”的对象。
转义序列:
以下转义序列在字符和字符串。
转义序列 |
Unicode |
描述 |
u0008 |
退格BS |
|
u0009 |
水平制表符HT |
|
u000c |
换页FF |
|
f |
u000c |
换页FF |
u000d |
回车CR |
|
" |
u0022 |
双引用 " |
' |
u0027 |
单引用 . |
\ |
u005c |
反斜线 |
介于0和255字符使用Unicode也可以通过一个八进制转义,也就是说,一个反斜杠“”之后的最多三个八进制字符的序列表示。以下为例子来说明一些转义字符序列:
object Test {
def main(args: Array[String]) {
println("Hello World
" );
}
}
当上述代码被编译和执行时,它产生了以下结果:
Hello World
变量是只不过是保留内存位置来存储值。这意味着,当创建一个变量,会在内存中保留一些空间。
基于变量的数据类型,所述编译器分配存储器,并决定什么可以被存储在保留存储器。因此,通过分配不同的数据类型的变量,可以存储整数,小数,或字符在这些变量。
变量声明
Scala的变量声明有不同的语法,它们可以被定义为值,即,常量或变量。下面是使用var关键字来定义一个变量的语法:
var myVar : String = "Foo"
在这里,myVar使用关键字var声明。这意味着它是一个可以改变值的变量,被称为可变变量。下面是使用val关键字来定义变量的语法:
val myVal : String = "Foo"
这里,myVal是使用关键字val声明。这意味着,它是不能改变的变量,这是所谓的不可变变量。
变量数据类型:
变量类型在变量名后面指定,前在equals之前签署。可以通过它的数据类型定义任何类型的Scala变量如下:
val or val VariableName : DataType [= Initial Value]
如果不指定任何初始值变量,那么如下所示它是有效的:
var myVar :Int;
val myVal :String;
变量类型推断:
当分配一个初始值给一个变量,Scala编译器可以计算出根据分配给它的值的变量类型。这就是所谓的变量类型推断。因此,可以写这些变量的声明如下这样:
var myVar = 10;
val myVal = "Hello, Scala!";
在这里,默认情况下,myVar是int类型,将设为myVal为字符串类型变量。
多重任务:
Scala支持多任务。如果一个代码块或方法返回一个元组,该元组可被分配给一个val变量。 [注:元组在以后的章节中学习。]
val (myVar1: Int, myVar2: String) = Pair(40, "Foo")
类型推断得到正确类型:
val (myVar1, myVar2) = Pair(40, "Foo")
变量类型:
Scala变量可以有三种不同的范围,这取决于它们正在使用的地方。它们可以存在于字段,方法参数和局部变量。下面是关于每种类型的适用范围的详细信息:
字段:
字段是属于一个对象的变量。该字段是从对象中的所有方法中访问。字段也可以是具体取决于访问修饰符字段与声明的对象外访问。对象字段既可以是可变的或不可变的类型,可以使用var 或 val两种定义。
方法参数:
方法的参数是变量,其用于传递方法内的值在方法被调用时。方法参数被从方法唯一传入,但传递的对象可从外面,如果从外面的方法有一个引用对象。方法参数始终是可变的并由val关键字定义。
局部变量:
局部变量是在方法内声明的变量。局部变量只能在方法中访问,但可以访问创建方法的对象(如果从方法中返回它们)。局部变量既可以是可变的或不可变的类型,可以使用var或val两个关键字定义。
from: http://www.yiibai.com/scala/scala_basic_syntax.html
Scala基础教程(二):数据类型、变量相关推荐
- Scala基础教程--18--集合(二)
Scala基础教程–18–集合(二) 章节目标 掌握Iterable集合相关内容. 掌握Seq集合相关内容. 掌握Set集合相关内容. 掌握Map集合相关内容. 掌握统计字符个数案例. 1. Iter ...
- Scala基础教程--10--数组列表与函数式编程
Scala基础教程–10–数组列表与函数式编程 章节目标 掌握数组, 元组相关知识点 掌握列表, 集, 映射相关知识点 了解迭代器的用法 掌握函数式编程相关知识点 掌握学生成绩单案例 1. 数组 1. ...
- Scala基础教程--06--类与对象的详解
Scala基础教程–06–类与对象的详解 章节目标 掌握类和对象的定义 掌握访问修饰符和构造器的用法 掌握main方法的实现形式 掌握伴生对象的使用 掌握定义工具类的案例 1. 类和对象 Scala是 ...
- numeric scale mysql_MySQL基础教程1 — 数据类型之数值类型 - numeric
...if (!$dateTimeString) { $dateTimeString = time(); } $numeric = ''; $add_space = false; for($i=0;$ ...
- Scala基础教程(一):简介、环境安装
Scala基础语法 如果有很好的了解Java语言,那么将很容易学习Scala. Scala和Java间的最大语法的区别在于;行结束符是可选的.考虑Scala程序它可以被定义为通过调用彼此方法进行通信的 ...
- Scala基础教程(六):字符串、数组、集合
创建字符串: 最直接的方法来创建一个字符串的编写方法是: var greeting = "Hello world!"; or var greeting:String = " ...
- Scala基础教程(五):函数、闭包
函数是一组一起执行任务的语句.可以将代码放到独立的功能.如何划分你的代码不同功能之间,但在逻辑上,划分通常是让每个函数执行特定的任务. Scala有函数和方法,我们术语说的方法和函数互换用微小的差别. ...
- Directx11基础教程二之Directx11初始化
一,看本节教程前应该掌握: (1)掌握 D3D11基础教程一之D3D11框架 二,程序的结构如下: 具体在VS2015的代码: 三,程序的具体代码如下: 好的,下面D3D11的初始化我分为十二个步骤 ...
- pythontuple数据类型_Python基础教程2d–数据类型-tuple(元组)
1定义 tuple(元组)也是一种顺序结构的数据类型,定义一个空元组的方法用英文小括号: 变量名=() t = () 定义一个包含了多个元素的元组在小括号中用逗号分隔开各个元素: 源码print('\ ...
最新文章
- 【Windows 逆向】OD 调试器工具 ( CE 工具通过查找访问的方式找到子弹数据基地址 | 使用 OD 工具附加游戏进程 | 在 OD 工具中查看 05869544 地址数据 | 仅做参考 )
- SAP SM12 解锁Lock Table
- 山东工业职业学院计算机老师田彦,学院举办2019年第二期新教师岗前培训班
- 【Linux系统编程】进程间通信--消息队列
- 最全三大框架整合(使用映射)——Dept.hbm.xml
- Java状态和策略设计模式之间的差异
- mysqldatadir 转移
- TiDB 部署及数据同步
- 爬虫python区别_Python爬虫-04:贴吧爬虫以及GET和POST的区别
- html 文章阅读次数,关于浏览次数和浏览次数缓存的问题
- java输入一串字符串反转_反转Java中的字符串
- phpstorm的安装和破解
- 还原 对于 服务器“DESKTOP-BNNIISU\SQLEXPRESS”失败。 (Microsoft.SqlServer.SmoExtended)
- 单片机学习笔记(五)
- 腾讯云即时通讯IM前端使用步骤简述
- 敏捷-《如何准备ACP考试》知识图谱
- 基于实物的智能化仓储管理-InStock
- 数模国赛备赛(5)论文写作与提交注意事项
- 身份证号码验证——C语小程序言
- 开源机器人库orocos KDL 学习笔记(四):Forward Kinematric
热门文章
- Spring JDBC-NamedParameterJdbcTemplate模板类
- 修改centos等linux的hostname-永久生效
- java高效率素数算法_《Core Java》里给出的算法,效率比较高。 统计2000000以内的所有的素数。...
- php微信分享时好时坏,手机端微信分享前几天都是正常的今天发现分享出去就不正常了设置,迅睿CMS,CodeIgniter技术文档,PHP开发文档,迅睿CMS框架官方教程...
- TypeScript学习笔记3:运算符
- Matlab实用程序--图形应用-填充图
- 2020-12-09 深度学习 卷积神经网络中感受野的详细介绍
- Python OpenCV 图片拆分与拼接
- Python面向对象---类的基本使用
- bose耳机信号断续_挥汗如雨的夏季将至,5款运动型蓝牙耳机安利给你