Scala入门到精通——第一节 Scala语言初步
本节主要内容
- Scala简单介绍
- 为什么要学习Scala
- Scala语言初步
1. Scala简单介绍
Scala(Scala Language的简称)语言是一种能够执行于JVM和.Net平台之上的通用编程语言。既可用于大规模应用程序开发,也可用于脚本编程,它由由Martin Odersk于2001开发。2004年開始程序执行在JVM与.Net平台之上。由于其简洁、优雅、类型安全的编程模式而受到关注。
Scala的创建者——Martin Odersk
在Scala的创建之初,并没有怎么引起重视,随着Apache Spark和Apache Kafka这样基于Scala的大数据框架的崛起,Scala逐步映入大数据从业者的眼帘。
Scala的拥护者们觉得Scala的主要优势是速度和它的表达性。眼下使用scala的作为支撑公司开发语言的包含Foursquare和Twitter。2009年Twitter把大部分后台系统的开发语言从Ruby换成了Scala。參见这篇文章:Twitter on Scala: A Conversation with Steve Jenson, Alex Payne, and Robey Pointer,” Scalazine, April 3,2009, www.artima.com/scalazine/articles/twitter_on_scala.html.
Scala语言具有例如以下特点:
1 纯面向对象编程语言
- (1) Encapsulation/information hiding.
- (2)Inheritance.
- (3)Polymorphism/dynamic binding.
- (4)All predefined types are objects.
- (5) All operations are performed by sending messages to objects.
- (6)All user-defined types are objects.
2 函数式编程语言
定义:Functional programming is a programming paradigm that treats computation as the evaluation of mathematical functions and avoids state and mutable data.
函数式编程语言应支持以下特性:
(1)高阶函数(Higher-order functions)
(2)闭包( closures)
(3)模式匹配( Pattern matching)
(4)单一赋值( Single assignment )
(5)延迟计算( Lazy evaluation)
(6)类型推导( Type inference )
(7)尾部调用优化( Tail call optimization)
(8)类型推导( Type inference )
3 Scala语言具有非常强的兼容性、移植性
Scala执行于JVM上,能够与JAVA进行互操作,具有与JAVA一样的平台移植性
4 Scala语法的简洁
以下给的是java的hadoop wordcount代码及spark wordcount代码
能够看到,spark三行代码就攻克了hadoop 七八十行代码做的事情。
2. 为什么要学习Scala
1 开源大数据内存计算框架Spark的流行
- Spark是当前最流行的开源大数据内存计算框架。採用Scala语言实现,由UC 伯克利大学AMPLab实验室开发(2009)并于2010年开源,在2014年成为Apache基金会的顶级项目http://spark.apache.org/
- Spark有着非常好的性能优势。
图片来源:databricks.com/blog/2014/11/05/spark-officiallysets-a-new-record-in-large-scale-sorting.html 社区活跃度
图片来源:Real-Time Analytics with Spark Streaming
图片来源:Spark Summit 2015
图片来源:twitter.com/dberkholz/status/568561792751771648各大公司使用与贡献情况
图片来源:Summit Spark 2015 https://spark-summit.org/2015/
- IBM 百万数据project师计划
【2015年6月17日,北京】IBM(NYSE:IBM)宣布承诺大力推进Apache Spark项目,并称该项目为:在以数据为主导的,未来十年最为重要的新的开源项目。这一承诺的核心是将Spark嵌入IBM业内率先的分析和商务平台。并将Spark作为一项服务,在IBM Bluemix平台上提供给客户。IBM还将投入超过3500名研究和开发者在全球十余个实验室开展与Spark相关的项目,并将为Spark开源生态系统无偿提供突破性的机器学习技术——IBM SystemML,同一时候,IBM还将培养超过100万名Spark数据科学家和数据project师。原文链接:http://www.csdn.net/article/a/2015-06-18/15825412
2 Scala是未来大数据处理的主流语言
- 它是Spark框架的开发语言
- ”If I were to pick a language to use today other than Java, it would be Scala.” —James Gosling
詹姆斯·高斯林 Java之父
- ”If I were to pick a language to use today other than Java, it would be Scala.” —James Gosling
Scala具有数据处理的天然优势(语言特点决定)
3. Scala语言初步
1 变量定义
//声明一个val变量
//与java final关键字声明的变量一样
//一旦被赋值。便不能更改
//Scala会帮我们进行类型判断
scala> val helloString="Hello World"
helloString: String = Hello World
//也能够进行类型指定
scala> val helloString:String="Hello World"
helloString: String = Hello World
//String事实上就是java.lang.String
scala> val helloString:java.lang.String="Hello World"
helloString: String = Hello World
//不能被又一次赋值。由于它是val变量
scala> helloString="Hello Crazy World"
<console>:8: error: reassignment to val
helloString="Hello Crazy World"
^
以下给出的延迟载入变量:
//lazy关键字声明变量
//表示该变量不会立即赋值
//而在真正被使用时才赋值
scala> lazy val helloString="Hello Crazy World"
helloString: String = <lazy>
//在真正使用时被赋值
scala> helloString
res1: String = Hello Crazy World
scala中也存在可变变量。即随着程序的执行,变量内容能够动态变化:
//var 声明可变变量
scala> var helloString="Hello Cruel World"
helloString: String = Hello Cruel World
//又一次赋值
scala> helloString="GoodBye Cruel World"
helloString: String = GoodBye Cruel World
2 函数初步
scala中通过下列方式进行函数定义:
//定义了一个函数,函数中使用return返回结果
scala> def add(a:Int,b:Int):Int={return a+b}
add: (a: Int, b: Int)Int
scala> add(1,2)
res3: Int = 3
//能够省去return,scala会将最后一个执行语句
//作为函数的返回值
scala> def add(a:Int,b:Int):Int={a+b}
add: (a: Int, b: Int)Int
//省去返回值类型。scala会自己主动进行类型判断
scala> def add(a:Int,b:Int)={a+b}
add: (a: Int, b: Int)Int
scala> add(1,2)
res4: Int = 3
3 HelloWorld应用程序:
package cn.xtwy.scala.chapter01
//scala应用程序相同採用main方法作为应用程序的入口
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello World")
}
}
加入公众微信号。能够了解很多其它最新Spark、Scala相关技术资讯
Scala入门到精通——第一节 Scala语言初步的更多相关文章
- Scala入门到精通
原文出自于: http://my.csdn.net/lovehuangjiaju 感谢! 也感谢,http://m.blog.csdn.net/article/details?id=52233484 ...
- SaltStack入门到精通第一篇:安装SaltStack
SaltStack入门到精通第一篇:安装SaltStack 作者:纳米龙 发布日期:2014-06-09 17:50:36 实际环境的设定: 系统环境: centos6 或centos5 实验机 ...
- Scala入门到精通——第二十四节 高级类型 (三)
作者:摆摆少年梦 视频地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本节主要内容 Type Specialization Man ...
- Scala入门到精通——第十五节 Case Class与模式匹配(二)
本节主要内容 模式匹配的类型 for控制结构中的模式匹配 option类型模式匹配 1. 模式的类型 1 常量模式 object ConstantPattern{ def main(args: Arr ...
- Scala入门到精通——第二十九节 Scala数据库编程
本节主要内容 Scala Mavenproject的创建 Scala JDBC方式訪问MySQL Slick简单介绍 Slick数据库编程实战 SQL与Slick相互转换 本课程在多数内容是在官方教程 ...
- Scala入门到精通——第十六节 泛型与注解
本节主要内容 泛型(Generic Type)简单介绍 注解(Annotation)简单介绍 注解经常使用场景 1. 泛型(Generic Type)简单介绍 泛型用于指定方法或类能够接受随意类型參数 ...
- Scala入门到精通——第十九节 隐式转换与隐式參数(二)
作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式參数中的隐式转换 函数中隐式參数使用概要 隐式转换问题梳理 1. 隐式參数中的 ...
- Scala入门到精通——第二十七节 Scala操纵XML
本节主要内容 XML 字面量 XML内容提取 XML对象序列化及反序列化 XML文件读取与保存 XML模式匹配 1. XML 字面量 XML是一种很重要的半结构化数据表示方式,眼下大量的应用依赖于XM ...
- Scala入门到精通——第二十二节 高级类型 (一)
作者:摇摆少年梦 视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 this.type使用 类型投影 结构类型 复合类型 1. this.type使用 c ...
随机推荐
- yii 面包屑
Yii的Breadcrumbs 是Yii的路径插件,使用方法: <?php $this->widget('zii.widgets.CBreadcrumbs', array('links'= ...
- Kubernetes Port Forward 机制访问 pod
需求:研发需要调试部署的pod是否能正常提供访问,但又不对pod进行暴露到集群外. 实现:通过Kubernetes的Port Forward机制对本机端口映射到pod端口来实现 1.安装kubectl ...
- JavaScript学习二
2019-05-30 15:08:24 加油,这几天在赶高数,都…… <!DOCTYPE html> <html> <head> <script type=& ...
- Windows phone开发 网络编程之HttpWebRequest
HttpWebRequest和WebClient的区别1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Create();2,其Method指定了请求 ...
- 精确获取对象的类型:Object.prototype.toString()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
- (转)vuex2.0 基本使用(2) --- mutation 和 action
我们的项目非常简单,当点击+1按钮的时候,count 加1,点击-1按钮的时候,count 减1. 1, mutation The only way to actually change state ...
- c#使用RSA进行注册码验证
公司的一个项目快完成了,最后要加上注册验证,翻了n多资料,终于做出来了.现在把体验说一下,以后要用的时候也好找.~~ .Net自带的类库里面有个算法. 这个算法的原理是不对称加密的原理.不对称加密原理 ...
- QtUI设计:设置控件透明
QT设置按钮控件透明: 代码: //设置按钮 背景 前景 this->ui->ShowCvRGB->setStyleSheet(QString("color:rgba(25 ...
- 通过Static 字段来维护状态是不是一个好主意
static是申明静态字段.静态方法或者静态类的修饰符.使用static申明的字段属于类型本身而不属于任何字段,声明的类也具有一些特别特性,比如不能实例化,不能继承等.用通俗化的语言来说,static ...
- Hotel 旅馆 题解(From luoguBlog)
考试前深陷分块泥潭所以刚开始以为是分块. 然而这题数据水到暴力卡常都能AC 正解:万物皆可线段树 节点存储区间长度.区间最长连续空房长度.从左往右最长连续空房长度.从右往左最长连续空房长度. 维护后三 ...