【Scala】(二)Scala 基本语法及操作、程序控制结构

7 篇文章 4 订阅
订阅专栏

一、Scala概述

scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性。
scala运行在虚拟机上,并兼容现有的Java程序。
Scala源代码被编译成java字节码,所以运行在JVM上,并可以调用现有的Java类库。

二、第一个Scala程序

Scala语句末尾的分号可写可不写

HelloSpark.scala

object HelloSpark{
    def main(args:Array[String]):Unit = {
        println("Hello Spark!")
    }
}

三、Scala的基本语法

1、概述

/**
  * Scala基本语法:
  * 区分大小写
  * 类名首字母大写(MyFirstScalaClass)
  * 方法名称第一个字母小写(myMethodName())
  * 程序文件名应该与对象名称完全匹配
  * def main(args:Array[String]):scala程序从main方法开始处理,程序的入口。
  *
  * Scala注释:分为多行/**/和单行//
  *
  * 换行符:Scala是面向行的语言,语句可以用分号(;)结束或换行符(println()*
  * 定义包有两种方法:
  *   1、package com.ahu
  *      class HelloScala
  *   2、package com.ahu{
  *       class HelloScala
  *     }
  *
  * 引用:import java.awt.Color
  * 如果想要引入包中的几个成员,可以用selector(选取器):
  *   import java.awt.{Color,Font}
  *   // 重命名成员
  *   import java.util.{HashMap => JavaHashMap}
  *   // 隐藏成员 默认情况下,Scala 总会引入 java.lang._ 、 scala._ 和 Predef._,所以在使用时都是省去scala.的
  *   import java.util.{HashMap => _, _} //引入了util包所有成员,但HashMap被隐藏了
  */

2、Scala的数据类型

Scala 与 Java有着相同的数据类型,下表列出了 Scala 支持的数据类型:

数据类型描述
Byte8位有符号补码整数。数值区间为 -128 到 127
Short16位有符号补码整数。数值区间为 -32768 到 32767
Int32位有符号补码整数。数值区间为 -2147483648 到 2147483647
Long64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807
Float32位IEEE754单精度浮点数
Double64位IEEE754单精度浮点数
Char16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF
String字符序列
Booleantrue或false
Unit表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。
Nullnull 或空引用
NothingNothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。
AnyAny是所有其他类的超类
AnyRefAnyRef类是Scala里所有引用类(reference class)的基类

Scala多行字符串的表示方式

var str =
      """
        |第一行
        |第二行
        |第三行
      """.stripMargin
    println(str)

在这里插入图片描述

3、Scala的变量

object VariableTest {
  def main(args: Array[String]) {
    //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
    val i = 1
    //使用var定义的变量是可变的,在Scala中鼓励使用val
    var s = "hello"
    //Scala编译器会自动推断变量的类型,必要的时候可以指定类型
    //变量名在前,类型在后
    val str: String = "world"
  }
}

总结:

1)数据类型可以指定,也可以不指定,如果不指定,那么就会进行数据类型的推断

2)如果指定数据类型,数据类型的执行 方式是 在变量名后面写一个冒号,然后写上数据类型

3)我们的scala里面变量的修饰符一共有两个,一个是var 一个是val,如果是var修饰的变量,那么这个变量的值是可以修改的。如果是val修饰的变量,那么这个变量的值是不可以修改的。

4、Scala访问修饰符

Scala访问修饰符和Java基本一样,分别有private、protected、public。

默认情况下,Scala对象的访问级别是public。

(1)私有成员 private

private关键字修饰的成员仅在包含了成员定义的类或对象内部可见。

class Outer {
  class Inner{
    def start() = println("start")
    def end() = println("end")
    private def pause() = println("pause")
  }

  new Inner().start()
  new Inner().end()
  new Inner().pause() // 注意这里会报错

}

在上面的代码里start和end两个方法被定义为public类型,可以通过任意Inner实例访问;pause被显示定义为private,这样就不能在Inner类外部访问它。执行这段代码,就会如注释处声明的一样,会在该处报错。

(2)protected

和私有成员类似,Scala的访问控制比Java来说也是稍显严格些。在 Scala中,由protected定义的成员只能由定义该成员和其派生类型访问。而在 Java中,由protected定义的成员可以由同一个包中的其它类型访问。在Scala中,可以通过其它方式来实现这种功能。

