Scala

本文介绍了Scala编程语言的基础知识,包括其在JVM上的运行、文件类型(如App、class和object)、环境配置步骤。讨论了数据类型(如Unit和String),变量、方法和函数的声明,并深入讲解了Array、Map的操作以及List和高阶函数的应用,如foreach、filter、map和reduce。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,概述

      Scala 是基于 jvm (虚拟机) 上的编程语言,主要用于 spark;

      常用的 Scala 的文件类型:scala App,scala class,scala object;主要用 object

            三种类型的共同点:先翻译成 java 文件,编译成 class 文件,最后执行 class;

            三种类型的区别是:1)scala App 里主要执行代码,相当于java 的 main方法。而在object,class文件中执行代码必须放在方法中;

                                            2)scala object 里只有一个无参的构造方法,不能有有参数构造方法;

                                            3)scala object 里没有静态类型的变量与方法;

                                            4)scala class 与 java class 基本一样;

      配置 Scala 环境:

             1)获取 Scala sdk 安装包 scala-2.12.8.tgz

             2)解压到 /usr/local/下

             3)配置环境变量

             4)生效环境变量

             5)测试

                   $>scala  -version

2,数据类型

      2.1,java 中基本类型对应的数据类型

            byte:Byte

            short:Short

            int :Int

            long:Long

            float:Float

            double:Double

            char:Char

            boolean:Boolean

      2.2,Unit

            Unit 与  java void 作用类似表示没有返回值,返回();

      2.3, String

            与 java 的 String 作用相同;

      2.4,any 等类型

            any:任意类型;

3,声明变量,方法,函数

      3.1,修饰符

            Scala 修饰符有三个:private,protected,public; public是默认;

            与 java 的区别:protected:java 的 protected 是同包,子类可以访问,Scala 的 protected 只能子类访问;

      3.2,常量 

            语法:val  变量[:类型] = 初始化值;

            常量的值初始化后不能再做更改;

            样例:val  num  = 10;             //根据值 10 常量类型自动设置为 Int

                       val  num1:Int = 10;      //指定为Int类型

                       val  num2:Double = 10d;    

      3.3,变量

            变量值可以更改

            语法:val  变量[:类型] = 初始化值;

      3.4,方法

            语法:def  方法名(参数1:类型1,参数2:类型2*):返回类型={方法体}     

            注意:没有返回值不用写 :返回类型= 号;形参是常量类型,不能改变值;

            样例:求两个数的积:

object valdemo{
    def main(args:Array[String]:Unit = {
        println(fun(2,13));

    }
    
    //有返回值
    def fun(a:Int,b:Int):Int={
        var c = a*b
        c   //如果有返回值,最后一行即返回值不用写 return
    }

    //无返回值
    def fun1(a:Int,b:Int){  //没有返回值不需要设置返回值类型
        var c = a*b
        println(c)
    }

    //无返回值
    def fun2(a:Int,b:Int):Unit={  //没有返回值不需要设置返回值类型
        var c = a*b
        println(c)
    }
}

      3.5,函数

            语法:var  mulFun = (参数名1:类型,参数名2:类型*) => {方法体}

            样例:求两个数的积:

                       var mulFun = (a:Int,b:Int)=>{a*b}

object test1{
     def main(args:Array[String]:Unit = {
        var mulFun = (a:Int,b:Int)=>{
            a*b
        }
        println(mulFun(3,7));
    }
}

4,Array 与 map

      4.1,概念

            数组是定长的一组数据,大部分数组都是同一类型的;但是 元数组 是可以是任意类型的。

      4.2,定义数组

            1)= new Array[类型] (长度)

                  语法:var  nums = new Array[Int](5)

            2)=(元素1,元素2 ,~~~)

                  语法:var  nums = (1,3,5,7,9)

object test1{
     def main(args:Array[String]:Unit = {
        var nums1 = new Array[Int](3)
         //设值
         nums1(0) = 1
         nums1(1) = 2
         nums1(2) = 3

        var nums2 = Array(1,3,5,7,9)
         //取值
         println(nums2(1))

        //遍历
        for(a<-nums2){
            println(a)
        }
        
        val printFun = (x:Int)=>{println(x)};
        nums2.foreach(printFun)
        //或者
        nums2.foreach(x=>println(x));
        //或者
        nums2.foreach(println);
    }
}

      4.3,操作数组

      4.4,其他操作

5,List 与高阶函数

      5.1,

      5.2,高阶函数

            5.2.1,foreach

                   foreach 循环返回值是 Unit 时  语法:

                   foreach(形参名=>方法体){}

                   样例:

val printFun = (x:Int)=>{println(x)};
nums2.foreach(printFun)
//或者
nums2.foreach(x=>println(x));
//或者
nums2.foreach(println);

            5.2.2,filter

                   filter是过滤,返回值是一个新数组或集合,方法体要求返回Boolean,如果是 true 数据在返回结果中保留,反之丢弃

                   语法:filter(形参名=>方法体)

                   样列:获取数组中的偶数:

val nums = Array(1,2,3,4,5,6,7,8);
var rs = nums.filter(a=>a%2==0);
rs.foreach(x=>print(x+" "))

            5.2.3,map

                  map是对数组或集合中每一个数据做处理,返回值是一个新的数组或集合,方法体要求返回一个数组或集合元素;

                  语法:map(形参=>方法体) 

                  样例:

val nums = Array(1,2,3,4,5,6,7,8,9,10);
val rs = nums.map(x=>x*3)    //每一个元素乘3作为新数组成员
rs.foreach(x=>print(x+" "))

var nusic = new Array[String](5);
music(0) = "101_song_2016-11 song1";
music(1) = "102_song_2016-11 song2";
music(2) = "103_song_2016-11 song3";
music(3) = "104_song_2016-11 song2";
music(4) = "105_song_2016-11 song2";
var names = music.map(info=>{    //以空格拆分每一个元素生成新的结果集,新数组每一个元素只要歌名       
    info.split(" ")(1)
});
names.foreach(println)

            5.2.4,reduce

                  reduce 是先对数组或集合中的元素1和元素2进行处理,然后将结果与元素3进行处理,依次类推。

                  语法:reduce(形参=>方法体) 

                  样例:

// x:上一条数据,y:下一条数据
val nums4 = Array(1,2,3,4,5,6,7,8)
var sum = nums4.reduce((x,y)=>{x+y});
或者
var sum1 = nums4.reduce(_+_);
println(sum);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值