首页 > 其他分享 >大数据学习13之Scala基础语法(重点)

大数据学习13之Scala基础语法(重点)

时间:2024-11-13 18:44:05浏览次数:3  
标签:13 val Scala yield 语法 var 变量名 方法

1. 简介

        Scala 是 Scalable Language 的简写,是一门多范式的编程语言。创始人为 Martin Odersky 马丁·奥德斯基。

        Scala 这个名字来源于 Scalable Language(可伸缩的语言),它是一门基于 JVM 的多范式编程语言,通俗的说:Scala是一种运行在 JVM 上的函数式的面向对象语言。之所以这样命名,是因为它的设计目标是:随着用户的需求一起成长,Scala 可被广泛应用于各种编程任务,从编写小型的脚本到构建巨型系统,它都能胜任。正因如此,Scala 得以提供一些出众的特性,例如:它集成了面向对象编程和面向函数式编程的各种特性,以及更高层的并发模型。
        总而言之,Scala 融汇了许多前所未有的特性,同时又运行于 JVM 之上,随着开发者对 Scala 的兴趣与日俱增,以及越来越多的工具的支持,无疑 Scala 语言将成为一门必不可少的工具。

总结

        Scala 是兼容的:兼容 Java,可以访问庞大的 Java 类库;
        Scala 是精简的:Scala 表达能力强,一行代码抵得上多行 Java 代码,开发速度快。可以让程序短小精悍,看起来更简洁,更优雅;
        Scala 是静态类型的:Scala 拥有非常先进的静态类型系统,支持类型推断和模式匹配等;
        Scala 可以开发大数据应用程序:例如 Spark、Flink 等。

2. 环境搭建

        Scala 2.12.17 官网下载:https://www.scala-lang.org/download/2.12.17.html

双击 msi 安装包,记住安装的路径方便后续配置环境变量。

 IntelliJ IDEA 安装插件

        

3.HelloWorld

4. 基础语法

4.1. 注释

       //单行

        /*

        多行   

*/

        /** 

        *  文档

        **/

4.2. 语句

4.3. 打印输出

4.4. 常量

        val修饰 常量名:常量类型

        val name :string ="张三";

name 不可变, val相当于java的final

4.5. 变量

        var 变量名:变量类型=初始值;

官方推荐使用val:

        更安全;

        代码可读性高;

        资源回收更快,方法执行完,val所定义的常量就会被收回。

4.6. 字符串

        4.6.1. 双引号

        val|var 变量名 = "字符串"

        4.6.2. 三引号

        val|var 变量名 = """
                字符串1
                字符串2
        """

        方面字符串写在多行;

val sql = """
SELECT ename, job, sal
FROM emp
WHERE empno = 1234;
"""
println(sql)

        4.6.3. 插值表达式

        val|var 变量名 = s"${变量|表达式}字符串"

        4.6.4. 惰性赋值

        lazy val 变量名 = 表达式

        只支持val,不支持var

        类似懒加载,只有当首次使用时才会将数据读入内存;

4.7. 标识符

        实际开发中,我们会编写大量的代码,这些代码中肯定会有变量、常量、方法、类等,那它们该如何命名呢?这就需要标识符了,标识符就是用来给变量、常量、方法、类等起名字用的。

        4.7.1. 命名规则

        不能数字开头;
        不能使用关键字;

        4.7.2. 命名规范

        变量和方法:小驼峰,maxSize、selectUserById;

        类和特征(Trait):大驼峰,UserController、WordCount;

        包:全部小写。

4.8. 数据类型

注意事项:
        Scala 所有类型都使用大写字母开头
        整型使用 Int 而不是 Integer
        Scala 中定义变量可以不写类型,让 Scala 编译器自动推断
        Scala 中默认的整型是 Int,默认的浮点型是 Double。

4.9. 类型转换

        4.9.1. 自动类型转换

        val a:Double = 3 + 2.21

        4.9.2. 强制类型转换

        val a:Double = 3.14
        val b:Int = a.toInt

        4.9.3. String 类型转换

        val|var 变量名 = 数值类型 + ""
        val|var 变量名 = 数值类型.toString

4.10. 键盘录入

        ​​​​​​​

4.11. 运算符

        4.11.2. 算术运算符

        

        4.11.3. 赋值运算符

        

        4.11.4. 关系运算符

        

        4.11.5. 逻辑运算符

        

4.12. 语句块

        Scala 中使用 {} 表示一个语句块,语句块是有返回值的(最后一个逻辑行)。例如:

4.13. 流程控制

        

4.14. 循环结构

        循环指的是事务周而复始的变化,代码中指的是某部分代码满足一定的条件时则反复执行直到条件不满足为止。例如打印十次 HelloWorld,如果没有循环结构则需要写十遍该代码,有了循环结构则只需要写一次即可。

守​​​​​​​卫

yield 生成​​​​​​​器

        yield 是一个类似 return 的关键字,但是 yield 不会结束函数,而 return 会结束函数。如果在循环结构中使用了 yield,相当于迭代一次遇到 yield 时就将 yield 后面(右边)的值放入一个集合,最后整个循环结束时将集合返回。我们把使用了yield 的 for 表达式称之为推导式。yield 不仅可以使用于 for 循环中,还可以使用于某个函数的参数,只要这个函数的参数允许被迭代。

        4.15. 方法