package p
{
    class Super
    {
        protected def f(){println("f")}
    }

    class Sub extends Super
    {
        f() //OK
    }

    class Other
    {
        (new Super).f() //Error:f不可访问
    }
}
(3)public

public访问控制为Scala定义的缺省方式,所有没有使用private和 protected修饰的成员(定义的类和方法)都是“公开的”,这样的成员可以在任何地方被访问。Scala不需要使用public来指定“公开访问”修饰符。

注意:Scala中定义的类和方法默认都是public的,但在类中声明的属性默认是private的。

(4)作用保护域

作用域保护:Scala中,访问修饰符可以通过使用限定词强调。
private[x] 或者 protected[x]
private[x]:这个成员除了对[…]中的类或[…]中的包中的类及他们的伴生对象可见外,对其他的类都是private

package bobsrockets
{
    package navigation
    {
        //如果为private class Navigator,则类Navigator只会对当前包navigation中所有类型可见。
        //即private默认省略了[X],X为当前包或者当前类或者当前单例对象。
        //private[bobsrockets]则表示将类Navigator从当前包扩展到对bobsrockets包中的所有类型可见。
        private[bobsrockets] class Navigator
        {
            protected[navigation] def useStarChart() {}
            class LegOfJourney
            {
                private[Navigator] val distance = 100
            }

            private[this] var speed = 200
        }
    }
    package launch
    {
        import navigation._
        object Vehicle
        {
            //private val guide:表示guide默认被当前单例对象可见。
            //private[launch] val guide:表示guide由默认对当前单例对象可见扩展到对launch包中的所有类型可见。
            private[launch] val guide = new Navigator
        }
    }
}

在这个例子中,类Navigator使用 private[bobsrockets] 来修饰,这表示这个类可以被bobsrockets包中所有类型访问,比如通常情况下 Vehicle无法访问私有类型Navigator,但使用包作用域之后,Vechile 中可以访问Navigator。

5、Scala运算符

【Scala】(三)Scala基础之运算符

6、条件表达式

Scala的的条件表达式比较简洁,例如:

def main(args: Array[String]): Unit = {
    val x = 1
    //判断x的值,将结果赋给y
    val y = if (x > 0) 1 else -1
    //打印y的值
    println("y=" + y)

    //支持混合类型表达式
    val z = if (x > 1) 1 else "error"
    //打印z的值
    println("z=" + z)

    //如果缺失else,相当于if (x > 2) 1 else ()
    val m = if (x > 2) 1
    println("m=" + m)

    //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
    val n = if (x > 2) 1 else ()
    println("n=" + n)

    //if和else if
    val k = if (x < 0) 0
    else if (x >= 1) 1 else -1
    println("k=" + k)
  }

在这里插入图片描述
总结:

1)if条件表达式它是有返回值的

2)返回值会根据条件表达式的情况会进行自动的数据类型的推断。

7、块表达式

def main(args: Array[String]): Unit = {
    val x = 0
    val result = {
      if(x < 0)
      else if(x >= 1)
        -1
      else
        "error"
    }
    println(result)
  }

在这里插入图片描述

8、循环

(1)while循环
def main(args: Array[String]): Unit = {
    var n = 10
    while ( {
      n > 0
    }) {
      println(n)
      n -= 1
    }
  }

总结:

1)while使用跟java一模一样

2)注意点:在scala里面不支持 i++ i-- 等操作
统一写成 i-=1

(2)for循环

在scala中有for循环和while循环,用for循环比较多

for循环语法结构:

for (i <- 表达式/数组/集合)

def main(args: Array[String]): Unit = {
    //for(i <- 表达式),表达式1 to 10返回一个Range(区间)
    //每次循环将区间中的一个值赋给i
    for (i <- 1 to 10)
      print(i+"\t")

    //for(i <- 数组)
    println()
    val arr = Array("a", "b", "c")
    for (i <- arr)
      println(i)

    //高级for循环
    //每个生成器都可以带一个条件,注意:if前面没有分号
    for(i <- 1 to 3; j <- 1 to 3 if i != j)
      print((10 * i + j) + " ")
    println()

    //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
    //每次迭代生成集合中的一个值
    val v = for (i <- 1 to 10) yield i * 10
    println(v)

  }

