Scala基本类型及操作、程序控制结构

Scala基本类型及操作、程序控制结构

(一)Scala语言优势

自身语言特点:

  1. 纯面向对象编程的语言
  2. 函数式编程语言

    函数式编程语言语言应该支持以下特性:

    • 高阶函数
    • 闭包
    • 模式匹配
    • 单一赋值
    • 延迟计算
    • 类型推导
    • 尾部调用优化
    • 类型推导
  3. Scala语言具有很强的兼容性、移植性

    运行于JVM上,能与JAVA相互操作
  4. Scala语法简洁

(二)Scala基本数据类型及操作

1. 变量定义

//声明一个val变量
//与Java final关键字声明的变量一样
//一旦被赋值,就不能更改
//Scala会帮我们进行类型判断
scala> val helloString="Hello World"
hellowString: String = Hello World

//也可以进行类型指定
scala> val helloString:String="Hello World"
helloString: String =Hello World

//String其实就是java.lang.String
scala> val helloString:java.lang.String="Hello World"
helloString: String = Hello World

//不能被重新赋值,因为它是val变量
scala> hellString="Hello Crazy World"
<console>:8: error:reassignment to val
helloString="Hello Crazy World"

下面给出的延迟加载变量:

//lazy关键字声明变量
//表示该变量不会马上赋值
//而在真正被使用时才赋值
scala> lazy val helloString="Hello Crazy World"
helloString: String = <lazy>

//在真正使用时被赋值
scala> helloString
res1: String = Hello Crazy World

scala中也存在可变变量,即随着程序的运行,变量内容可以动态变化:

//var 声明可变变量
scala> var helloString="Hello Cruel World"
helloString: String = Hello Cruel World

//重新赋值
scala> helloString="GoodBye Cruel World"
helloString: String = GoodBye Cruel World



整数类型变量定义:

//16进制定义法
scala> val x=0x29
x: Int = 41

//十进制定义法
scala> val x=41
x: Int=41

//八进制定义法
scala> 051
res0: Int = 41

浮点类型变量定义:

//Double类型定义,直接输入浮点数,编译器会将其自动推断为Double类型
scala> val doubleNumber=3.141529
doubleNumber: Double = 3.141529

//要定义Float类型浮点数,需要在浮点数后面加F或f
scala> val floatNumber=3.141529F
floatNumber: Float = 3.141529

scala> val floatNumber=3.141529f
floatNumber: Float = 3.141529

浮点类型的变量还可以采用指数表示法,如:

//浮点数指数表示法,e也可以是大写E,0.314529e1与0.314529*10等同
scala> val floatNumber=0.314529e1
floatNumber: Double = 3.14529

字符变量定义:

//字符定义,用""将字符包裹
scala> var charLiteral="A"
charLiteral: Char = A

常用特殊字符包括:

\n 换行符,其Unicode编码为(\u000A)
\b 回退符,其Unicode编码为(\u0008)
\t tab制表符,其Unicode编码(\u0009)
\”“ 双引号,其Unicode编码为(\u0022)
\” 单引号,其Unicode编码为(\u0027)
\ 反斜杠,其Unicode编码为(\u005C)

字符串变量跟java类似,就是加了” “。

字符串变量定义:

//字符串变量用""包裹
scala> val helloWorld="Hello World"
helloWorld: String = Hello World

//要定义"Hello World",可以加入转移符\
scala> val helloWorldDouble="\"Hello World\""
helloWorldDoubleQuota: String = "Hello World"

//如果希望能够原样输出字符串中的内容,则用三个引号'''符串包裹起来,如
scala> println('''hello cruel world, \n \\\\ \b \\, I am 'experienced' programmer''')
hello cruel world, \n \\\\ \b \\, I am 'experienced' programmer

布尔类型的定义:

scala> var x=true
x: Boolean = true

基本类型操作:

在Scala中一切操作皆方法,这意味着Scala中的一切皆为对象

//整数求和,编译器会将其转换为(1).+(2)执行
scala> var sumVlaue=1+2
sumVlaue: Int = 3

//前一语句等同于下列语句
scala> var sumVlaue=(1).+(2)
sumVlaue: Int = 3

//操作符重载函数,编译器会将其转换为(1).+(2L)执行
scala> val longSum = 1+2L
longSum: Long = 3

//减法
scala> 1-3
res5: Int = -2

//除法
scala> 1/3
res6: Int = 0

//取模
scala> 1%3
res7: Int = 1

//乘法
scala> 1L*3L
res8: Long = 3

//scala中可以用+ -符号来表示正负数,例如-3 +3,并且可以加入到运算符中
scala> var y=1+ -3
y: Int = -2

关系运算:

//>运算符
scala> 3 > -3
res12: Boolean = true
//<运算符
scala> 3 < -3
res13: Boolean = false
//<=运算符
scala> 3 <= -3
res14: Boolean = false
scala> 3 <= 3
res15: Boolean = true
scala> !(3<= -3)
res16: Boolean = true

逻辑运算:

//逻辑与:&&
scala> val bool=true
bool: Boolean = true

scala> bool && bool
res17: Boolean = true
//逻辑或: ||
scala> bool || bool
res18: Boolean = true

scala> bool || !bool
res20: Boolean = true

//00000001
//11111110
scala> ~1
res24: Int = -2

//左移位(shift left)
//00000110
//00001100
scala> 6 << 1
res29: Int = 12

//右移位(shift left)
//00000110
//00000011
scala> 6 >> 1
res26: Int = 3

对象比较:

scala> 1==1
res34: Boolean = true

