- 浏览: 24815 次
- 性别:
- 来自: 亚特兰大
最新评论
-
tongqingqiu:
xiaohu7924 写道图片看不到可能手机上看不到,电脑上可 ...
Scala基础(1)- 编程环境 -
xiaohu7924:
图片看不到
Scala基础(1)- 编程环境 -
tongqingqiu:
是比较难,也需要时间和项目的积累。更需要有这种最佳实践的指导。 ...
为什么要用Scala -
superpeter:
Scala虽然不错,但它比Java难不少。其实,我们真正想要的 ...
为什么要用Scala -
tairan_0729:
期待中...
为什么要用Scala
文章列表
列表(List)应该是使用最多的数据结构了。
列表的构造
注意列表中的元素类型必须一致。
val fruit = List("apples", "oranges", "pears")
val nums: List[Int] = List(1, 2, 3, 4)
构造列表的两个基本单位是Nil和::。上面的构造可以写成
Scala强大的模式匹配机制,可以应用在switch语句、类型检查以及“析构”等场合。样本类对模式匹配进行了优化。这里介绍的是模式匹配的基本知识。
样本类(case class)
添加了case关键字的类便是样本类。例如
abstract class Expr
case class Var(name:String) extends Expr
case class Number(num:Double) extends Expr
case class UnOp(operator : String , arg : Expr) extends Expr
case class BinOp( ...
定义
类的定义例子如下。
class Point(xc: Int, yc: Int) {
var x: Int = xc
var y: Int = yc
def move(dx: Int, dy: Int) {
x = x + dx
y = y + dy
}
override def toString(): String = "(" + x + ", " + y + ")";
}
move方法有两个参数,没有返回值(这里Scala缺省了Unit,类似于Java中void的返回) ...
特质是Scala中一个很重要的特性。
更灵活的接口
Scala的特质(trait)定义和class几乎相同,只是trait不能的构造不能包含参数。
trait TraitClassA {
def doSomething() {
println("call A");
}
}
trait TraitClassB {
def doSomething() {
println("call B");
}
}
在使用trait的时候,可以用extend或者wi
数组是最基本的数据结构。通常的语法或数据结构书都会先介绍数组,而后再介绍集合,链表,树,哈希表等等。我们也不例外。
定长数组
最简单的数组创建如下,记住方括号在Scala中用做泛型,相当于<>在Java中作用。
val nums = new Array[Int](10)
// 10个Integer的数组,初始值为零。
更简洁的数组创建像这样:
val s = Array("Hello", "World")
If 表达式有返回值
你可以这样赋值,
val s = if (x > 0) 1 else -1
这样就不必像下面这样,这里s就必须是一个变量了。
if (x > 0) s = 1 else s = -1
你甚至可以根据情况返回不同类型的值
if (x > 0) "OK" else -1
匿名函数
函数可以没有名称,可以直接赋值。如果函数有多行表达式组成,就加上大括号。这一点对匿名函数同样适用。
scala> val addOne = (x: Int) => x + 1
addOne: (Int) => Int = <function1>
scala> addOne(1)
res4: Int = 2
注意到Scala中一切都是对象。所以addOne是一个对象。同时它又是个包含一个参数的函数。此时,函数和对象得到了统一。
偏函数应用 (Partial Application)
声明值和变量
值(value)声明以后不能修改其内容
val result = 3 + 4 * 5
result = 0 // error
变量(variable)声明以后可以修改其内容。
var counter = 0
counter = 1 // ok
很C++,Java不同,Scala鼓励尽量使用val,避免副作用的发生。另外,可以看到我们没有像Java一样给result或者counter声明类型。Scala可以通过赋值推测出其类型。当然如果需要,也可以显示标明类型。
Scala是一个比较复杂的语言,比较适合具有一定的编程经验来学习。我这里也是假定读者有一定的编程经验。
REPL
和其他现代编程语言相似,通常入门Scala的第一步是它的解释器或REPL。
前往http://www.scala-lang.org/downloads 下载Scala在各个平台的安装包,安装后,在命令行中输入scala并回车,即可进入交互式编程环境
为什么要用Scala
- 博客分类:
- Scala
为什么还需要一个新的语言呢?我们希望程序更简洁,更易读,更不容易出错,充分利用现代处理器的多核特性,可以相对容易地实现分布式应用。
专家推荐
Groovy创始人James Strachan曾经说过:
我认为将来可能替代Java的就是Scala 。它实在太让我印象深刻了。我甚至可以诚实地说,如果有人在2003年把那本《Programming in Scala》拿给我看了的话,那我根本就不会再去发明Groovy了。
JavaOne会议期间,在一个参加的讲座中有人向Java之父James Gosling提了一个有意
HTTP负载测试的目的是测试站点或服务是否能够能在一定的时延范围内每秒处理上万到百万个请求。在Java的世界里,最常用的免费负载测试工具是Apache JMeter。这里介绍另外一个工作——gatling,以及如何将其与一种随机数据生成器一起使用。
Gatling是一个开源的,基于Scala, Akka和Netty的负载测试框架。它首要的特性就是高效。利用有限的资源,Gatling可以生成海量的并发请求。其次,编写测试脚本十分简单和直观。它是基于scala的领域特定语言(DSL)。一个简单的例子如下:
cenario("Standard User")
...
IT 自动化
现在市面上用一些实现IT自动化的工具,例如 puppet, chef, salt。Ansible 是一个相对比较新的工具,但目前社区十分活跃。我用过puppet和ansible。这里想讨论一下我偏爱ansible的原因。
架构选择
Puppet和chef这样的工具使用的是master-agent 模式(或者说是拉模式)。在这种模式下,需要部署的节点上需要安装代理。这些代理会定期向主节点传送部署节点的状态信息。主节点再向部署节点发送命令,以保证状态的稳定。这样做有一下几个问题:
安装和使用代理无疑代理额外开销和稳定性隐患
定期确保状态使得状态的更改和应用的升级变得十分困难, ...
REST已然成为最流行的提供外界服务API的方式。同时,随着互联网和物联网的普及,如今的应用需要处理大量并发的请求。因此,开发高性能REST服务已经成为一个成功应用的必备条件。我这里集中讨论Java和JVM相关技术。基于Java的REST应用比基于python和ruby的应用往往具备更好的性能。而另外一些新兴的语言如Go超出了讨论的范围。标准JAX-RS是Java世界定义REST API的通用标准。Jersey 是JAX-RS的官方实现,(其他实现如rest-easy)。这是一个简单的Jersey REST GET例子。
@Path("myresource")
pub ...
上次说到了Hadoop是目前最流行的大数据工具,其核心是HDFS来存储数据和MapReduce来处理数据,但它又不仅仅如此。后来,围绕着Hadoop相继出现了一系列的应用。比如存储结构化数据的HBase,用于和传统数据实现数据迁移的Spooq,SQL ...
提及Hadoop这一大数据存储和处理工具,自然要从它的爸爸Doug Cutting说起。Doug Cutting不仅仅是Hadoop的创始人,还是大名鼎鼎的搜索引擎工具Lucene的开创者。一个程序员能有一个开源软件为千万人所用,而且历久弥新,已经是十分难得。兼具多个的就更是寥寥了。有类似经历的如Linus Torvalds,即是Linux发明者同时也开发了Git。2002年,Doug Cutting和他的小伙伴Mike Cafarella开始开发一个网络搜索引擎:Nutch。但是,他们很快意识到最初的实现无法扩展。幸而在2003到2004年,Google的两篇文章GFS(分布文件系统)和Ma ...