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

news2024/12/23 22:20:51

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. 案例

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django入门【05】模型介绍——字段选项(二)

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结: 2、choices**choices 在 Django 中有以下几种形式:**(1) **简单的列表或元组形式**(2) **字典映射形式**(3&#…

微信小程序:vant组件库安装步骤

前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…

Python如何根据给定模型计算权值

目录 一、特征权重的重要性 二、线性回归中的特征权重计算 1. 导入必要的库 2. 创建示例数据集 3. 分割数据集 4. 训练线性回归模型并计算权重 三、特征选择方法 四、实际案例:金融科技数据集 五、总结 在机器学习中,特征权重的计算是理解模型如…

过去几年电子学习的趋势

近年来,在技术和不断变化的学习者期望的推动下,电子学习已经发展成为一种适应性强、沉浸式和社会化的教育形式。个性化已成为最具影响力的趋势之一,Coursera和LinkedIn Learning等平台为个人量身定制内容。这些平台使用人工智能来建议课程、跟…

面相小白的php反序列化漏洞原理剖析

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理反序列化漏洞的一些成因原理 建议学习反序列化之前 先对php基础语法与面向对象有个大体的了解 (我觉得我整理的比较细致,了解这俩是个啥就行) 漏洞实战情况 这个漏洞黑盒几乎不会被发现&am…

Flutter中的Material Theme完全指南:从入门到实战

Flutter作为一款热门的跨平台开发框架,其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用,包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例,让你轻松掌握这一工…

IDC机房服务器托管的费用组成

IDC机房服务器托管的费用,并不是只有我们所想的电费而已,还有一些其它费用组成,详细来看: 1. 机位费用:   - 机位费用是根据服务器的尺寸和占用的空间来计算的。服务器通常按照U(Unit)的高度来…

032集——圆转多段线(Circle to Polyline)(CAD—C#二次开发入门)

CAD中圆可转为带有凸度的多段线以方便后期数据计算、处理&#xff0c;效果如下&#xff1a; 白色为圆&#xff0c;红色为转换后的多段线&#xff08;为区分&#xff0c;已手工偏移多段线&#xff09; public static void XX(){var curves Z.db.SelectEntities<Entity>…

Nginx更换ssl证书不生效

一.场景 在用的ssl证书要过期了&#xff0c;申请了新的ssl证书下来&#xff0c;在nginx配置上更换上去后&#xff0c;打开系统地址&#xff0c;一依然是使用原来的旧证书&#xff0c;以前有更换过别的域名证书&#xff0c;重启nginx服务后立马就生效了。 这次没生效&#xff…

华为eNSP:MSTP

一、什么是MSTP&#xff1f; 1、MSTP是IEEE 802.1S中定义的生成树协议&#xff0c;MSTP兼容STP和RSTP&#xff0c;既可以快速收敛&#xff0c;也提供了数据转发的多个冗余路径&#xff0c;在数据转发过程中实现VLAN数据的负载均衡。 2、MSTP可以将一个或多个VLAN映射到一个Inst…

Jmeter中的配置原件(二)

5--HTTP请求默认值 用途 设置默认值&#xff1a;为多个HTTP请求设置通用的默认值&#xff0c;如服务器地址、端口号、协议等。简化配置&#xff1a;避免在每个HTTP请求中重复配置相同的参数。 配置步骤 添加HTTP请求管理器 右键点击线程组&#xff08;Thread Group&#xff…

SpringBoot(二十一)SpringBoot自定义CURL请求类

在测试SpringAi的时候,发现springAI比较人性化的地方,他为开发者提供了多种请求方式,如下图所示: 上边的三种方式里边,我还是喜欢CURL,巧了,我还没在Springboot框架中使用过CURL呢。正好封装一个CURL工具类。 我这里使用httpclient来实现CURL请求。 一:添加依赖 不需要…

空空想色?李子柒 想念你们!——早读(逆天打工人爬取热门微信文章解读)

空空想色 引言Python 代码第一篇 李子柒 想念你们&#xff01;第二篇 什么叫个性命双休结尾 引言 又开始新的尝试 最近看了坛经 所以现在佛性满满 看到很多sese的图 现在基本不会有什么想法了 以前看不懂呀 现在是借着王德峰的讲解勉强看懂 后面也会越来越懂 总之就是 空空 …

高频旁路电容选型注意事项

1. 前置频率倍减器 图1是用于1.9GHz频带的PLL信号发生器使用的前置频率倍减器的电路图。在这种高频率中&#xff0c;普通PLL用可编程序计数器不工作&#xff0c;而是把ECL等前置频率倍减器连接在前段后分频。 这种例子的分频比为1/256。例如&#xff1a;1.920GHz的输入信号分…

Android Studio | 修改镜像地址为阿里云镜像地址,启动App

在项目文件的目录下的 settings.gradle.kts 中修改配置&#xff0c;配置中包含插件和依赖项 pluginManagement {repositories {maven { urluri ("https://www.jitpack.io")}maven { urluri ("https://maven.aliyun.com/repository/releases")}maven { urlu…

PDF24:多功能 PDF 工具使用指南

PDF24&#xff1a;多功能 PDF 工具使用指南 在日常工作和学习中&#xff0c;PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并&#xff0c;还是转换 PDF 文件&#xff0c;能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

opencv实时弯道检测

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

怎么禁止文件外发?企业如何禁止文件外发,教你6种方法,综合运用效果加倍

在当今数字化的商业环境中&#xff0c;企业内部文件承载着大量关键信息&#xff0c;犹如企业的命脉。这些文件可能包含着核心技术机密、客户资料、未公开的战略规划以及敏感的财务数据等&#xff0c;它们是企业在激烈市场竞争中立足的重要资产。然而&#xff0c;随着信息传播途…

SCI论文数据可视化的在线网址

目录 SCI论文数据可视化的在线网址 EVenn(Evenn):免费 SCI论文数据可视化的在线网址 数据可视化的在线网址,以下是一些值得推荐的资源: ImageGP(ImageGP | ImageGP):该平台可以在线生成常见的线图、柱状图、散点图、箱线图、集合图、热图和直方图等。用户只需粘贴数…

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…