2021年大数据常用语言Scala(四):基础语法学习 声明变量
目录
声明变量
语法格式
在解释器中定义一个变量
val和var变量
使用类型推断来定义变量
惰性赋值
声明变量
我们将来每一天编写scala程序都会定义变量。那scala语言如何定义变量呢?
语法格式
Java变量定义
int a = 0;
在scala中,可以使用val或者var来定义变量,语法格式如下:
val/var 变量标识:变量类型 = 初始值
其中
- val定义的是不可重新赋值的变量
- var定义的是可重新赋值的变量
[!NOTE]
- scala中定义变量类型写在变量名后面
- scala的语句最后不需要添加分号
在解释器中定义一个变量
示例:定义一个变量保存一个人的名字"tom"
步骤
打开scala解释器
定义一个字符串类型的变量用来保存名字
参考代码
scala> val name:String = "tom"
name: String = tom
val和var变量
示例
给名字变量进行重新赋值为Jim,观察其运行结果
参考代码
scala> name = "Jim"
<console>:12: error: reassignment to valname = "Jim"
示例
使用var重新定义变量来保存名字"tom",并尝试重新赋值为Jim,观察其运行结果
参考代码
scala> var name:String = "tom"
name: String = tomscala> name = "Jim"
name: String = Jim
[!TIP]
优先使用val定义变量,如果变量需要被重新赋值,才使用var
使用类型推断来定义变量
Scala的语法要比Java简洁,我们可以使用一种更简洁的方式来定义变量。
示例
使用更简洁的语法定义一个变量保存一个人的名字"tom"
参考代码
scala> val name = "tom"
name: String = tom
Scala可以自动根据变量的值来自动推断变量的类型,这样编写代码更加简洁。
惰性赋值
在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行。这些SQL语句,如果直接加载到JVM中,会有很大的内存开销。如何解决?
当有一些变量保存的数据较大时,但是不需要马上加载到JVM内存。可以使用惰性赋值来提高效率。
语法格式:
lazy val/var 变量名 = 表达式
示例
在程序中需要执行一条以下复杂的SQL语句,我们希望只有用到这个SQL语句才加载它。
"""insert overwrite table adm.itcast_adm_personasselecta.user_id,a.user_name,a.user_sex,a.user_birthday,a.user_age,a.constellation,a.province,a.city,a.city_level,a.hex_mail,a.op_mail,a.hex_phone,a.fore_phone,a.figure_model,a.stature_model,b.first_order_time,b.last_order_time,...d.month1_hour025_cnt,d.month1_hour627_cnt,d.month1_hour829_cnt,d.month1_hour10212_cnt,d.month1_hour13214_cnt,d.month1_hour15217_cnt,d.month1_hour18219_cnt,d.month1_hour20221_cnt,d.month1_hour22223_cntfrom gdm.itcast_gdm_user_basic aleft join gdm.itcast_gdm_user_consume_order b on a.user_id=b.user_idleft join gdm.itcast_gdm_user_buy_category c on a.user_id=c.user_idleft join gdm.itcast_gdm_user_visit d on a.user_id=d.user_id;"""
参考代码
scala> lazy val sql = """insert overwrite table adm.itcast_adm_personas| select| a.user_id,
....| left join gdm.itcast_gdm_user_buy_category c on a.user_id=c.user_id| left join gdm.itcast_gdm_user_visit d on a.user_id=d.user_id;"""
sql: String = <lazy>
2021年大数据常用语言Scala(四):基础语法学习 声明变量相关推荐
- 2021年大数据常用语言Scala(十四):基础语法学习 数组 重点掌握
目录 数组 重点掌握 定长数组 变长数组 遍历数组 数组常用算法 数组 重点掌握 scala中数组的概念是和Java类似,可以用数组来存放一组数据.scala中,有两种数组,一种是定长数组,另一种 ...
- 2021年大数据常用语言Scala(三十一):scala面向对象 特质(trait)
目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class 特 ...
- 2021年大数据常用语言Scala(一):Scala简介
目录 一.Scala简介 为什么使用scala Scala对比Java 案例 一.Scala简介 scala是运行在JVM上的多范式编程语言,同时支持面向对象和面向函数编程 多范式:就是包含多种编程思 ...
- 2021年大数据常用语言Scala(十三):基础语法学习 函数 重点掌握
目录 函数 重点掌握 定义函数 方法和函数的区别 方法转换为函数 完全体函数 函数 重点掌握 scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数 函数和我们的对象一样, ...
- 2021年大数据常用语言Scala(五):基础语法学习 字符串
字符串 scala提供多种定义字符串的方式,将来我们可以根据需要来选择最方便的定义方式. 使用双引号 使用插值表达式 使用三引号 使用双引号 语法 val/var 变量名 = "字符串&qu ...
- 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理
目录 异常处理 捕获异常 抛出异常 异常处理 Scala中 无需在方法上声明异常 来看看下面一段代码. def main(args: Array[String]): Unit = {val i = 1 ...
- 2021年大数据常用语言Scala(二十四):函数式编程 过滤 filter
目录 过滤 filter 定义 方法签名 方法解析 案例 参考代码 过滤 filter 过滤符合一定条件的元素 定义 方法签名 def filter(p: (A) ⇒ Boolean): Trav ...
- 2021年大数据常用语言Scala(十六):基础语法学习 列表 List 重点掌握
目录 列表 List 重点掌握 不可变列表定义 可变列表 列表常用操作 列表 List 重点掌握 列表是scala中最重要的.也是最常用的数据结构.List具备以下性质: 可以保存重复的值 有先后顺序 ...
- 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数
目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...
最新文章
- 跨网段实现内网互通_【供暖站组网】冠航SD-LAN助力河北石家庄市30个供暖站异地组网实现内网互联互通...
- abap 给用户分配事物代码权限_【第五篇】SAP ABAP7.50 之用户接口
- 技术干货 | 阿里云数据库PostgreSQL 13大版本揭秘
- 无线网络拓扑结构简析
- 2018年下半年《软件评测师》下午试卷及答案
- SAP编程中最基本的概念
- C#5 复习总结循环 迭代和穷举
- 聪聪用计算机计算235乘49,四年级数学题库
- 序列化和反序列化(json和pickle)day18
- android中所有颜色大全
- 算法和数据结构---排序---插入排序
- 信息系统项目管理师学习笔记
- 第一章、银行会计的基本原理和基本核算方法
- jacob转pdf linux,Java 使用jacob实现doc转pdf(附带其他方法分析)
- Proxmox VE 配置桌面虚拟化
- 不带脏字的英文骂人法
- xpwifi热点设置android,笔记本xp系统wifi热点设置教程(图文)
- LaTeX论文图片排版
- ViewPager系列之ViewPager无限循环滑动
- Python地球科学领域应用:python处理遥感数据、站点数据、遥感水文数据、气候变化数据、WRF模式数据后处理、运行生态模型
热门文章
- mysql并发更新数据,多用户并发修改数据解决方案。
- 如果你没用过maven的install,你应该了解一下!maven中的install功能及用法。
- Go语言的错误异常处理机制及其应用
- 2022-2028年中国马铃薯市场研究及前瞻分析报告
- 【转载】首次作品展小结
- 零基础入门--中文命名实体识别(BiLSTM+CRF模型,含代码)
- LeetCode简单题之石头与宝石
- linux ftp随机端口,linuxFTP生产环境配置
- python 16进制转10进制, 8进制转10进制, 2进制转10进制的方法
- python 读取excel 内的中文显示为unicode 编码