Scala基础类型与操作
Scala基本类型及操作、程序控制结构
Scala基本类型及操作、程序控制结构
(一)Scala语言优势
自身语言特点:
- 纯面向对象编程的语言
- 函数式编程语言
函数式编程语言语言应该支持以下特性:- 高阶函数
- 闭包
- 模式匹配
- 单一赋值
- 延迟计算
- 类型推导
- 尾部调用优化
- 类型推导
- Scala语言具有很强的兼容性、移植性
运行于JVM上,能与JAVA相互操作 - 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基础类型与操作的更多相关文章
- Java基础类型自动装箱(autoboxing)
Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 --> 包装器类 如下过程可触发自动装箱过程: Integer count = ...
- 第1节 Scala基础语法:5、6、7、8、基础-申明变量和常用类型,表达式,循环,定义方法和函数
4. Scala基础 4.1. 声明变量 package cn.itcast.scala object VariableDemo { def main(args: Array[Strin ...
- 【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型 ...
- 【Go入门教程4】变量(var),常量(const),内置基础类型(Boolean、数值 byte,int,rune、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go 内置类型以及 Go 程序设计中的一些技巧. 定义变量 Go 语言里面定义变量有多种方式. 使用 var 关键字是 Go 最基本的定义变量方式,与 C 语言不 ...
- 【scala】基础类型
基础类型 位数 Boolean - Byte ...
- Scala 基础(3)—— 基础类型和基础操作
1. Scala 的一些基础类型 Scala 提供了 8 种基础类型,对应 Java 的 8 种基本数据类型. 其中包括: 整数类型:Byte, Short, Int, Long, Char 浮点类型 ...
- Scala 基础(十六):泛型、类型约束-上界(Upper Bounds)/下界(lower bounds)、视图界定(View bounds)、上下文界定(Context bounds)、协变、逆变和不变
1 泛型 1)如果我们要求函数的参数可以接受任意类型.可以使用泛型,这个类型可以代表任意的数据类型. 2)例如 List,在创建 List 时,可以传入整型.字符串.浮点数等等任意类型.那是因为 Li ...
- Scala 基础入门【翻译】
原文地址 本文只是带你进入 Scala 的世界,包括安装.不可变量 val.可变量 var.定义类.集合(包括列表(list).集(set).映射(map))以及集合遍历和集合库(能达到并行/并发效果 ...
- 大数据入门第二十天——scala入门(二)scala基础01
一.基础语法 1.变量类型 // 上表中列出的数据类型都是对象,也就是说scala没有java中的原生类型.在scala是可以对数字等基础类型调用方法的. 2.变量声明——能用val的尽量使用val! ...
随机推荐
- 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...
- dropDownList之"请选择",同时设置默认选项
dropDownList.Items.Insert(0, new ListItem("--请选择--", "-1"));dropDownList.Selecte ...
- 常用的sql server规范
常见的字段类型选择1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4. 自增长标识建议采用bigint数据类 ...
- bootstarp栅格系统
##### 1.3.2 栅格系统 - Bootstrap中定义了一套响应式的网格系统,- 其使用方式就是将一个容器划分成12列,- 然后通过col-xx-xx的类名控制每一列的占比 ##### 1.3 ...
- javascript高级知识点——内置对象原型
代码信息来自于http://ejohn.org/apps/learn/. 可以修改内置对象的方法. if (!Array.prototype.forEach) { Array.prototype.fo ...
- 跨文档消息传递----postMessage()
HTML5 规范中,提出了XDM,又称为 跨文档消息传递,其核心是 postMessage()方法,进行跨域和跨文档消息传递,示例如下: <div class="CrossDocume ...
- JPEG图像密写研究(一) JPEG图像文件结构
[转载]转载自http://www.cnblogs.com/leaven/archive/2010/04/06/1705846.html JPEG压缩编码算法的主要计算步骤如下: (0) 8*8分块. ...
- 【Chromium中文文档】跨进程通信 (IPC)
跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...
- sql查询数据库表中重复记录方法
1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 代码如下: select * from people where peopleId in (select peopleId ...
- Flex整合Spring
工程需要整合Spring和Flex,在网上众多方法中找到了下面这种,记录留存. 个人认为该方法更适合在已有Spring框架的工程中添加Flex时使用,对原工程内容(主要指配置文件)改动较小. 1.添加 ...