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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 数组是一种可变的、可索引的数据集合。在Scala中用Array[T]的形式来表示Java中的数组形式 T[]。 v...
    时待吾阅读 951评论 0 0
  • Scala的集合类可以从三个维度进行切分: 可变与不可变集合(Immutable and mutable coll...
    时待吾阅读 5,812评论 0 4
  • 引言: Scala是一门多范式的编程语言,运行在java虚拟机上,并兼容现有的java程序,它运行在JVM上,并可...
    WANGGGGG阅读 587评论 0 2
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,830评论 0 6
  • 数组 :new Array[Int](8)与Array[Int](8)的区别:第一种8个元素,第二个定义一个值为8...
    夙夜M阅读 1,767评论 1 2