大数据学习之Scala语言基本语法学习36

Posted hidamowang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据学习之Scala语言基本语法学习36相关的知识,希望对你有一定的参考价值。

一:scala简介

官网:https://www.scala-lang.org/

Scala语言很强大,集成了面向对象和函数式编程的特点。

运行在JVMjdk)。

大数据中为什么学习scala?

sparkscala语言编写。

pythonspark 挺好的

javaspark 很糟糕(代码实在是太多了)

scalaspark 很完美

二:scala特点

1)优雅

框架设计中第一个要考虑的问题就是API是否优雅。

精简的封装。

代码精简(少)。

2)速度快

scala语言表达能力强。

一行代码=多行java代码,开发速度快。

3)完美融合hadoop生态

scala是静态编译,表达能力强并且代码量少。

三:安装Scala

1)下载

2)解压

3)配置环境变量(我是win10系统的,简单的安装,没有弄什么SACLA_HOME那些花里胡哨的东西。直接添加Scala

bin目录到Path中就行了)

技术图片

技术图片

 

 

SCALA_HOME=

path

四:Scala基础语法

1Scala程序的开始(编译器用的是Idea。安装一个Scala的插件就可以用了)

Helloworld

技术图片

2)Scala的数据类型

Scalajava一样,有8中数值类型:

Byte/Char/Short/Int/Long/Float/Double/Boolean/

Unit类型(void)

注意:scala中无包装类型。

Unit:表示无值,用于不返回任何结果的方法的结果类型。

3Scala定义变量

两个关键字:val var

val:定义变量值不可变

var:定义的变量值是可变的

scala编译器会自动的推断类型!

指定类型: val str:String = "dawn"

注意:类型要保持一致

Unit = ()()相当于什么都没有用()表示。

 技术图片

4)条件表达式

if:判断(和java差不多)

val y = if(x>0) 1 else 2

 技术图片

 

Any:包含AnyvalAnyRef

Anyval:包含scala所有类型

AnyRefScala classesJava Classes

Any相当于javaObject

 

val k = if(x<0) 0 else if(x>=1) 1 else -1

ifelse if:多个条件的判断,符合条件看左侧,不符合条件看右侧

 技术图片

5)块表达式

scala包含一系列表达式,块中的最后一个表达式的值就是块的值

6)循环

 

Scala拥有与JavaC++相同的whiledo循环

Scala中,可以使用forforeach进行迭代

 

使用for循环案例:

技术图片

注意:

* <-  表示Scala中的generator,即:提取符

*)第三种写法是第二种写法的简写

 

for循环中,还可以使用yield关键字来产生一个新的集合

技术图片

在上面的案例中,我们将list集合中的每个元素转换成了大写,并且使用yield关键字生成了一个新的集合。

 

使用while循环:注意使用小括号,不是中括号

技术图片

使用do ... while循环

技术图片

使用foreach进行迭代

技术图片

注意:在上面的例子中,foreach接收了另一个函数(println)作为值

 源码:

package dawn.day01
/**
  * @author Dawn
  * 2019年6月11日17:01:23
  * @version 1.0
  * scala基本语法基础
  */
object Demo1 
  def main(args: Array[String]): Unit = 

    //定义一个集合
    var list =List("dawn","Anlis","xiaomei")

    var i=0
    println("**********************第一种循环for **********************************")
    for(s <- list)
      println(s)
    

    println("**********************第二种循环while **********************************")
    while(i<list.length)
      println(list(i))
      i+=1
    

    println("**********************第三种循环do...while **********************************")
    i=0
    do
      println(list(i))
      i+=1
    while(i<list.length)

    println("**********************第四种循环foreach(println) **********************************")
    list.foreach(println)

    println("测试yield方法")
    //测试yield
   var newList=for
     s <-list
     if s.length<=5
   yield (s)

    //toBuffer相当一java中toString
    println(newList.toBuffer)
  

  

7)方法定义

Scala+ - * / % 的作用和Java一样,但是特别的是,这些操作符实际上是方

法。个人觉得scala中所有定义的变量都是对象

1 to 10

1.to(10)

技术图片

定义一个方法:

def m1(a:Int,b:Int):Int =

a + b

def:定义方法的关键字

m1:方法名

a:参数列表

b:参数列表

Int:返回值类型

a + b:函数体

技术图片

 

以上是关于大数据学习之Scala语言基本语法学习36的主要内容,如果未能解决你的问题,请参考以下文章

大数据Scala学习—列表 集与映射

大数据Scala学习—列表 集与映射

大数据学习之Scala中main函数的分析以及基本规则

大数据学习之Scala语言的高级特性42

Scala 模式匹配详解

理解Scala的函数式编程思想