scala> 1==1.0
res35: Boolean = true

scala> val x="Hello"
x: String = Hello

scala> val y="Hello"
y: String = Hello

//Scala中的对象比较不同于Java中的对象比较
//Scala基于内容比较,而Java中比较的是引用,进行内容比较时须定义比较方法
scala> x==y
res36: Boolean = true

(三)Scala程序控制结构

if的使用:

val x= if("hello"=="hell") 1 else 0

while的使用:

def gcdLoop(x:Long,y:Long):LOng ={
var a=x
var b=y
while(a!=0){
val temp = a
a = b%a
b = temp
}
b
}

do while的使用:

var line=""
do{
line=readLine()
println("Read:"+line)
}
while(line!="")

注意:与if不同的是,while与do while不能用作表达式,也即其返回值为Unit,在某些函数式编程语言中,删除了while与do while程序控制结构,但scala仍然保留了while与do while,可见Scala并不是纯函数式编程语言(另外一个很重要原因是,Scala函数定义时仍然可以用var指定参数)

var line = ""
while((line=readLine())!="")//在Scala中不能这么用,因为Scala中的赋值操作返回的值是Unit,而""是String类型,不能进行比较,这是函数式编程语言特有的特点
println("Read:"+line)

for循环的使用:

scala> val filesHere = (new java.io.File(".")).listFiles
//集合操作方式
scala> for (file<-filesHere)
| println(file)
//间接调用方式(不常用)
for (i <- 0 to filesHere.length - 1)
println(filesHere(i))

程序中的<-被称为生成器(generator),在执行过程中,集合filesHere中(Array[File])的元素将依次赋给file,file类型为File,打印时调用其toString方法将文件名称打印出来。



多重for循环的使用:



for循环同样可以有返回值:

Scala基础类型与操作的更多相关文章

  1. Java基础类型自动装箱(autoboxing)

    Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 -->  包装器类 如下过程可触发自动装箱过程: Integer count = ...

  2. 第1节 Scala基础语法:5、6、7、8、基础-申明变量和常用类型,表达式,循环,定义方法和函数

    4.    Scala基础 4.1.   声明变量 package cn.itcast.scala object VariableDemo {   def main(args: Array[Strin ...

  3. 【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

    这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型 ...

  4. 【Go入门教程4】变量(var),常量(const),内置基础类型(Boolean、数值 byte,int,rune、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值

    这小节我们将要介绍如何定义变量.常量.Go 内置类型以及 Go 程序设计中的一些技巧. 定义变量 Go 语言里面定义变量有多种方式. 使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不 ...

  5. 【scala】基础类型

    基础类型                              位数 Boolean                                 - Byte                 ...

  6. Scala 基础(3)—— 基础类型和基础操作

    1. Scala 的一些基础类型 Scala 提供了 8 种基础类型,对应 Java 的 8 种基本数据类型. 其中包括: 整数类型:Byte, Short, Int, Long, Char 浮点类型 ...

  7. Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变

    1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...

  8. Scala 基础入门【翻译】

    原文地址 本文只是带你进入 Scala 的世界,包括安装.不可变量 val.可变量 var.定义类.集合(包括列表(list).集(set).映射(map))以及集合遍历和集合库(能达到并行/并发效果 ...

  9. 大数据入门第二十天——scala入门(二)scala基础01

    一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...

随机推荐

  1. 2015-01-15百度地图API 新海量点

    整理一下昨天写的百度地图 项目最开始写了一个百度地图,但是速度那慢的简直了 所以昨天将百度地图API的海量点 写了一下 1秒啊 o.o  厉害 OK 记下 此乃需要的js <!--添加百度地图- ...

  2. sql权限报表小知识

    EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIG ...

  3. nutch2.3命令参数解析

    nutch中可执行的命令列表 [root@ewanalysis ~]# nutch Usage: nutch COMMAND where COMMAND is one of: inject injec ...

  4. Error 56: …… VPN Service has not been started

    vpn service在系统服务中名为Cisco System, Inc. VPN Service(cvpnd),异常情况下,该服务时停止的,并且手动启动该服务后没几秒,就被kill了.根据Zhiga ...

  5. 使用EXTEND方式来分段处理大表的搬数据

    创建一个表: 记录rowid的分区段并作为处理的日志表: DROP TABLE DEAL_TABLE_EXTENT; CREATE TABLE DEAL_TABLE_EXTENT(seq        ...

  6. 使用 MyEclipse远程调试 Java 应用程序

    远程调试,需要本程序和服务器上的程序源码是相同的,这我们服务器使用的是tomcat7.在本地通过MyEclipse 10来调试服务器上的代码,需要本地能访问到服务器,我的服务器是在linux下. 1. ...

  7. poj2478--欧拉函数打表

    此题中对时间有要求,如直接使用欧拉函数求解,每输入一个n,就得进行循环求出<n的每个数的欧拉函数, 这样会超时, 于是我们可预先将欧拉函数打表, 再进行一个循环加法运算,便可不超时得解. #in ...

  8. 整个网站灰度显示css代码

    body *{ -webkit-filter: grayscale(100%); /* webkit */ -moz-filter: grayscale(100%); /*firefox*/ -ms- ...

  9. 微博发布效果jq版

    大家都看过新浪微博的发状态功能,我模拟了一下类似的效果,包括发布时间,删除效果等.代码如下: <!DOCTYPE HTML> <html> <head> <m ...

  10. IE的事件与w3c事件的区别

    14. offsetWidth, scrollLeft, scrollHeight?     scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离 scrollHeig ...