Scala的基础语法

文章目录

  • Scala的基础语法
    • 1.声明值和变量
    • 2.数据类型
    • 3.算术和操作符重载
    • 4.控制结构语句
      • 4.1条件分支语句
      • 4.2循环语句
    • 5.方法与函数
      • 5.1方法
      • 5.2 函数
      • 5.3 方法转换成函数

1.声明值和变量

Scala有两种类型的变量:

  1. 关键字 var 声明的变量,值是可变的
  2. 关键字 val 声明的变量,也叫常量,值是不可变的
var myvar:String="love"     // 使用var声明变量myvar
val myval:Int=10            // 使用val变量声明myval

注意事项:

  1. Scala中的变量在声明时必须进行初始化。但使用var声明的变量可在初始化后再次对变量进行赋值,而使用val声明的常量的值不可被再次赋值。
  2. 声明变量时,可不给出变量的类型,因为在初始化的时候,Scala的类型推断机制能够根据变量初始化的值自动推断出来。

与上述声明变量myvar和myval等同的代码:

var myvar="love"       // 使用var声明变量myvar
val myval=10           // 使用val变量声明myval
  1. 使用关键字 var 或 val 声明变量时,后面紧跟的变量名称不能和Scala中保留字重名,而且变量可以以字母或下画线开头,且变量名是严格区分大小写的。

代码示范:

2.数据类型

Scala中的所有制都属于某种类型,包括数值和函数

Any是所有类型的超类型,也称为顶级类型,它包含2个直接子类:

  1. AnyVal:表示值类型,值类型描述的数据是一个不为空的值,而不是一个对象。它预定义了9种类型,分别是 Double、Float、Long、Int、Short、Btye、Unit、Char和Boolean。其中,Unit是一种不代表任何意义的值类型,它的作用类似Python中的 pass。
  2. AnyRef:表示引用类型。除值类型外,所有类型都继承自AnyRef。

在Scala数据类型层级结构的底部,还有2个数据类型,分别是 NothingNull ,具体介绍如下:

  1. Nothing所有类型的子类型,也称为底部类型。它常见的用途是发出终止信号,如抛出异常、退出程序或者无限循环。
  2. Null所有引用类型的子类型,它的主要用途是与其他JVM语言互操作,几乎不在Scala代码中使用。

3.算术和操作符重载

Scala中算术操作符(+、-、*、/、%)的作用和Python是一样的,位操作符(&、|、>>、<<)的作用也是一样的。特别强调的是Scala的这些操作符是方法。

具体示范代码如下:

上述代码中,a.+(b) 中的符号 + 表示的是方法名。Scala中几乎可以用任何符号位Scala方法命名。

Scala与 java 和 python 有一个明显的不同之处是 Scala没有提供操作符++ 和 – ;如果想实现递增或者递减的效果,可以使用“ + =1 ”或者“ - =1 ”来实现

4.控制结构语句

在Scala中,控制结构语句包括条件分支语句循环语句

  1. 条件分支语句:if 语句、if…else 语句、if…else if…else 语句、if…else嵌套语句;
  2. 循环语句:for 循环、while 循环 和 do…while循环;

4.1条件分支语句

if 语句的语法格式如下:

if(布尔表达式){如果布尔表达式为true,则执行该语句块
}

if…else 语句的语法格式如下:

if(布尔表达式){如果布尔表达式为true,则执行该语句块
}else{如果布尔表达式为false,则执行该语句块
}

if…else if…else 语句的语法格式如下:

if(布尔表达式1){如果布尔表达式1为true,则执行该语句块
}else if(布尔表达式2){如果布尔表达式2为true,则执行该语句块
}else if(布尔表达式3){如果布尔表达式3为true,则执行该语句块
}else{如果以上条件都为false,则执行该语句块
}

if…else 嵌套语句的语法格式如下:

if(布尔表达式1){如果布尔表达式1为true,则执行该语句块if(布尔表达式2){如果布尔表达式2为true,则执行该语句块}
}else if(布尔表达式3){如果布尔表达式3为true,则执行该语句块else if(布尔表达式4){如果布尔表达式4为true,则执行该语句块}
}else{如果以上条件都为false,则执行该语句块
}

