scala快速入门系列【变量】

        本篇作为scala入门系列的第三篇博客,为大家带来的是变量的相关内容。

声明变量

        我们将来每一天编写scala程序都会定义变量。那scala语言如何定义变量呢?

        下面的学习我们将通过Java和Scala之间的对比,来加强大家对于scala的印象。

语法格式

Java 变量定义

int a = 0;

在scala中,可以使用 val 或者 var 来定义变量,语法格式如下:

val/var 变量标识:变量类型 = 初始值

其中

  • val定义的是不可重复赋值的变量
  • var定义的是可重复赋值的变量

【!NOTE】
需要注意的是

  • scala中定义变量类型写在变量名后面
  • scala的语句最后不需要添加分号

在解释器中定义一个变量

示例:

定义一个变量保存一个人的名字 “tom”

        
步骤:

  1. 打开scala解释器
  2. 定义一个字符串类型的变量用来保存名字

参考代码:

扫描二维码关注公众号,回复: 8561498 查看本文章
scala> val name:String = "tom" 
name: String = tom

val 和 var 变量

示例:

给名字变量进行重新赋值为Jim,观察其运行结果
        
参考代码:

scala> name = "Jim" 
<console>:12: error: reassignment to val name = "Jim"

很自然的发现报错了,因为我们在上面一个步骤中创建变量name时使用的是val,而val定义的变量无法进行二次赋值(有点类似于Java中的final)。

示例:

使用 var 重新定义变量来保存名字"tom",并尝试重新赋值为Jim,观察其运行结果

        
参考代码:

scala> var name:String = "tom" 
name: String = tom 
scala> 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_personas select a.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_cnt from gdm.itcast_gdm_user_basic a left join gdm.itcast_gdm_user_consume_order b on a.user_id=b.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; “”"

参考代码:

scala> lazy val sql = """ insert overwrite table adm.itcast_adm_personas 19
| 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>

本篇博客到这里就结束了,感兴趣的小伙伴们可以持续关注哟~下一篇将为大家带来字符串的基本使用,敬请期待!
在这里插入图片描述

发布了146 篇原创文章 · 获赞 1340 · 访问量 35万+

猜你喜欢

转载自blog.csdn.net/weixin_44318830/article/details/103948350