scala基础

一、搭建环境:

1.下载

2.解压

3.配置环境变量,把SCALA_HOME/bin加到path

4.scala基于JVM运行,需要安装jdk

二、scala是纯面向对象的语文,一切皆对象,一切对象都有方法,java是支持面向对象的

1.var name="jack"     var 可变变量,可以被改变

   val  age=10            val 不可变变量,不能被改变

  spark中RDD的内容都是不可变的

2. 基本类型3是有方法的:3.to 按Tab键,发现int类型的数字也有方法

  toByte   toChar  toDouble  toFloat  toInt    toLong  toShort  toString

3.变量声明 :可指定类型,也可不指定类型

var age:Int=0

var name:String=null

如果定义变量时指定了类型,后面给变量赋值只能赋该 类型及子类型

4.一行可声明多个变量

val age1,age2,age3=0

5. Int本身没有to方法,scala编译运行时,隐式自动转换成rich integer类型,这种类型中有to方法

scala> 0.to(5)
res4: scala.collection.immutable.Range.Inclusive = Range(0, 1, 2, 3, 4, 5)

 0.to(5)  :取到Range集合

scala类型不分java中的int和Integer

6.   1.+(1)

1本身是一个对象,+是它的方法,括号里是它传进来的参数

7. scala中没有 ++,--这种操作符号 

age+=1

8.可导入库进行很多操作:scala本身有很多库,又可以直接使用java的库

import scala.math._

min(20,4)  :取最小数

9.创建数组

Array(1,2,3,4)

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

其实内部使用Array.apply(1,2,3,4)

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

spark中大量使用apply

10. if表达式

val age=19

if(age>=18) "adult" else  "child"

或if(age>=18) {"adult"} else { "child"}

在scala中if表达式是有结果的,可以用变量去保存

val result=if(age>=18) "adult" else  "child"

scala> val result=if(age>=18){}
result: Unit = ()

Unit是scala中一种类型

scala> val result=if(age>=18){
| "adult"
| 9

|}
<console>:13: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
"adult"
^
result: AnyVal = 9

var buffered = 0

val result=if(age>=18){
    "adult"
    buffered = 10

    buffered
    }

buffered块表达式的最后一行,作为默认的返回值

scala块表达式中,看着没有返回值,实际最后一行就是返回值

11.打印

println("spark")

print("spark")

占位符

printf(" %s  is the future of big data. ","spark")

12.  输入:读取输入的内容

readLine   不加参数的时候,括号可以不写

readLine(" please enter your password:")

13.读取整数

readInt

14.while循环

var element=100

while(element>10){

    println(element)

    element-=1

}

15.for循环

0 to element:本身是一个集合

for(i<- 0 to element) println(i)

<- 是提取符,每次提取集合中的一个元素

for(i<- 0 to element  if i%2 == 0 ) println(i)

16.中止循环

val n=10

def f1:Any={

    for(i<- 1 to 10){

        if(i==n) return i

        println(i)

}

17.函数定义def,函数要想有返回值,后面要加=

def f2:Any={

    for(i<- 1 to 10){

        if(i==n) return i

        println(i)

}

def f3(p1:String,p2:Int=30)=p1+p2

调用f3("Spark")

结果:Spark30

调用函数可以不按参数顺序,按名称去调用

f3(p2=100,p1="Scala")

18.变长参数

def sum(numbers:Int *)={

    var result = 0

    for(element<- numbers)

        result+=element

    result                        //最后一条语句是返回值

}

调用:sum(1,2,3,4,5,6,7)

def sum(numbers:Int *)={ var result = 0;for(element<- numbers) result+=element;result}  //多条语句写一行,要用;分隔

sum(1 to 100)是不可以的

sum(1 to 100:_*) :这样调是用以的,:_*是把Range里面的每一个元数提取出来

19.过程与函数的区别:过程是没有返回值的函数

 如果想一次输入多行,可用:paste模式来粘贴多行,要想退出paste模式用快捷键,Ctrl+D

原文地址:https://www.cnblogs.com/ngy0217/p/10054453.html