Scala(二)【基本使用】
一.变量和数据类型
1.变量
语法:val / var 变量名:变量类型 = 值
val name:String = "zhangsan"
注意
1、val定义的变量想到于java的final,不可用被重新赋值
2、var定义的变量可以被重新赋值
3、在定义变量的时候,变量类型可以省略,scala会自动推断
4、在定义变量的时候,必须初始化
2.命名规范
驼峰原则
3.字符串操作
1、双引号: val 变量名 = "字符串"
val name:String = "zhangsan"
2、三引号: val 变量名 = """sql语句"""
一般用于写Sql字符串
val sparkSql : String =
"""
|select
| t1.name,
| t2.age,
| t1.address
|from test1 t1
|join test2 t2
|on t1.id = t2.id
|""".stripMargin
print(sparkSql)
3、插值表达式: val 变量名 = s"hello ${变量名1}"
val name : String ="zhangsan"
val address:String = "BeiJing"
println(s"name=${name},address=${address}")
4、format方法: "hello %s".format(字符串)
val name : String ="zhangsan"
val address:String = "BeiJing"
println("name is %s, address is %s".format(name, address))
4.数据类型
类型一览图

1、类型结构
Any: 所有类型的父类
AnyVal:值类型
Byte、Short、Int、Long、Float、Double、Char、Boolean
Unit: 相当于java的void,有一个实例()
StringOps: 是对java string的扩展
AnyRef:引用类型
String、scala class、scala集合、java class、java集合
Null: 是所有引用类型的子类,有一个实例null
Nothing: 是所有类型的子类,一般scala抛出异常的时候返回Nothing
2、数据转换
1、数字之间的转换
1、精度小的自动转成精度大的数字类型 比如Byte可以自动转成Int
2、精度大的数字转成精度小的数字,通过toXXX方法转换 比如 val a:Int = 10; val b:Byte = a.toByte
2、数字和字符串的转换
1、数字转字符串,可以通过插值表达式转换
2、字符串转数字,可以通过toXXX方法转换
二.运算符
1、算术运算符
2、关系运算符
3、逻辑运算符
4、位运算符
5、赋值运算符
scala中没有++、--、三目运算符
scala中运算符是一个个的方法
scala中方法的调用:
1、对象.方法名(参数,...)
2、对象 方法名 (参数,...)
如果方法的参数只有一个,那么()可以省略: 对象 方法名 参数
三.流程控制
1.块表达式
{ }包裹的一块代码称之为块表达式,块表达式有返回值,返回值为{ }中最后一行表达式的结果值。
val address = {
var province: String = "GuangDong"
var city: String = "ShenZhen"
s"province:${province},city:${city}"
}
print(address)
打印结果
province:GuangDong,city:ShenZhen
Process finished with exit code 0
2.分支
单分支
if (布尔表达式) {..}
双分支
if (布尔表达式) {..} else {..}
多分支
if (布尔表达式) {..} else if(布尔表达式) {..} else if(布尔表达式){..} else{..}
嵌套分支
if (布尔表达式) { if (布尔表达式) {..}}
注意:
分支有返回值的,返回值为满足条件的一个分支的{}的最后一行表达式的结果值。
如果if在方法中,有return的时候,返回值就不一定是最后一行表达式的结果值。
3.循环
for循环
1)to方法
左右闭合。1 to 10也等价于1.to(10) ,结果: 1-10的集合
val list = 1 to 10
println(list.toBuffer)
ArrayBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
Process finished with exit code 0
2)until方法
左闭右开。1 until 10也等价于1.until(10) ,结果: 1-9的集合
同上
3)for循环基本语法
for(变量 <- 数组/集合/表达式) {..循环体..}
for(i <- 1 to 10){
print(i)
}
4)守卫
for(变量 <- 数组/集合/表达式 if 布尔表达式)
for(i <- 1 to 10 if(i%2==0)){
print(i)
}
注意:如果if之前有代码语句,那么if不能提到循环后面,只能放在循环体中
5)嵌套循环
for(变量 <- 数组/集合/表达式;变量 <- 数组/集合/表达式)
6)引入变量: for(变量 <- 数组/集合/表达式;val 变量名 = 变量值;变量 <- 数组/集合/表达式)
7)for循环的返回值:
for(变量 <- 数组/集合/表达式) yield {..}
添加yield以后每个{ }都有一个返回值。
4.实现java的continue和break
break
//导包
import scala.until.control.Breaks._
//使用
breakable{
while(..){
if(...) break()
}
}
continue
//导包
import scala.until.control.Breaks._
//使用
while (...){
breakable(){
if(...)break()
}
}
Scala(二)【基本使用】的更多相关文章
- scala(二) Future执行逻辑解读
在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...
- scala(二)
一.映射 1.Scala映射就是键值对的集合Map.默认情况下,Scala中使用不可变的映射. 如果想使用可变集合Map,必须导入scala.collection.mutable.Map (导包 ...
- Scala(二):元组、数组、映射
元组:Tuple,不同类型值的聚集.将固定数量的项目组合在一起,以便它们可以作为一个整体传递. 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的.元祖的实际类型取决于它的分量的类型,比 ...
- Scala(二) —— 函数
try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...
- Scala快速概览
IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...
- Programming In Scala笔记-第八章、函数与闭包
当程序的代码量增大时,就需要对各功能模块进行分割,这些分割的小模块就是本文中接下来会进行分析的函数.接下来的部分会讲解包括函数嵌套,函数字面量,以及函数值等概念. 一.方法 一会函数一会方法的,是不是 ...
- Spark记录-Scala类和对象
本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...
- Spark学习笔记--安装SCALA和IDEA开发环境
一:安装Scala
- 快学Scala 第四课 (多维数组,与Java集合的互操作)
Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...
随机推荐
- Python import cStringIO ImportError: No module named 'cStringIO'
From Python 3.0 changelog; The StringIO and cStringIO modules are gone. Instead, import the io modul ...
- PHP笔记1__基础知识
客户端: 美妙的网页组成(都是由浏览器解释): 1.HTML 2.CSS--给HTML化妆 3.客户端脚本编程语言(JavaScript等)--特效 服务器端: 1.Web服务器Apache/Ngi ...
- nodejs:使用puppeteer在服务器中构建一个获取电影电视剧剧集的接口
首先我们看下数据来源: 来源于这个网站:https://z1.m1907.cn/ 可以说这个网站上能找到很多你想看的很多电影或电视剧,最重要的是很多电影电视剧在别的网站是收费的,但是在这里看是免费的, ...
- PicGo+Gitee(码云)中的404错误解决方案
今天在用PicGo配置Gitee时,出现了404问题,记录一下解决方案. 安装与配置 PicGo默认是不支持Gitee的,只能通过安装插件来进行支持.我这里安装的插件是Gitee. 在图床设置---& ...
- adb 安装与使用(一)
一.ADB简介 1. 什么是adb? adb(Android Debug Bridage)是Android sdk的一个工具: adb 是用来连接安卓手机和PC端的桥梁,要有adb作为二者之间的维系, ...
- [cf1495E]Qingshan and Daniel
选择其中卡片总数较少的一类,当相同时选择$t_{1}$所对应的一类(以下记作$A$类) 如果$t_{1}$不是$A$类,就先对$t_{1}$操作一次(即令$a_{1}$减少1) 下面,问题即不断删去$ ...
- [bzoj3304]带限制的最长公共子序列
用f[i][j][k]表示s1前i个字符.s2前j个字符的LCS且包括s3前k个字符的最长前缀,然后对其某一维滚动,实现时细节比较多 1 #include<bits/stdc++.h> 2 ...
- 当 dotnet-monitor 遇上 Prometheus, 是种什么样的体验?
对于开发和运维人员来说, 监控大屏很棒, 让我们来做一个 Dashboard 吧! 大家可能听说过一些 CLI 诊断工具, 比如 dotnet-counters,dotnet-dump 和 dotne ...
- Codeforces 1383C - String Transformation 2(找性质+状压 dp)
Codeforces 题面传送门 & 洛谷题面传送门 神奇的强迫症效应,一场只要 AC 了 A.B.D.E.F,就一定会把 C 补掉( 感觉这个 C 难度比 D 难度高啊-- 首先考虑对问题进 ...
- CF1542E2 Abnormal Permutation Pairs (hard version)
CF1542E2 Abnormal Permutation Pairs (hard version) good tea. 对于两个排列 \(p,q\),如果 \(p\) 的字典序小于 \(q\),则要 ...