2021年大数据常用语言Scala(四):基础语法学习 声明变量

举报
Lansonli 发表于 2021/09/28 23:38:45 2021/09/28
2.1k+ 0 0
【摘要】 目录 声明变量 语法格式 在解释器中定义一个变量 val和var变量 使用类型推断来定义变量  惰性赋值 声明变量 我们将来每一天编写scala程序都会定义变量。那scala语言如何定义变量呢? 语法格式 Java变量定义 int a = 0; 在scala中,可以使用val或者v...

目录

声明变量

语法格式

在解释器中定义一个变量

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 val
             name = "Jim"
  
 

示例

使用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
           |     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>
  
 

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/116427565

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。