在这里插入图片描述
总结:

1)在scala里面没有运算符,都有的符号其实都是方法。

2)在scala里面没有++ – 的用法

3)for( i <- 表达式/数组/集合)

4)在for循环里面我们是可以添加if表达式

5)有两个特殊表达式需要了解:

To 1 to 3 1 2 3

Until 1 until 3 12

6)如果在使用for循环的时候,for循环的时候我们需要获取,我们可以是使用yield关键字。

9、方法和函数

(1)定义方法

在这里插入图片描述
方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型。

如果不写等号,代表没有返回值。

(2)定义函数

在这里插入图片描述

(3)方法和函数的区别

在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作

案例:首先定义一个方法,再定义一个函数,然后将函数传递到方法里面

在这里插入图片描述

object TestScala {
  //定义一个方法
  //方法m2参数要求是一个函数,函数的参数必须是两个Int类型
  //返回值类型也是Int类型
  def m1(f:(Int,Int) => Int) : Int = {
    f(2,6)
  }
  //定义一个函数f1,参数是两个Int类型,返回值是一个Int类型
  val f1 = (x:Int,y:Int) => x+y
  //再定义一个函数f2
  val f2 = (m:Int,n:Int) => m*n
  //main方法
  def main(args: Array[String]): Unit = {
    //调用m1方法,并传入f1函数
    val r1 = m1(f1)
    println("r1="+r1)
    //调用m1方法,并传入f2函数
    val r2 = m1(f2)
    println("r2="+r2)
  }
}
(4)将方法转换成函数

在这里插入图片描述

