笔记前言:本笔记为scala的入门基础和scala基础使用。主要参考为书籍和推荐较高的博客。主要目的为供个人总结学习。

所有来自网络参考内容不一一列出。

一、面向过程

1.变量体

  val 标识符:声明常量;如,val answer = 1.

   var 标识符:声明变量;

    scala变量类型无需声明,可根据初始变量的值进行自动定义(编译过程中),所以变量的声明和定义是一体化的,否则会报错。原理

    

  1.1 两种标识符的区别和适用场景

    尽量使用表达式代替变量的使用。val类似于java中final常量,是不可更改的。

    

2.函数,流程控制和异常处理

2.1 函数

  def函数名称(参数列表):函数返回值类型={函数体}

  def looper(x:long,y:long):Long={}

  返回值为空值的函数声明方式

  def unitTest(x:long,y:long):Unit={} / def unitTest(x:long,y:long)={}

  示例:

  def looper(x:long,y:long):Long={

  var a = x;

  var b = y;

  while(a != 0){

  val temp = a;

  a = b % a;

  b = temp;

  }

 b;//b为函数的返回值,(return b)

}

函数的调用没有变化:looper(123,3465);

2.1 流程控制

选择和循环没有变化,支持while,for,do while流程控制语句。

  

3.常用数据结构和文件操作

 3.1多元组

  val triple = (100, "adsf", "asdfg");

println(triple._1);
val (one, two, three) = triple;
one: Int
= 100;
two: String
= Scala;
three: String
= Spark;
print(one);
val one, two, _ = triple;
one: (Int, String, String)
= (100, Scala, Spark);
two: (Int, String, String)
= (200, Scala, Spark);
3.2 数组
//定长数组
val nums = new Array[Int](10);
val a = new Array[String](10);
val s = Array("Hello","World");
s(0) = "good bye";
//数组的初始化整型为0,字符串类型为null
val num = new Array[Int](10);
val s = new Array[String](10);
//变长数组
val b = ArrayBuffer[Int]();
b+=1;
b+=(1,2,3,5);
b++=Array(8,13,21);
println(b);
//多维数组
val matrix = Array.ofDim[Double](3,4);
matrix(2)(1) = 42;
matrix;
3.3文件
//读取本地文件
object FileOps{
  def main(args:Array[String]){
    val file = Source.fromFile("address"
):
    for(line<-file.getLines){
      println(line);  
    }
    file.close();
}
}
//读取网络文件
object FileOps1{
def main(args:Array[String]): Unit ={
val webFile = Source.fromURL("http://spark.apache.org/")
webFile.foreach(print)
webFile.close();
}
}
//scala中Source工具类提供了输入输出的文件操作,包括字节字符和输入流等。

3.4 键值对map

scala中有两种map集合

//不可变map

val  map = Map("book"->10,"gun"->18,"ipad"->100);

for((k,v)<-map) yield(k,v*0.9);

//可变map

val scores = Scala.collection.mutable.Map("Scala"->7,"Hadoop"->8,"Spark"->10);

val HadoopScore = scores.getOrElse("Hadoop",0);//这个接口中说明存在Hadoop这个键值就返回响应的value值,否则返回设定的参数值“0”;

  //增加操作

scores+=("R"->9);

  //删除操作

scores-=("R"->9);

 

4.apply方法

applay方法属于类方法,对于一个类型进行初始化中,相当于类文件的构造方法。原理

二、面向对象

 2.1类的定义

class Student{
private var privateAge = 0;
val name = "Scala";
def age = privateAge;
def isYounger(other:Student) = privateAge < other.pirvateAge;
}
2.2构造方法
主类构造方法和辅助构造方法;
2.3伴生对象实现scala中的静态属性
object University{
  private var studentNo = 0;
  def newStudentNo={
    studuent += 1;
    studentNo;
  }
}
class University{
  val id = University.newStudengNo;
  private var number = 0;
  def aClass(number:Int){this.number += number}
}
//类和伴生对象可以互相访问对方的属性,工程中需要把两者置于同一个文件中。伴生对象多用于工程中的配置文件。
2.4 继承
scala中的继承变化不大,基本在于语法,同时在构造器的继承中更类似C++中的继承机制。在子类对象实例的初始化中也是按照父类的构造方法先行的原则;
2.5 抽象
在属性中说到scala中的字段声明和初始化是一体的,但是在抽象类中存在一种字段是抽象字段,即没有进行初始化的字段。
abstract class SuperTeacher(val name:String){
  var id:Int;
  var age:Int;
}
2.6 特质(接口)
class ConcreteLogger extends Logger with Cloneable{
  def concreteLog{
    log("It's me!!!");
  }
}
scala也是基于java虚拟机进行编译的,所以在scala中的特质最后还是需要编译成接口。
在scala中多继承的构造顺序是由左向右的。