案例演示:判断一个变量是否等于 5,如果是 5,则打印出 “a = 5”,如果不是 5,则判断该变量是否为10,如果是 10,则打印出 “a = 10”,否则打印出“ 无法判断a的值 ”;示例代码如下:

4.2循环语句

Scala中的for循环语句和Java、Python中的for循环语句在语法上有较大的区别。

for 循环语句的语法格式:

for(变量<-表达式/数组/集合){      //箭头为大于符号"<"和减号"-"组成
循环语句;
}

示例:循环0到9,每循环一次将该值打印输出;
在Scala语法中,可以使用" 0 to 9 "表示0到9的范围,闭区间即包含首尾数,示例代码如下:

Scala在for循环语句中可以通过使用 if 判断语句过滤一些元素,多个过滤条件用分号分隔开。

例:输出 0 到 9 范围中大于5的偶数;示例代码如下:

Scala中的while循环语句只要表达式为 true ,循环体就会重复执行

while循环语句的语法格式如下:

while(布尔表达式){循环语句;
}

例:假设有一个变量x=1,判断该变量是否小于10,如果是则打印输出,然后进行 +2 运算;示例代码如下:

do…while循环语句的语法格式如下:

do{循环语句;
}while(布尔表达式)

do…while循环语句与while语句主要区别是:do…while语句的循环语句至少执行一次。

例:假设一个变量y=10,先打印输出,然后进行 +1 运算,再判断该变量是否小于20,如果是则进行循环;示例代码如下:

5.方法与函数

Scala的方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话说,在类中定义的函数既是方法
Scala中可以使用 def 语句和 val 语句定义函数,而定义方法只能使用 def 语句

5.1方法

Scala方法的定义格式如下:

def functionName([参数列表]):[return type]={function body
return[expr]
}

从上面代码可以看出,Scala的方法由多个部分组成:

  1. def:Scala的关键字,并且是固定不变的,一个方法的定义是由def关键字开始的;
  2. functionName:Scala方法的方法名
  3. ([参数列表]):[return type]:Scala方法的可选参数列表,参数列表中的每个参数都有一个名字,参数名后跟着冒号和参数类型
  4. function body:方法的主体
  5. return[expr]:Scala方法的返回类型,可以是任意合法的Scala数据类型,若无返回值,则返回类型为Unit。

例:定义一个方法add(),实现两个数相加求和;示例代码如下:

Scala的方法调用格式如下:

functionName(参数列表)   //没有使用实例的对象调用方式
[instance.]functionName(参数列表)    //方法由实例对象来调用

接上例调用:

5.2 函数

在Scala中,由于使用 def 语句定义以及调用函数的格式均与方法一样,然而,Scala函数与Scala方法还是有区别的,可以使用 val 语句定义函数的格式,并且函数必须要有参数列表,而方法可以没有参数列表。

Scala 函数的定义格式如下:

val functionName  = ([参数列表])=>function body

例:定义一个函数addInt,实现两个整数相加求和;示例代码如下:

函数的调用跟方法一样:functionName(参数列表)

5.3 方法转换成函数

方法转换成函数的格式如下:

val 函数name = 方法name _

在上述的格式中,方法name后紧跟一个空格下划线,是为了告知编译器将方法name转换成函数,而不是调用这个方法。

例:定义一个方法m,实现将方法m转成函数 f ;示例代码如下:

提示:Scala方法的返回值类型可以不写,编译器可以自动推断出来,但对于递归函数来说,必须要指定返回类型

本博客到此就结束嘞,有帮助或学到东西的话,给个点赞支持一下吧,制作不易,我是不吃泡面,不知会写BUG,关注我,持续更新Spark大数据分析的内容,有什么问题欢迎评论区留言指正噢,我们下章再见 ~