Scala学习笔记一:Scala基本操作
一壶清茶的专栏
03-06 465
Scala 基础语法 1.Scala安装 window环境下安装Scala,官网下载scala-2.11.11.msi文件,使用下载下来的msi文件,根据安装向导完成Scala的安装。 配置Scala环境变量,配置$SCALA_HOME/bin目录 cmd命令行,键入scala -version,验证配置是否正确有效 命令行键入scala,打开scala命令行,可进行scala编程 2.Scala解释器的使用 REPL:Read(取值)->Evaluation(求值)-&gt
scala入门基础知识-语法及控制结构
prroda的博客
12-22 267
1 Scala基础知识和语法 1.1 语法特点 (1)可拓展:面向对象、函数式编程 (2)兼容JAVA:类库调用、互操作 (3)语法简洁:代码行短、类型推断、抽象控制 (4)静态类型化:可检验、安全重构 (5)支持并发控制:强计算能力、自定义其他控制结构 1.2 Scala和Java的关系 (1)都是基于JVM虚拟机运行的 Scala编译之后的文件也是.class,都要转换为字节码,然后运行在J...
第一课、Scala基本语法和控制结构
u012893747的博客
08-03 669
1.Scala介绍      Scala 是一种把面向对象和函数式编程理念加入到静态类型语言中的混血儿。Scala 的许多不同的方面都展现了面向对象和函数式编程的熔合 2.函数式编程的两种理念 1)第一种       函数式头等值,在函数式语言中,函数也是值,与整数或字符串处于同一个地位       函数可以被当做采纳数传给其他函数,可以当做结果从函数中返回或保存在变量
Scala基础操作
w_mchen的博客
12-03 181
函数,参数构造,隐式类
scala的基础操作
lmloveyy的博客
04-30 272
目录 一、基础语法 、数据类型 三、变量 四、运算符 五、IF。。ELSE。。 六、循环 七、方法与函数 八、字符串、数组、集合 九、类和对象 十、模式匹配 十一、文件IO 一、基础语法 对象、类、方法、字段(对象的属性) 脚本形式:scalac、scala object HelloWorld { /* 这是我的第一个 Scala 程序 ...
Scala:它包含一些scala程序以了解其语法
03-12
压缩包"Scala-main"可能包含了各种示例程序,从简单的变量定义、控制结构到更复杂的函数式编程技巧和面向对象设计模式。通过学习和分析这些例子,你可以逐步掌握Scala的语法和编程风格,理解如何在实际项目中应用...
Scala程序设计第
10-26
1. **Scala基础**:首先,书本会介绍Scala基本语法,如变量定义、数据类型(包括基本类型和复杂类型如数组和集合)、控制结构(如if-else、for循环和while循环)、函数和方法等。 2. **面向对象编程**:Scala是...
Scala语法简明教程
05-09
### Scala语法简明教程知识点详解 #### Scala语言简史 - **诞生历史**:Scala起源于瑞士联邦理工学院洛桑(EPFL),由Martin Odersky在2001年开始设计,其灵感来源于Funnel——一种结合了函数式编程思想与Petri网...
快学 scala 语法大全
01-16
此文档是scala的语法大全,一共分为22章,控制结构,特质,高阶函数,集合,模式匹配,样例类,解析,actor等都包括在内。
Scala基本常用操作
quancuizuishuai的博客
09-01 394
与java不同,scala里面都是类的操作 object test { /** * 有参 * @param x 返回值x */ def show(x:Int): Int = { return x } /** * 无参 */ def show2():Unit = { println("无参") } def main(args: Array[String]): Unit = { //变量 var a = 100
scala 语法基础】变量、函数、控制结构、数据类型
赖德发的博客
08-31 530
一、主要内容 Scala变量的声明与函数定义 Scala中的控制结构 Scala中的数据类型1:变量声明与函数定义 变量声明:val 和 var ,两者的区别是val声明的变量是不可变的,而var声明的变量可变带返回值scala> def max(x:Int,y:Int):Int = { | if(x>y) x | else y
scala程序控制结构
leo
10-10 783
在Java中能使用if else等语句自如控制程序的流向,在sacala中又是如何控制的呢?
大数据Spark “蘑菇云”行动前传第3课:在IDE下开发第一个Scala程序透彻解析及Scala控制结构详解实战
段智华的博客
07-20 1032
大数据Spark “蘑菇云”行动前传第3课:在IDE下开发第一个Scala程序透彻解析及Scala控制结构详解实战 1 通过IDE 开发第一个scala程序彻底详解 2 scala基础语法和控制结构实战详解     object作为scala的一个关键字,相当于 java中public static class这样的一个修饰符, object中的成员都是静态的,main方法是静态的,不
scala 开发入门(2)-- 程序控制结构
ouprince
03-06 239
if判断结构 语法格式如下: //简单的条件判断 if (条件判断) { //执行语句} if (x<10) println(s"$x is smaller than 10") //if...else...语句 if(条件判断) {//为真时执行} else {//为假时执行} //if...else if...else...语句 if(表达式1) {//表达...
SCALA 基础操作篇4
不管大小写的博客
07-07 602
8.面向对象编程之继承extends Scala中,让子类继承父类,与Java一样,也是使用extends关键字 继承就代表,子类可以从父类继承父类的field和method;然后子类可以在自己内部放入父类所没有,子类特有的field和method;使用继承可以有效复用代码 子类可以覆盖父类的field和method;但是如果父类用final修饰,field和method用final修饰,则该类是...
scala——常用操作:2. 常用操作
ant的博客
04-25 1446
ctrl+alt+V 自动创建变量名 ctrl+alt+L 自动规范格式 package test01 object test { def main(args: Array[String]): Unit = { //创建一个list val list0 = List(2, 5, 9, 6, 7, 1, 8, 3, 4, 0) println(list0) //list每...
scala运行的方式
ningyanggege的博客
01-15 1208
问题起源:  使用nohup令程序不中断运行,使用java来运行scala程序,并将信息无论正确(1)还是错误的都重定向到log文件中
Scala语言学习一——基础语法
heartless_killer的博客
11-28 607
什么是 Scala Scala 是一种多范式的编程语言, 其设计的初衷是要集成面向对象编程和函数式编程的各种 特 性 。 Scala 运 行 于 Java 平 台 (Java 虚 拟 机 ) , 并 兼 容 现 有 的 Java 程 序 。 为什么要学 Scala 优雅: 这是框架设计师第一个要考虑的问题, 框架的用户是应用开 雅直接影响用户体验。 速度快: Scala 语言表达能力强, ...
写文章

热门文章

  • 简单了解一下电商系统中的SPU、SKU、ID,它们都是什么意思,三者又有什么区别和联系呢? 35696
  • 【大数据面试题】(八)Spark 相关面试题 28701
  • 数据仓库系列(三)数仓分层的意义价值及如何设计数据分层 21635
  • 从零开始的大数据技术学习路线指南:带你轻松成为大数据开发工程师! 21071
  • 说好的大数据开发面经来啦!热乎的,冲冲冲!! 19870

分类专栏

  • 数仓实践 付费 26篇
  • 读书笔记 💚 18篇
  • Big Data 🧡 1篇
  • ---- Hadoop 9篇
  • ---- Hive 37篇
  • ---- Flink 29篇
  • ---- Spark 25篇
  • ---- Spark MLlib 10篇
  • ---- Spark Streaming 6篇
  • ---- Flume 8篇
  • ---- Kafka 27篇
  • ---- HBase 14篇
  • ---- MongoDB 3篇
  • ---- Sqoop 2篇
  • ---- Kylin 2篇
  • ---- Druid 9篇
  • ---- NiFi 2篇
  • ---- Oozie 3篇
  • ---- Azkaban 2篇
  • ---- Zookeeper 2篇
  • ---- Dataphin 4篇
  • ---- Alibaba Cloud 17篇
  • ---- ElasticSearch 7篇
  • ---- Scala 基础 7篇
  • ---- 数据中台 3篇
  • ---- 数仓架构 5篇
  • ---- 数仓理论 9篇
  • ---- 面试总结 16篇
  • ---- 业务思考和解读 2篇
  • Personal blogs (๑•̀ㅂ•́)و✧ 14篇
  • Basis 🧡
  • ---- Data Structure 2篇
  • ---- Algorithm 8篇

最新评论

  • 【Hive】FROM_UNIXTIME() 和 UNIX_TIMESTAMP()时间戳函数用法

    shifengdu-math: unix_timestamp函数用法中的第三条应该是不满足该形式

  • Tomcat环境变量配置及安装过程中错误解决方法记录

    2301_82211410: 请问一下,点击bin下的startup.bat 老是闪进闪退是什么原因啊表情包表情包

  • 数仓实践:关于维度表的设计与实践

    赏金码农: 假的吧,直接搬运阿里巴巴大数据之路里的原书内容,还搞收费不要毗连

  • 【NiFi】(二)三分钟搞定 NiFi 安装与简单使用!

    呆头鹅syy: /root/input是什么文件夹啊 这里可以填写本地计算机的文件夹不

  • 从零开始的大数据技术学习路线指南:带你轻松成为大数据开发工程师!

    H alo: 我想问一下,大数据开发的项目应该怎么找,自己完成的话可以写进简历吗

最新文章

  • 数仓实践:数据开发需要了解的 BI 数据分析方法
  • 为什么全网都在看衰数据中台,数据中台是陷阱,还是利器?
  • 聚焦电商场景,详解抖音集团埋点及归因分析方案
2024年28篇
2023年3篇
2022年18篇
2021年28篇
2020年275篇
2019年261篇
2018年5篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢摆件雕塑现货玻璃钢雕塑我图片惠州安阳玻璃钢卡通雕塑玻璃钢雕塑雕刻制作白沙玻璃钢卡通人物雕塑设计博白玻璃钢泡沫雕塑厂家柳州玻璃钢雕塑设计小猪佩奇商场美陈策划珠海玻璃钢雕塑制品甘肃楼盘玻璃钢人物雕塑艺术摆件泡沫玻璃钢彩绘雕塑制作厂家卡通玻璃钢雕塑玻璃钢植物雕塑安装葡萄玻璃钢雕塑设计厂家衢州水果玻璃钢雕塑永州人物玻璃钢雕塑订制淮北动物玻璃钢雕塑批发广西仿铜玻璃钢雕塑四方玻璃钢花盆花器玻璃钢花盆厂家陕西铸铜玻璃钢雕塑厂家陕西玻璃钢高跟鞋雕塑张掖大型玻璃钢雕塑定做阜新玻璃钢雕塑公司泸州玻璃钢动物雕塑长沙室外不锈钢玻璃钢仿铜雕塑固原玻璃钢商场美陈玻璃钢孔子雕塑行情报喜鸟商场工业美陈贵州省玻璃钢雕塑哪家强香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化