scala声明变量

試著忘記壹切 提交于 2020-02-08 20:32:30

声明变量
我们将来每一天编写scala程序都会定义变量。那scala语言如何定义变量呢?
语法格式
Java变量定义
java int a = 0;
在scala中,可以使用val或者var来定义变量,语法格式如下:
scala val/var 变量标识:变量类型 = 初始值
其中
val定义的是不可重新赋值的变量
var定义的是可重新赋值的变量

[!NOTE]

  • scala中定义变量类型写在变量名后面
  • scala的语句最后不需要添加分号
    在解释器中定义一个变量
    示例:定义一个变量保存一个人的名字"tom"
    步骤

打开scala解释器
定义一个字符串类型的变量用来保存名字
参考代码
scala scala> val name:String = "tom" name: String = tom
Val和Var变量
示例
给名字变量进行重新赋值为Jim,观察其运行结果
参考代码
scala scala> name = "Jim" <console>:12: error: reassignment to val name = "Jim"
示例
使用var重新定义变量来保存名字"tom",并尝试重新赋值为Jim,观察其运行结果
参考代码
scala scala> var name:String = "tom" name: String = tom
scala> name = "Jim" name: String = Jim
[!TIP]
优先使用val定义变量,如果变量需要被重新赋值,才使用var
使用类型推断来定义变量
scala的语法要比Java简洁,我们可以使用一种更简洁的方式来定义变量。
示例
使用更简洁的语法定义一个变量保存一个人的名字"tom"
参考代码
scala scala> val name = "tom" name: String = tom
scala可以自动根据变量的值来自动推断变量的类型,这样编写代码更加简洁


惰性赋值
在企业的大数据开发中,有时候会编写非常复杂的SQL语句,这些SQL语句可能有几百行甚至上千行。这些SQL语句,如果直接加载到JVM中,会有很大的内存开销。如何解决?
当有一些变量保存的数据较大时,但是不需要马上加载到JVM内存。可以使用惰性赋值来提高效率。
语法格式:
scala lazy val/var 变量名 = 表达式
示例
在程序中需要执行一条以下复杂的SQL语句,我们希望只有用到这个SQL语句才加载它。

scala “”“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 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>

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!