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. 扑克k,你知道的人物吗?

    在扑克牌中,黑桃K——大卫王(以色列联合王国第二任国王):红桃K——查里曼大帝(法兰克国王,后加冕为罗马人的皇帝):梅花K——亚历山大大帝(马其顿帝国国王):方块K——凯撒大帝(罗马共和国终生执政官) ...

  2. PHP与MySQL交互

    <?php $con = mysql_connect("localhost","root","12345"); $dbcharset ...

  3. The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the arguments (int, SettingFragment, String)

    The method replace(int, Fragment, String) in the type FragmentTransaction is not applicable for the ...

  4. jQuery on()方法绑定动态元素的点击事件无效

    之前就一直受这个问题的困扰,在jQuery1.7版本之后添加了on方法,之前就了解过,其优越性高于live(),bind(),delegate()等方法,在此之前项目中想用这个来测试结果发现,居然动态 ...

  5. CSS3盒模型display:-webkit-box;的使用

    box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分. 目前box-flex属性还没有得到 ...

  6. function(ev) //括号里的ev是什么东西,什么意思?

    事件对象: 楼上的不要误导新人 ev是我们获取事件详细信息的event是IE的写法 大多数人是写window.event 其实区别也差不多 好像window.event更安全些 我也不记得了 火狐呢 ...

  7. [LeetCode]题解(python):151-Reverse Words in a String

    题目来源: https://leetcode.com/problems/reverse-words-in-a-string/ 题意分析: 给定一个字符串,里面包括多个单词,将这个字符串的单词翻转,例如 ...

  8. CSS自学笔记(3):CSS选择器

    CSS中提供了非常丰富的选择器,但是由于浏览器的支持情况,很多选择器很少用到. 1.基础选择器 选择器 含义 示例 * 通用元素选择器,匹配任何元素 * { margin:0; padding:0; ...

  9. LINUX常用命令-系统配置篇(二)

    学到一定程度了就会关注系统方面的一些配置,只是就需要相关的命令了.现在把Linux查看系统配置常用命令列出来 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/ ...

  10. QT中代码中与设计器中控件信号与SLOT连接(原来还可以这样连接)

    双击testqt.ui 托一个push button到窗体中,双击,可以输入字符 按F4或 menu->edit->edit signals/slots 定义SLOT 选择已定义好的SLO ...