三、语言特性

3.1高阶函数

map:定义一个转换,将转换遍历应用到列表的每个元素,返回一个新列表集。

(1 to 9).map("*" *_).foreach(println);

filter:保留列表中符合条件的列表元素。
(1 to 9).filter(_%2==0).foreach(println);
reduceLeft函数:从列表的左边往右边应用reduce函数。
println((1 to 9).reduceLeft(_*_));
split,sortWith函数:split将字符串按照指定的表达式规则进行拆分,sortWidth使用自定义的比较函数进行排序。
"spark is the most exciting thing happening in big data today".split(" ").sortWith(_.length<_.length).foreach(println);
自定义高阶函数:
def high_order_functions(f:(Double)=>Double)=f(0.5);
println(high_order_functions((x:Double)=>3*x));

//应用实例:词频统计

val result = rdd1.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect;//rdd为读取的rdd文本文件

四、并发编程

五、高级特性

六、项目实践

scala_基础的更多相关文章

  1. Scala_函数式编程基础

    函数式编程基础 函数定义和高阶函数 函数字面量 字面量包括整数字面量.浮点数字面量.布尔型字面量.字符字面 量.字符串字面量.符号字面量.函数字面量和元组字面量. scala> val i = ...

  2. 【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料

    SparkStreaming-Kafka-Redis-集成-基础参考资料 Overview - Spark 2.2.0 Documentation Spark Streaming + Kafka In ...

  3. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  4. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  5. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  6. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  7. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  8. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  9. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

随机推荐

  1. saleae逻辑分析仪-串口

    安装软件 下载:https://www.saleae.com 连线 逻辑分析仪CHx分别连接UART的rx和tx 配置Logic 选择串口 设置波特率 还可以自定义显示方式 打开串口助手 波特率和Lo ...

  2. QTableWidget数据表格

    void setRowHeight(int row, int height); //行高 void setVerticalHeaderLabels(const QStringList &lab ...

  3. iPhone 移植到 iPad:

    来源:http://www.wapera.cn/ipadkaifa/71354.html iPhone移植到iPad: 方法一修改设备目标设置(普通模式:一套代码及XIB界面文件,代码分if和else ...

  4. Programmingbydoing

    http://www.programmingbydoing.com/ 1. Modulus Animation public static void modulusAnimation() throws ...

  5. 【hadoop】hadoop3.2.0的安装并测试

    前言:前段时间将hadoop01的虚拟机弄的崩溃掉了,也没有备份,重新从hadoop02虚拟上克隆过来的,结果hadoop-eclipse插件一样的编译,居然用不起了,找了3天的原因,最后还是没有解决 ...

  6. c# 写入文本文件

  7. 使用Cloudera Manager部署oozie

    使用Cloudera Manager部署oozie 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.进入CM服务安装向导 2>.选择要添加的oozie服务 3> ...

  8. suse双网卡绑定

    这里使用两张网卡eth1.eth2进行 编辑/etc/sysconfig/network/ifcfg-bond0文件(此文件没有需要创建) device='bond0' BOOTPROTO='stat ...

  9. JDK、CGLIB、Javassist和ASM的动态代理使用对比

    动态代理是指在运行时,动态生成代理类.正如标题所示,能够提供动态代理的方式有很多.既然选择这么有很多,那么如何选择会更好呢? 带着这个疑问,我找到了Dubbo的作者--梁飞大神的一篇文章.文章中对四种 ...

  10. sql查询排序

        ORDER BY _column1, _column2; /* _column1升序,_column2升序 */   ORDER BY _column1, _column2 DESC; /* ...