4.15.1. 语法格式

        ​​​​​​​​​​​​​​

4.15.2. 类型推断

        在 Scala 中,定义方法时返回值类型可以省略,由 Scala 编译器自动推断。但是定义递归方法时,不能省略。否则会报错: error: recursive method accumulation needs result type 。

4.15.3. 惰性方法

        当记录方法返回值的变量被声明为 lazy 时,方法的执行将会被推迟,直到我们首次使用该值时,方法才会执行。这样的方法叫做惰性方法。

4.15.4. 方法参数

带名参数

变长参数

4.15.5. 方法调用

后缀调用法

对象名.方法名(参数) Math.abs(-1)


中缀调用法

对象名 方法名 参数 Math abs -1 、 Math max (1, 2)


花括号调用法


无括号调用法

4.16. 函数

        4.16.1. 定义函数

        4.16.2. 方法和函数的区别

        方法是隶属于类或者对象的,在运行时,它会被加载到 JVM 的方法区中
        函数是一个对象,继承自 FunctionN,函数对象有 apply,curried,toString,tupled 这些方法,方法则没有。

        4.16.3. 方法转换为函数

        val|var 变量名 = 方法名 _

​​​​​​​

4.17. Option

        4.17.1. 语法格式

        

        4.17.2. 案例

        

标签:13,val,Scala,yield,语法,var,变量名,方法
From: https://blog.csdn.net/qq_64407249/article/details/143707109

相关文章

  • 2024.11.13 1825版
    起于《海奥华预言》的思考◆地球管理结构和参考持续更新中...... 英文地址:https://github.com/zhuyongzhe/Earth/tags中文地址:https://www.cnblogs.com/zhuyongzhe85作者:朱永哲 ---------------------------------------------------------------------------------......
  • Privilege Escalation(权限提升)
    PrivilegeEscalation(权限提升)WhattheShell?Whatisashellshell是我们与命令行环境(CLI)交互时使用的工具。换句话说,Linux中常见的bash或sh程序都是shell的例子,Windows上的cmd.exe和Powershell也是如此。简而言之,我们可以强制远程服务器向我们发送对服务......
  • GEE教程——导出2013年至今Landsat 8 TOA真彩色影像视频
    目录简介代码解释函数ee.List.sequence(start, end, step, count)Arguments:Returns: Listee.Algorithms.Landsat.simpleCloudScore(image)Arguments:Returns: Imageee.Filter.calendarRange(start, end, field)Arguments:Returns: FilterExport.video.to......
  • ❤React-JSX语法认识和使用
    1、JSX基本使用​JSX是React的核心JSX是ES的扩展jsx语法->普通的JavaScript代码->babelReact可以使用JSX的前提和原因:React生态系统支持: 脚手架通常用于构建React应用程序,而JSX是React框架的核心语法之一。因此,脚手架默认支持JSX语法,以便更轻松地编写和管理React组件......
  • 135端口DCERPC协议扫描主机
    百度百科135端口主要用于使用RPC(RemoteProcedureCall,远程过程调用)协议并提供DCOM(分布式组件对象模型)服务,通过RPC可以保证在一台计算机上运行的程序可以顺利地执行远程计算机上的代码;使用DCOM可以通过网络直接进行通信,能够包括HTTP协议在内的多种网络传输。135端口探测......
  • CW 11.13 模拟赛 T3 大方和小方
    算法可以看出来是组合数学,但是考场上时间不够+本身也没做过组合数学,放弃了经过人类智慧的推导由\(\rm{Subtask}1\)可得基础柿子令$a=b_2-d_1,b=a_2-c_1$插空法可知答案为\(a+b\choosea\)代码略总结注意组合数学的\(\sum\)有些时候可以化......
  • 2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k, 定义
    2024-11-13:求出所有子序列的能量和。用go语言,给定一个整数数组nums和一个正整数k,定义一个子序列的能量为子序列中任意两个元素之间的差值绝对值的最小值。找出nums中长度为k的所有子序列的能量和,对结果取模10^9+7后返回。输入:nums=[1,2,3,4],k=3。输出:4。解释:nums......
  • 2024年11月13日Github流行趋势
    项目名称:dockur/windows项目维护者:@kroese@renovate@hellodword@luisgmuniz@arisudesu项目介绍:在Docker容器内运行Windows。项目star数:27,382项目fork数:1,909项目名称:exo-explore/exo项目维护者:@AlexCheema@blindcrone@DevEmilio96@GaetanLepage@ianpaul10......
  • Scala 的Map集合
     Map集合有两种类型,可变的与不可变的,区别在于可变对象可以修改,而不可变对象不可以修改。默认情况下Scala使用不可变Map集合,如果需要使用可变Map集合,则需要显式地使用import导入包。在Scala中,可以同时使用可变与不可变的Map集合,不可变的直接使用Map,可变的使用mutable.Map。1.......
  • CW 模拟赛 11.13 个人记录
    T1算法暴力暴力思路是显然的,观察到并查集可以\(\mathcal{O}(n\logn)\)的维护题目中求的信息对于\(50\%\)的数据显然可以通过耗时\(10\rm{min}\),正常正解暴力疑似就是正解?????代码这个题只要挂了我就趋势,但是看这样子来说应该是\(T1\)放了简单题不挂......