一.变量和数据类型

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(二)【基本使用】的更多相关文章

  1. scala(二) Future执行逻辑解读

    在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...

  2. scala(二)

    一.映射 1.Scala映射就是键值对的集合Map.默认情况下,Scala中使用不可变的映射. 如果想使用可变集合Map,必须导入scala.collection.mutable.Map    (导包 ...

  3. Scala(二):元组、数组、映射

    元组:Tuple,不同类型值的聚集.将固定数量的项目组合在一起,以便它们可以作为一个整体传递. 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的.元祖的实际类型取决于它的分量的类型,比 ...

  4. Scala(二) —— 函数

    try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...

  5. Scala快速概览

    IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...

  6. Programming In Scala笔记-第八章、函数与闭包

    当程序的代码量增大时,就需要对各功能模块进行分割,这些分割的小模块就是本文中接下来会进行分析的函数.接下来的部分会讲解包括函数嵌套,函数字面量,以及函数值等概念. 一.方法 一会函数一会方法的,是不是 ...

  7. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  8. Spark学习笔记--安装SCALA和IDEA开发环境

    一:安装Scala

  9. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

随机推荐

  1. 顺时针打印矩阵 牛客网 剑指Offer

    顺时针打印矩阵 牛客网 剑指Offer 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. 深入探索 Linux listen() 函数 backlog 的含义

    1:listen()回顾以及问题引入 2:正确的解释 3:实验验证 1:listen()回顾以及问题引入 listen()函数是网络编程中用来使服务器端开始监听端口的系统调用,首先来回顾下listen ...

  3. 【Python接口自动化测试】Postman使用简介

    下载地址: http://www.downza.cn/soft/205171.html 工具栏 New: 新建,可以新建Request请求,Collection请求集,环境等等 Import: 导入, ...

  4. redis批量操作

    由于redis没有批量删除命令,所以借助xargs redis-cli -h 127.0.0.1 keys testdata_2018* |xargs redis-cli -h 127.0.0.1 d ...

  5. 大一C语言学习笔记(8)---指针篇--动态内存是什么?与静态内存有什么区别?怎么使用动态内存,有什么需要注意的地方?

    静态内存指的是在编译时系统自动给其分配的内存,运行结束后会自动释放:静态内存是在栈中分配的: 动态内存是我们程序员手动分配的内存,正常情况下,程序运行结束后,也不会自动释放,所以为了避免发生未知的错误 ...

  6. Django笔记&教程 3-2 模板语法介绍

    Django 自学笔记兼学习教程第3章第2节--模板语法介绍 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/topics/templates/# ...

  7. 大爽Python入门教程 2-3 字符串,列表,字典

    大爽Python入门公开课教案 点击查看教程总目录 除了通用的序列方法, 列表和字符串还有些自己的专属方法. 后面介绍有些是英中文对照介绍(英文来自官方文档), 便于大家更深入的去理解其意思. 灵活的 ...

  8. Exploring Matrix

    import java.util.Scanner; public class J714 { /** * @taking input from user */ public static void ma ...

  9. [gym102900H]Rice Arrangement

    (可以先阅读题目中关于顺逆时针的定义,避免理解错误) 考虑一盘菜$b_{i}$被$a_{j}$吃掉,对于其最后一次移动:如果是顺时针,则称$b_{i}$的移动区间为$[a_{j},b_{i}]$(若$ ...

  10. Flink 实践教程-入门(8): 简单 ETL 作业

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...