首页 > 其他分享 >scala的基本语法

scala的基本语法

时间:2024-04-28 20:46:22浏览次数:51  
标签:基本 java scala 语法 Range 操作符 println immutable

区分常量和变量

常量

变量

写一行代码,写多行代码,终端代码

数据类型

  • byte
  • char
  • short
  • int
  • long
  • float
  • double
  • boolean

 数据类型与java相似,但与java不同的事,在scala中,这些类型都是“类”,并且都是包scala的成员。
比如,int的全名是scala.Int

字面量(literal)

操作符

Scala 是一种多范式编程语言,它支持多种操作符,包括算术操作符、关系操作符、逻辑操作符、位操作符、赋值操作符以及一些特殊的操作符。

以下是一些主要的 Scala 操作符:

  1. 算术操作符
    • +:加法
    • -:减法
    • *:乘法
    • /:除法
    • %:取模(求余数)
  2. 关系操作符
    • ==:等于
    • !=:不等于
    • >:大于
    • <:小于
    • >=:大于或等于
    • <=:小于或等于
  3. 逻辑操作符
    • &&:逻辑与
    • ||:逻辑或
    • !:逻辑非
  4. 位操作符
    • &:按位与
    • |:按位或
    • ^:按位异或
    • ~:按位取反
    • <<:左移
    • >>:带符号右移
    • >>>:无符号右移
  5. 赋值操作符
    • =:赋值
    • +=-=*=/=%=:复合赋值操作符
  6. 其他特殊操作符
    • :::方法调用操作符(实际上是一个方法名,但通常用作操作符)
    • ::::创建一个新的集合,并添加元素到其尾部
    • +::将一个元素添加到集合的尾部
    • ++:连接两个集合
    • --:从集合中移除一个元素
    • in:检查元素是否存在于集合中
    • match:模式匹配操作符
    • =>:在函数定义、映射和偏函数中使用
    • _:通配符,用于忽略某些值或在模式匹配中表示任意值

这些只是 Scala 中操作符的一部分。由于 Scala 的灵活性和多范式特性,还可以自定义操作符,但通常需要遵守一些规则和约定。

 在scala中,操作符等同于方法。

  • 例子:
scala> var x = 2+2
x: Int = 4

scala> var x=1+2
x: Int = 3

scala> var y=1.+(2)
y: Int = 3

scala> var z=1.+(2)
z: Int = 3

scala> println(x == y)
true

scala> println(x == z)
true

scala> println(y == z)
true

  • 总结:
    a 方法 b 等价于 a.方法(b)
    前者是后者的简写形式。

递增和递减

与java不同,在scala中没有提供++--操作符,如果想要表达递增或者递减,那么可以使用+=,-=

实例:

scala> var num = 0
num: Int = 0

scala> println(num)
0

scala> num += 1

scala> println(num)
1

scala> num += 1

scala> println(num)
2

富包装类

对于基本的数据类型,除了除了以上操作符之外,scala还提供了许多常用运算的方法,只是这些方法不是在基本类里面定义,而是被封装到一个对应的富包装中。
每个对应的类型都有一个对应的富包装类,比如int类型对应的富包装类是RichInt,这些类位于包scala.runtime中。
当对一个基本数据类型的对象调用其富包装类提供的方法,scaka会自动通过隐式转换将该对象转换为对应的富包装类,然后在调用相应的方法。

实例:

scala> 3 max 8
res12: Int = 8
scala> 19.0 max 97
res14: Double = 97.0

range

在scala中,range是一个特殊的集合,可以用来表示一个范围。
在执行for循环时,我们经常会用到数值序列(比如,i的值从1循环到5),这时就可以采用range来简化代码。
range可以支持创建不同数据类型的数值序列

实例:

//步长不可以为0,步长为0,那么数据不会变
scala> 1 to 10 by 0
java.lang.IllegalArgumentException: step cannot be 0.
  at scala.collection.immutable.Range.<init>(Range.scala:86)
  at scala.collection.immutable.Range$Inclusive.<init>(Range.scala:430)
  at scala.collection.immutable.Range$Inclusive.copy(Range.scala:433)
  at scala.collection.immutable.Range.by(Range.scala:135)
  ... 30 elided
//步长为1
scala> 1 to 10 by 1
res16: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
//步长为2
scala> 1 to 10 by 2
res17: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)
//步长为3
scala> 1 to 10 by 3
res18: scala.collection.immutable.Range = Range(1, 4, 7, 10)

scala>

控制台输入输出语句

为了从控制台读写数据,可以使用以read为前缀的方法,包括:readint,redadouble,readline,readchar,readboolean,readline等。分别对应9中数据类型,其中前8中方式,没有参数,readline可以不提供参数,也可以带一个字符串参数的提示。
所有的函数都属于对象scala.io.StdIn,使用前必须导入,活着直接使用全称进行调用。

实例:

//不导入函数,会报错

