scala基础学习

scala编程语言

作者:Martin OrderSky也是jvm开发团队的核心成员之一,是java得泛型作者

scala 也是运行在 jvm上的编程语言

scala兼容原有的java程序scal是纯面向对象的,一皆对象

在idea编程工具中书写scala代码时需要注意以下两点

                1、管理上的

                2、main得写法


scala的变量的定义

在scala中有关键字var ,val定义变量

                  var表示可变参数

                  val表示不可变参数

在scala中没有基本类型的参数,全部都是引用类型的参数

int----->Int

long------->Long

变量定义 例如:

val abc:String="abc"

val aa:Int=112

var bb:Int=12

在scala中还有自动类型推断例如

var nn=19

val as="asda"

scala 中的数据类型

Any是scala中所有类型的父类等同于java中的Object

Any有两个直接子类 :AnyRef是所有的引用数据类型AnyVal是所有的值类型、

AnyRef所有引用类型的父类,等同于java中的object类型

                AnyVal所有值类型的父类

                Nothing: scala体系中的所有类型的子类

                Null :所有引用类型的子类,单例对象,只有一个实例:null

                String类型的父类:AnyRef

面向对象的思想发挥出来

        空: Null  Nothing  None  Nil  Unit

        val list:List = Nil

        val a:Null = null

        val b:Unit = ()

在scala中没有自动类型提升只有隐式转换但两者的功能是一样的

在scala中

ne eq 就相当于java中的== , 默认情况下,用来比较引用类型的地址是否一样ne和eq是相反的

==  equals 用来比较值 是否一样

简言之,equals方法是检查值是否相等,而eq方法检查的是引用是否相等。所以如果比较的对象是null那么==调用的是eq,不是null的情况调用的是equals。

流程控制

if

var a=if(3>4) "a"

var a=if(3>4) "a" else "s"

var result = if(condition) statement1 else if statement2 else statement3

  能用在很多比较特殊的场合: 守卫条件

  闭包

                        作用:在函数的外部访问一个函数内部的局部变量

数组

var array=Array[Int]

scala的数组  数组的定义 基础理论

                        变长数组: 可以增删元素                ArrayBuffer

                        定长数组: 不能增删元素                Array

                        int[]    Array

                                add  insert  remove

scala的数组不一样:

                                可以定义定长的数组,那么久和java中的数组一样

                                也可以

                                定义变长的数组,那么就等同于java中的list, 你可以这么理解

                创建

                        定义变长数组:

                                val ab = new ArrayBuffer[Int]()

                        定义定长数组:

                                val array1 = Array[Int](1,2,3,4)        不使用new的方式

                                        没有显示的使用new,不代表没有使用,

                                        而是被封装了

                                        被封装在apply方法中

                                val array2 = new Array[String](length)        使用new的方式

                                new关键字的作用:在底层就是调用构造器

                定长数组和变长数组的转换

                        ab.toArray()    变长 ==> 定长

                        ab.toBuffer()  定长 ==> 变长

                按照位置 设置值 访问值

                        访问值:ab(2)

                        修改值:ab(2) = 33

                增删改查元素

                        变长数组来说:

                        1、添加元素

                                追加

                                        ab += 3

                                        ab += (4,5)

                                        ab ++= Array(6,7)

                                插入

                                        ab.insert(4, 55, 66, 77)

                        2、删

                                ab -= 33

                                ab.remove(2)

                        3、改查 和 定长数组一致

                遍历

                        for(num <- ab) println(num)

                        for(index <- 0 to (ab.length -1 )) println(ab(index))

                        for(index <- 0 until ab.length) println(ab(index))

                数组中的常用操作

                        1、map

                                映射:你给我一个元素,我按照某种逻辑把它变成另外一个元素返回

                        2、reduce

                                简单题目:

                                尝试求一下array的平均值

                                尝试求一下array的平均值

                                尝试求一下array的平均值

                                array.sum / array.length

                        3、filter

                                筛子

                                        打米  稻谷 --> 米

                        4、count

                                计数

                        5、sort

                                排序

                                sortBy 

                                sortWith 

                                sorted

                                array.map(line => line.split(" ")).flatten.map(word => (word,1)).groupBy(wt => wt._1).map(x => (x._1, x._2.length)).toList.sortWith((x, y) => x._2 > y._2)

                高维数组

                        java中的二维数组:

                        int[][] aa = new int[3][4];

                                aa[0] = 长度为4的一个数组

                        int[][][] bb = new int[3][4][5];

                                bb[0] = new int[4][5]

                        高维数组:把n维数组看做是一个一维数组的话

                        那么就是说,每个位置上的元素就是一个n-1维的数组

                        scala中的高维数组:

                        val abc = Array(1,2,3)

                        val array = Array(Array(1,2), Array(3,4))

                        val array2 = Array(Array(Array("a","b"),Array("a","b234")), Array(Array("a","b"),Array("a","b")))

                        访问:array2(0)(1)(1)

```

package spark.com.test.zuoye

object Demo {

  class a{

    var a:Int=_

  }

  def main(args: Array[String]): Unit = {

    var arr=Array[Int](1,2,3,4,5,6,7,8,9,10)

    //遍历根据下标访问

    //for(index <- 0 to (arr.length - 1)) println(arr(index))

    //for(index <- 0 until arr.length ) println(arr(index))

  //直接枚举

    //for(a<-arr){println(a)}

    // 遍历所有的奇数

    //for(index <- 0 until arr.length if index % 2 == 0 ) println(arr(index))

    //如果index % 2 == 0(守卫条件)表达式为真,则执行println(arr(index))

    //否则不执行

    // 隔着3个数字

  // for(index <- 0 until (arr.length , 3)) println(arr(index))

  //  while 的写法和java中的一模一样

//  while 和java一样,++ -- 这种语法不支持, -= +=

//  continue  break  也和java一模一样

    var count:Int = 10;

    var sum:Int = 0

    while(count > 0){

      sum += count;

      count -= 1;    // count--; 但是不行,scala中没有 ++  -- 这种语法

    }

    print(sum)

  }

}

```

方法和函数

定义一个计算逻辑:把两个int类型的数值相加

方法的定义和使用

def sum(a:Int,b:Int):Int=a+b

val result=sum(2,3)

函数的定义和使用 val

定义一个函数就相当于定义一个变量

val sum:(Int,Int)=>Int=(x.,y)=>x+y

val sum=(x:int,y:Int)=>x+y

val result=sum(1,2)

高阶函数

1、函数可以作为方法得参数

2、函索可以作为方法的返回值

一般来说:方法的参数和返回值都是一个普通的变量

val var

你可能感兴趣的:(scala基础学习)