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位有符号值。范围从-128127

Short

16位有符号值。范围从-3276832767

Int

32 位有符号值。范围从 -2147483648 to 2147483647

Long

64位有符号值。-92233720368547758089223372036854775807

Float

32IEEE754单精度浮点数

Double

64IEEE754双精度浮点数

Char

16位无符号Unicode字符。范围由U+0000U+FFFF

String

字符序列

Boolean

无论是字面truefalse字面

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值