scala基础语法

来源:互联网 发布:mac对应pin码查询网 编辑:程序博客网 时间:2024/06/05 05:54
scala自学
1、运算符也是方法
2、既能面向又能面向对象的语言,自己自带许多包也可以通过import使用java的所
有包。scala是函数式编程。
3、没有a++操作
4、import scala.math._
   Array(1,2,3)  //内部使用的是apply方法实现的
   -------------------------------------------------------------
   apply()方法用来产生object对象,直接Array不用new(内部使用的是Array.apply())
   _____________________________________________________________
   val array = Array.apply   (1,2,3),spark中也是使用apply()进行实例构造
   val age = 19
   if(age >= 18) "adult" else "child" //scala中不会返回结果

   result

  //当然可以使用new去创建数组

   val arr = new Array[Int](5)  //[Int]表示内部元素的类型,和java的泛型一样  //ArrayBuffer同样适用

5、在命令行输入多条语句用{}
6、块表达式中,最后一行会作为整个块的默认返回值
7、占位符的使用:
   printf ("%s is the future of the Big Data Computation Framework.
\n","Spark");
   输出结果:Spark is the future of the Big Data Computation Framework.
   //输出
8、readline("Please enter your password:")   //readInt//读取命令台中的一行,输入
9、spark里RDD的数据都是不可变的
10、可变变量二次赋值就可改变变量值
11、Int类型本身没有Range()方法,但是其父类Integer有。scala中有隐式转换功
能,在int类型调用to()方法时,编译器会先将int转换为其父类Integer,然后调
用父类的Range()方法
12、import scala.util.control.Breaks._
13、定义函数
    def f(param1:String,param2:Int = 30) = param1+param2
    参数位置互换,等式值随参数名改变而不是随参数位置改变
14、增强for循环(可以遍历一个数组或者一个Range)
    for(element <- numbers)(提取)
    ——————————————
    def sum(numbers:Int*) = {var result = 0;for}
    *表示numbers数组里元素个数不确定
15、sum(1 to 100)  //这种语法是错误的,sum()方法里的参数要求是Int类型的
,而这样传入的是一个范围Range
    sum(1 to 100: *_)   //这种语法是正确的而且特别常见, _*表示把里边的元
素提取出来
16、函数定义有过程和结果之分
    //Unit是个过程,不显示结果
    def morning(content:morning):Unit = "good" + content
    //结果函数
    def morning(content:morning) = "good" + content
    def morning(content:morning) {println("good" + content)}
17、//lazy函数的使用,只有被第一次使用时才被调用
    lazy val content = formFile("/root/usr") //返回一个迭代器,mkString转换为字符串形式
18、for循环  //until控制循环条件
    val n = 10
    def f1:Int = {
    for(i <- 1 to 20){
    if(i == n) return 9
    println(i)
    i
    } 

    }

    for(i <- 1 util (arr2.length,2)) println(arr2(i))  //只打印arr2中偶数位置上的元素,下标从0开始。其中1表示从1这个位    置开始,2表示每隔两个元素打印一次(指定的起始位置最先打印)。

    for(i <- (0 util arr2.length).reverse) println(arr2(i)) //数组元素反转

19、scala的try-catch
    import java.io.FileNotFoundException 
try{
        val content = fromFile("/root/usr/aa.txt").mkString 
}catch{
      case _:FileNotFoundExceptio => println("Opps!!!File not found")
}finally{
println("ByeBye!!!")

}//scala中finally是必写的,出现异常时用来关闭数据库或者网络资源

——————————————————————对数组的基本操作—————————————————————

20、import scala.collection.mutable.Array

        //引入集合中的可变数组

21、ArrayBuffer插入数据

       val arrBuffer = ArrayBuffer[Int]()  //定义创建对象arrBuffer

       arrBuffer += 10  //定义数组长度

       arrBuffer += (11,9,2,3) //向arrBuffer中插入数据

       arrBuffer ++= Array(1,2,3) //arrBuffer后边追加一个数组

       arrBuffer.trimEnd(3)   //截掉arrBuffer的后三个元素

       arrBuffer.insert(5,100)   //在arrBuffer的第五个位置增加100这个元素,remove方法和insert是互逆操作,                      remove(5)表示删除第五个位置的元素;remove(5,3)删除从第五个位置开始的3个元素

       arrBuffer.toArray() //转化为Array数组,也可以val数组转化为arrBuffer

22、对数组进行快速排序

        scala.util.Sorting.quickSort(arr2)

23、将数组转化为字符串,以“,”间隔

        arr2.mkString(",")

24、i*i

        yield(生产) i*i //生成另一个集合

25、arr2.filter(_%3==0).map(i => i*i)  //_表示每次只取arr2中的一个元素,不用在后添加*号。取多个时应添加*号。            map本身是函数,又传入函数,称为高阶函数。式子中的()可以用{}代替

        相当于val arr3 = for(i <- arr2 if i % 3 ==0) yield i*i

————————————————————————对Map的基本操作———————————————————

26、map的使用(map是不可变的,不能添加或者删除元素)

        val persons = Map("Spark" -> 6,"Hadoop" -> 11)

        Persons("Hadoop")

        当有增删得需求时,可以

         val persons = scala.collection.mutable.Map("Spark" -> 6,"Hadoop" -> 11)

         这样就可以进行操作了

         persons += ("Flink" -> 5)

         ***********************************

         判断有没有map中的key

         persons.contains("Spark")

         ***********************************

         val sparkKValue = if (persons.contains("Spark")) persons("Spark") else 1000

         相当于scala中的

          val sparkKValue = persons.getOrElse("Spark",1000)

27、  map的增强型for循环的使用

          for((key,value) <- persons) println(key + ":" + value)    //这里的(key,value)就是一个Tuple,后边详细讲

          只访问key

          for(key <- persons.keySet) println(key)

28、声明SortedMap

          val persons = scala.collection.immutable.SortedMap("Spark" -> 6,"Hadoop" -> 11)

———————————————————————————————————————————————————

 29、Tuple就是一个元组,里边有很多不同类型的数据。和数组不一样,下标从1开始,spark中就有大量tuple的应用

         val tuple = ("Spark",6,99.0)

         tuple._1

——————————————————————————————————————————————

30、结合spark源码看scala

       SparkContext

       **************************************************************************************************************************

       函数式编程语言中变量和函数地位等值,变量可以作为函数的参数传入函数,函数也可以作为参数传入函数

       *************************************************************************************************************************

       

         

原创粉丝点击