Scala的简单语法介绍

news2025/7/6 2:01:59

文章目录

  • 变量声明
  • 语句块
  • if语句
  • for循环
  • while、do while
  • 数组
  • Map映射
  • tuple元组

变量声明

//在Scala中val用于定义常量,var用于定义变量
var var_i = 1
var_i += 1

val val_i = 1
val_i += 1
val_i = 2

运行结果如下:
在这里插入图片描述
可以看到,常量是初始复制就确定了,不能修改和重新复制,因为常量会比变量的执行速度等快,所以能定义常量的地方就定义常量。

Scala中也有数据类型的概念:
数据类型表达:变量名:数据类型。
声明时如果不明确写出数据类型,系统会自动判断。

var var_i:Float = 1

执行结果如下
在这里插入图片描述

语句块

Scala的语句块拥有返回值,这也是为什么Scala语句比较简短的原因之一。
例如:

val i = {val a=3; val b=4; a+b}

在这里插入图片描述
每次都会返回语句块中最后一段代码的返回值,如果不存在返回值,则返回Unit,表示返回值为空的意思。

if语句

(1)单行写法,一般用于赋值语句

在这里插入图片描述

(2)多行写法
当使用其他语言风格写时(如Java):

object helloWorld {
  def main(args: Array[String]): Unit = {
    val inData = 5
    var resultIf:String = "Not assignment"
    if(inData < 5) resultIf = "inData < 5"
    else if(inData < 10) resultIf = "5 =< inData < 10"
    else resultIf = "inData >= 10"
    print(resultIf)
//    println("Hello World")
  }
}

当使用Scala语言风格写时:

object helloWorld {
  def main(args: Array[String]): Unit = {
    val inData = 5
    var resultIf:String = {
      if (inData < 5) "inData < 5"
      else if (inData < 10) "5 =< inData < 10"
      else "inData >= 10"
    }
    println(resultIf)
//    println("Hello World")
  }
}

可以看到,因为Scala语言自带语句块返回值,使得代码简洁了不少。

for循环

基本形式:
for(变量<-集合){循环体}
其中的变量不需要声明

object helloWorld {
  def main(args: Array[String]): Unit = {
    for(i<-1 to 10){
      println(i)
    }
  }
}

for 可以返回一个集合,使用yield

object helloWorld {
  def main(args: Array[String]): Unit = {
    var j = for(i<-1 to 10 if i%2==1; if i!= 7) yield i
    println(j)
  }
}

这样就j就是输出结果的一个集合。

for 嵌套
写法1:

object helloWorld {
  def main(args: Array[String]): Unit = {
    for(i<-2 to 5){
      for (j<-6 to 8) println(i * j)
    }
  }
}

输出:
12
14
16
18
21
24
24
28
32
30
35
40

写法2(scala风格):

object helloWorld {
  def main(args: Array[String]): Unit = {
    var t = for(i<-2 to 5; j <-6 to 8) yield i*j
    println(t)
  }
}

Vector(12, 14, 16, 18, 21, 24, 24, 28, 32, 30, 35, 40)
for 嵌套中的守卫可以进行可见变量的操作

while、do while

与其他语言类似
注意:scala没有其他语言相同的break、continue,类似功能可以使用守卫实现。

数组

与Java类似,分为可变和不可变数组,默认是不可变数组,初始化后长度不可变。

Map映射

键值对的集合。
[name:“张飞”, age:15, Gender:m]
两个Map相加[age:20]+[age:30] = [age:50]

就是键相同能够进行值的相加,这点用于词频统计非常方便。

tuple元组

圆括号里的数据,可以是不同的数据类型。
访问元组中的元素
使用._下标(从1开始) 进行索引
在这里插入图片描述

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

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

相关文章

Hello Erupt

前言 本系列将直接以Erupt的分布式方案为路线进行更新。本文的定位是Erupt的HelloWorld。目标&#xff0c;跑起来&#xff0c;让我们看看它是什么样的。 运行起来 准备一个数据库 第一步还是先运行起来。由于最近接触的公司项目都是在使用mysql的驱动&#xff0c;这里我也就…

python+人脸识别+opencv实现真实人脸驱动的阿凡达(上)

目录一、前言二、技术路线三、主要技术点分析(1) 人脸识别模块特征点的漂移(2) 柔性运动与刚性运动的处理setp1 基于人脸特征点的三角剖分setp2 基于三角映射的仿射变换(3) 正脸转侧脸的处理四、小结一、前言 我们在此前的名叫pythonopencv实现人脸微整形博文里已经简单地实现…

Java GUI图形编程 使用awt和swing 制作简易计算器的工具包含源码和讲解 / java练习项目

系列文章目录 提示&#xff1a;阅读本章之前&#xff0c;请先阅读目录 文章目录系列文章目录前言一、常规配置1. 设置窗口大小2. 获取当前屏幕的尺寸3. 窗口居中4. 设置窗口名称5. 添加监听器&#xff0c;关闭窗口6. 设置窗口可见性7. 设置文本框不可编辑8. 设置文本框提示9. 设…

OpenGL原理与实践——核心模式(六):光照贴图、光源分类以及多光源场景主要源码实现

本章主要以代码为主&#xff0c;理论理解即可。详细分析代码 目录 光照贴图 光源分类 平行光 点光源 shader——点光源 聚光灯 聚光灯边缘优化——光强递减 源码解析 main 全局变量、句柄 main函数主体逻辑 createModel() createTexture(const char* _filename) …

骨感传导蓝牙耳机怎么样,骨感传导耳机对于我们耳道是否有保护