scala> var i = readInt()
warning: there was one deprecation warning; re-run with -deprecation for detail
s
java.lang.NumberFormatException: For input string: ";"
  at java.base/java.lang.NumberFormatException.forInputString(NumberFormatExcep
tion.java:67)
  at java.base/java.lang.Integer.parseInt(Integer.java:588)
  at java.base/java.lang.Integer.parseInt(Integer.java:685)
  at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:273)
  at scala.collection.immutable.StringOps.toInt(StringOps.scala:29)
  at scala.io.StdIn$class.readInt(StdIn.scala:110)
  at scala.io.StdIn$.readInt(StdIn.scala:229)
  at scala.DeprecatedPredef$class.readInt(Predef.scala:440)
  at scala.Predef$.readInt(Predef.scala:70)
  ... 30 elided
//导入函数,不会报错
scala> import io.StdIn._    //S和I都是大写下划线不要忘记
import io.StdIn._

scala> var i = readInt()    //回车之后会卡住,等你输入数据之后,回车
i: Int = 5499

scala>

scala还带有c语言风格的格式化字符串的printf()函数

print(),printf(),println()都在对象Predef中定义,该对象默认情况下被所有scala程序引用,因此不需要导入,可以直接使用。

scala> printf("hello")
hello
scala> println("hello")
hello

scala> print("hello")
hello
//
scala> var x=102
x: Int = 102
scala> printf("%d",x)
102
scala> print(x)
102
scala> println(x)
102

读写文件

scala需要使用java.io.PrintWriter类来写文件,使用java.io.BufferedReader类来读文件。
默认生成的文件指定路径,如果不是绝对路径,那么默认是当前目录下(启动scala时,所在的路径)。

标签:基本,java,scala,语法,Range,操作符,println,immutable
From: https://www.cnblogs.com/humlogs/p/18162393

相关文章

  • 基本功-参数校验放在哪
    规范性验证放在Controller层例如不能为空,不能为null等基本的规范性验证。前端也验证过了,后端验证确保健壮。但其实它不属于任何业务。而且Springboot里面的@Validated,@NotNull@NotBlank校验注解也是放在Controller层的。所以规范性校验放在Controller层是大家都比较认可的。......
  • Pandas的基本使用
    Pandas的使用下载pipinstallpandaspandas数据读取数据类型 说明 pandas读取方法csv、tev、txt 用逗号分隔、tab分隔的纯文字文件 pd.read_csvexcel 微软xls或者xlsx文件 pd.read_excelmysql 关系型数据库 pd.read_sql导入importpandasaspd1......
  • 编译原理PL0语法分析实验1
    编译原理PL0语法分析实验11,待分析的简单语言的词法相同点:都是分析种别码不同点:词法分析器分析的是字符串中的单词的种别码(单词)语法分析器分析的是字符串的文法是否正确(句子)待分析的简单语言的语法BNF:(1)<程序>::=begin<语句串>end(2)<语句串>::=<语句>{;<语句>}(3)<语句>::=<赋值语句>......
  • 揭秘JavaScript数据世界:一文通晓基本类型和引用类型的精髓!
    在编程的世界里,数据是构建一切的基础。就像建筑师需要了解不同材料的强度和特性一样,程序员也必须熟悉各种数据类型。今天,我们就来深入探讨JavaScript中的数据类型,看看它们如何塑造我们的代码世界。一、JavaScript数据类型简介数据类型是计算机语言的基础知识,数据类型广泛用于变......
  • openGauss 语法
    语法默认情况下,数据库安装成功,登录后,可以使用\help语句查看所有openGauss的SQL语法。openGauss=#\helpAvailablehelp:ABORTALTERTABLECREATEDATABASECREATETEXTSEARCHCONFIGURATIONDROPOPE......
  • 在mobaxten上使用scala报错
    查看报错信息[ERROR]Failedtoconstructterminal;fallingbacktounsupportedjava.io.IOException:Cannotrunprogram"sh":CreateProcesserror=2,系统找不到指定的文件。点击查看代码27/04/202418:52.17/home/mobaxtermscalaWelcometoSc......
  • Markdown语法
    1Markdown语法Markdown语法是一种轻量级标记语言,用于文档排版和格式化。以下是Markdown的一些常用语法:1.1标题#标题一##标题二###标题三####标题四#####标题五######标题六1.2文本样式**粗体***斜体*~~删除线~~1.3列表无序列表:-项目一-项目二-项......
  • 搭建单机版伪分布式Hadoop+Scala+spark
    搭建单机版伪分布式Hadoop+Scala+spark修改ip[root@master~]#nmcliconnectionaddifnameens32con-nameens32autoconnectyesipv4.methodmanualipv4.gateway192.168.130.2ipv4.addresses192.168.130.102/24ipv4.dns114.114.114.114[root@master~]#nmcliconu......
  • Git基本使用
    目录序言Git是什么?为什么要做版本控制?安装git使用大体流程回滚回滚至之前版本回滚之之后版本撤销修改从暂存区回滚到工作区商城&紧急修复bug分支紧急修复bug方案命令总结工作流GitHub第五阶段:进军三里屯第一天上班前在家上传代码初次在公司新电脑下载代码下班回到家继续写代码到......
  • 硬盘保存及维护基本常识
    目录目录硬盘使用寿命简介硬盘供电简介硬盘保存简介硬盘使用寿命简介硬盘在连续使用3-4年后就需要注意了(一般为质保期时间后一点),5-6年后就需要更换硬盘了.五年左右的时候留意更换机械硬盘,如果不是特备重要的数据,可以考虑观察,一旦有任意一块硬盘出现故障,不要犹豫,立刻重建数......