Scala的基础语法(超详细版)相关推荐

  1. DM数据库——模式、表、索引管理基础(超详细版)

    DM数据库--模式.表.索引管理基础(超详细版) 一.管理模式对象的空间 1.DM8对普通表和索引提供的参数 2.DM8对HUGE表提供的参数 3.空间限制 4.查看占用的空间 二.管理表 1.设计表 ...

  2. spring boot整合freemarker及freemarker基础语法超详细讲解

    采用模板+数据=HTML 实现页面的静态化. 也就是服务端的页面静态化技术. JSP/Freemarker/Thymeleaf是常见的模板引擎. 引依赖 okhttp与HttpClient一样的作用, ...

  3. MySQL基础语法(详细版)

    文章目录 1.数据库的介绍 1.1 数据库概念 1.1.1 数据的存储方式 1.1.2 什么是数据库 2.数据库的安装与卸载 2.1数据库的安装 2.2数据库的卸载 3.数据库服务的启动与登录 3.1 ...

  4. 高德地图基础教程超详细版

    在当前社会,对于地图的使用是很必须的,所以对于程序员来说也是需要掌握的技能,目前主流的又百度地图和高德地图,但是我建议使用高德地图,因为百度地图的API着实不好用吖,不好理解,对于开发人员来说,高德地 ...

  5. Redis 超详细版教程笔记

    视频教程:[狂神说Java]Redis最新超详细版教程通俗易懂 视频地址:https://www.bilibili.com/video/BV1S54y1R7SB 目录索引 nosql 阿里巴巴架构演进 ...

  6. Docker超详细版教程通俗易懂 -之- 入门篇

    前言 学习Docker,你可以熟练的操作命令,能够把你的项目构建成Docker镜像! 是后端开发人员必备的技能!下面是自己的学习笔记,希望能帮助到需要的你! 特别感谢哔哩哔哩狂神:[狂神说Java]D ...

  7. Docker超详细版教程通俗易懂 -之- 进阶篇

    此刻的你,已成功入门Docker.让我们一起继续深造(内容不难,很有意思) 容器数据卷 什么是容器数据卷 docker的理念回顾:将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删 ...

  8. Docker02 狂神Docker视频学习笔记 :【狂神说Java 哔哩哔哩】Docker最新超详细版教程通俗易懂

    目录 0. 视频源 0. 学习网址 基础篇 1. Docker概述 1.1 Docker为什么出现? 1.2 Docker历史 1.3 Docker能干什么 2. Docker安装 2.1 Docke ...

  9. Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版

    Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版 一.资源 Linux下的Redis的下载地址 二.安装与测试 上传至自己的Linux平台 解压安装包 tar ...

最新文章

  1. django.core.exceptions.ImproperlyConfiguredmysqlclient 1.3.13 ornewer is required you have 0.9.2(亲测)
  2. 在Ubuntu 20.04 LTS中配置Java开发环境
  3. 前端学习(1165):扩展运算符01
  4. 软件测试菲律宾,英雄联盟手游菲律宾测试资格怎么得 菲律宾测试资格获取攻略[多图]...
  5. python实现共轭梯度算法(含误差与运算次数的折线图)
  6. Java设计模式学习记录-单例模式
  7. HDU 4515 推断时间
  8. python+tensorflow+captcha库:基于TF快速破解验证码
  9. 使用sklearn PCA主成分分析对图像特征进行降维
  10. Zerodium 称 iOS exploit 过剩,将暂停收购且买价或下跌
  11. 在ASP.NET中使用AJAX的简单方法 转载
  12. java 打印字体中的字_输入文字,输出点阵文字
  13. srvany.exe和instsrv.exe打包exe为windows服务趟的坑
  14. 名编辑电子杂志大师教程 | 仿古书翻页
  15. Follow My Heart Of Jan.Feb.Mar. 2023
  16. 51单片机-RGB灯带
  17. PMP缓考怎么操作?
  18. Share:电脑右下角 今日热文 广告和图标怎么关闭
  19. symbian 模拟器 相关
  20. Python—SJ—实验6—加密解密文本

热门文章

  1. 我们为什么需要仿真服务机器人?
  2. TB,GB,MB,KB,Byte字节,bit位 如何换算?
  3. web服务器推送技术
  4. JVM中栈的frames详解
  5. MATLAB实现在不同Es/N0情况下,QPSK、16QAM、64QAM误码率结果仿真图(包含软硬判决)
  6. 如何报考系统集成项目管理工程师?
  7. 微信公众号的前端热门文章及链接(不定期更新)
  8. linux下硬件检测工具,Linux硬件检测工具
  9. 四、项目进度管理20题
  10. 【IOS学习之工具学习】sublime text mac(代码编辑器)