在现在数码产品普及生活的时代&#xff0c;耳机也成为了我们每天的标准&#xff0c;以往佩戴的都是入耳式的耳机&#xff0c;但长时间佩戴下会出现耳朵疼痛&#xff0c;严重的更会导致听力障碍的问题发生&#xff0c;针对这一现象&#xff0c;一种新型的骨感传导耳机来到了我们…

后台默默付出的劳动者,四大组件之服务(Service)

后台默默付出的劳动者&#xff0c;四大组件之服务Service前言十、后台默默付出的劳动者&#xff0c;四大组件之服务&#xff08;Service&#xff09;10.1 服务是啥&#xff1f;10.2 Android异步消息处理机制10.2.1 Android异步消息处理机制介绍10.2.2 基于Android异步消息处理机…

Packet Tracer - 排除多区域 OSPFv2 故障

地址分配表 设备 接口 IP 地址 子网掩码 默认网关 ISP GigabitEthernet0/0 209.165.200.17 255.255.255.240 不适用 ASBR GigabitEthernet0/0 209.165.200.18 255.255.255.240 不适用 Serial0/0/0 10.1.1.2 255.255.255.252 不适用 Serial0/0/1 10.2.2…

制作一个企业网站——html华为官网购物商城项目的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

【Redis】使用 Java 客户端连接 Redis

一、三种客户端比较 Jedis : 学习成本低&#xff0c;以 Redis 命令作为方法名称&#xff0c;但是其线程不安全 lettuce&#xff1a;基于 Netty 实现&#xff0c;支持同步、异步、响应式编程&#xff08;SpringBoot&#xff09;&#xff0c;并且线程安全。支持 Redis 的哨兵模…

【附源码】计算机毕业设计JAVA幼儿健康管理系统

【附源码】计算机毕业设计JAVA幼儿健康管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

Nacos入门

文章目录一、安装nacos二、nacos项目环境配置一、安装nacos 压缩包下载地址&#xff1a; https://github.com/alibaba/nacos/releases 压缩包解压&#xff1a; nacos 中修改端口(8848 端口被占用需要修改)&#xff1a; 进入 conf 进入 application.properties 端口位置 启…

【springboot进阶】摆脱 if/else 的高级应用 - 策略模式

目录 一、策略模式的介绍 二、策略模式的使用场景 三、策略模式的应用 1、入参和出参类 2、策略接口 3、策略具体实现 4、策略测试 三、一些使用技巧 四、总结 对于一个逻辑相对复杂的功能应用中&#xff0c;难免需要做很多的逻辑判断&#xff0c;需要写一堆的 if/els…

Flink常用Sink(elasticsearch(es)Sink、RedisSink、KafkaSink、MysqlSink、FileSink)

flink输出到es、redis、mysql、kafka、file 文章目录配置pom文件公共实体类KafkaSInkElasticsearchSink(EsSink)RedisSinkMysqlSink(JdbcSink)FileSink自己先准备一下相关环境 配置pom文件 <properties><maven.compiler.source>8</maven.compiler.source>&l…

【概率论与数理统计】第四章知识点复习与习题

思维导图 基础知识 数学期望 定义 数学期望其实很好理解&#xff0c;就是均值&#xff0c;当然这里并不是直接计算样本的均值&#xff0c;而是考虑到样本对应的概率。我们分离散和连续两类来讨论数学期望。 离散型 对随机变量X的分布律为 若级数 绝对收敛&#xff0c;则称该…

BaGet搭建Nuget私仓(window10docker)

文章目录一、搭建背景二、框架简介三、私仓搭建1、环境2、win10上部署2.1安装SDK2.2下载和解压BaGet包2.3运行项目2.4类库项目2.5将包发布到私有Nuget中2.6使用BaGetFirstLib2.7使用密码增加安全性3、Docker上部署3.1创建相关文件3.2拉取镜像3.3运行3.4访问四、结束一、搭建背景…

微服务入门

文章目录一、微服务大概认识二、单体架构架构和分布式架构三、微服务架构特征四、微服务技术对比五、SpringCloud 与 SpringBoot版本兼容关系如下&#xff1a;一、微服务大概认识 二、单体架构架构和分布式架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&…

“加密上海·喜玛拉雅Web3.0数字艺术大展”落幕,AIGC和数字艺术衍生品是最大赢家?...

图片来源&#xff1a;由无界版图 AI 绘画工具生成11月11日&#xff0c;为期一个月的第一届“加密上海喜玛拉雅3eb3.0数字艺术大展”在喜玛拉雅美术馆拉开帷幕。这无疑是当下中国最盛大、最集中的一次数字艺术展览。艺术展吸引了像Soul 、小红书、网易星球、bilibili、酷天下、无…

mysql实战操作总结

1、问题描述 关于mysql操作&#xff0c;记录下&#xff1b; 2、问题说明 1.停止正在执行的sql 数据量太大&#xff0c;数据库没反应&#xff0c;用的navicat&#xff0c;就在查询页面&#xff0c;执行&#xff1a; show processlist;---会显示对应的查询sql找到最前面是id…

vue js实现文件上传压缩优化处理

vue js实现文件上传压缩优化处理 两种方法 &#xff1a; 第1种是借助canvas的封装的文件压缩上传第2种&#xff08;扩展方法&#xff09;使用compressorjs第三方插件实现 目录 vue js实现文件上传压缩优化处理 借助canvas的封装的文件压缩上传 1.新建imgUpload.js 2.全局引…

高清免费壁纸网站推荐

本期内容&#xff0c;为大家整理了6个相当不错的免费壁纸网站&#xff0c;访问量极大、活跃度极高。 无需登录、注册&#xff0c;打开右键就可以下载&#xff0c;而且壁纸图片的尺寸大小&#xff0c;可以选择&#xff0c;从手机、平板、再到电脑壁纸&#xff0c;全部都是高清。…