`
jeff312
  • 浏览: 77296 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

Scala 学习感想(持续更新)

    博客分类:
  • J2EE
阅读更多
有一点写一点,不成章法,没有顺序。

Traits 的意义:java class 可以通过实现数个接口来规范自己的行为,但是interface无法提供通用代码共享给所有实现它的class。这个事情本来可以由继承来做,但是一方面jvm不支持多继承,另一方面继承本身是个侵入性很强的关系,对象管理会遭遇很多麻烦。Traits巧妙解决了多继承的问题,同时还规避了很多不必要的复杂性(即使是支持多继承的C++,其实现复杂度也被建议能避免则避免)。

(6/4/2011)
----------------------------------------------------------------------

val 的好处:在许多java编程最佳实践中都有这样的原则,即尽量用final定义变量,考虑到潜在的并发问题,immutable的对象和变量始终都应该作为首选。但是程序中的变量何其多也,在java里这样做会使得代码过于繁冗(想像一下满目final的情形,会让人恶心到吐吧)。scala 使用了一个简短的 val,加上无需明示类型,省多少键盘啊,用mac的人有福了。

(7/4/2011)
----------------------------------------------------------------------

无比灵活的pattern match,核心其实是Companion Object(尽管不限于此),隐式的apply(构建) 与 unapply(解构) 方法,使得 matching 的语法特别简洁,高效:
case class C1(f1: Int, f2: String)
val c1 = C1(5, "Hello") //隐式调用apply()方法,构建对象实例
val result = c1 match {
  case C1(f2) => "returned: " + f2 //matching 的同时以unapply()解构,获得f2
  case _ => "No matched"
}
println(result)

短短一块代码,做了五件事:
1. 定义了C1这个简单结构类,case关键字让编译器自动为其实现了hashCode(), equals(), 和toString()三个方法(注:有点像java里的Serialized接口,但更方便)。同时,隐式地为C1定义了一个Companion Object。
2. 利用Companion Object 的apply()方法构建一个C1的对象实例c1(作用相当于java里的静态工厂,然而编码效率高了几百倍,定义一个静态工厂方法何其麻烦,考虑到并发安全又得添加一堆代码)。
3. 对c1进行类型检验,分支处理。
4. 类型检验的同时利用unapply()解构,立即就获得了属性f2的引用并加以处理。
5. match 本身提供返回值,不必像java需要在match块外定义变量以备存储返回值,将面向对象的“封装”概念发挥得淋漓尽致。

我相信,无论哪个java程序员都会被scala强烈吸引的(除非没听说过),因为它实在是保护了我们日益僵硬的手指和键盘这类公司财产:)。有很多动态语言甚至可以做到更加简洁的地步,但往往是以牺牲细节控制为代价的,编码的高效往往带来运行时的低性能。scala同时兼顾了细节性能控制和高效编码,真是个神奇的语言。

(11/4/2011)
----------------------------------------------------------------------

scala 语言本身的扩展性广阔无限,缘于其优秀的设计。scala 的方法名可以选用的范围比java宽得多了,配合调用方法可省略"."和"()" 的特性,一个方法的调用可以如下:
obj1 *-< obj2

用java的习惯应该写成下面这样:
obj1.*-<(obj2);

其中 *-< 是方法名,obj2是这个方法的唯一参数。当然java编译器不会允许方法起这种名字。
scala 的写法多么简洁,调用方法就像使用运算符一样简单,java里要做成这样得升级语言特性(还是静态加入,不可改),比如得从java8升级到java9,而在scala里你可以自己定义成千上万这种类似运算符的方法,甚至自建一个语言库。因此,scala 的语言可以通过类库来扩展,可能性几乎是无限的,比起傻傻地等待java6到java7的升级,这可不知道领先了多少年。

(11/4/2011)
----------------------------------------------------------------------

用了两天时间才把 FP 的章节看完。惯于在OO思想下编程的头脑,要一下子吃透 FP 还真不容易。平时其实也有写一些js,对于闭包之类的概念还是有些基础的,但从软件设计的角度来学习FP还是头一遭,curry函数很有趣也很实用,implicit又是一个增强代码复用的有力武器(只是debug起来有些风险)。学习FP后头脑一个最大的改变,是immutable开始深深影响我的每一个编程活动。JavaBean技术标准,首先规定bean的属性不能裸奔,外界对相应属性的访问必须通过方法,于是我们需要一大堆看到就想吐的getter和setter,无异于作茧自缚。当一个bean是immutable对象时,所有属性想裸奔就裸奔,反正是永不可改,无需任何不必要的担忧。scala能够这样做,根据教程作者的说法,是scala能够低成本地创建对象实例,因此无需考虑复用对象的状态,想要略作修改再拿来用,自己创建一个copy就行了。

(13/4/2011)
----------------------------------------------------------------------

多线程开发,Actor绝对是是个可爱至极的小东西。java的多线程编程涉及细节太多,什么同步锁啊,notify啊,本来很清晰的逻辑模型,被java乱七八糟地一搅合,面目全非,要从阅读代码上看出点什么逻辑变得极其困难。当然你可以说那是代码过于平铺,没有设计好,但是要设计好又得付出艰苦的脑力劳动 —— 说白了,java无所不能,只是代价太高。Actor的程序写起来就简洁、自然多了,actor之间互传消息,如同现实中的几个人协作一样自然,比小学生作文还好写。

(14/4/2011)
----------------------------------------------------------------------

分享到:
评论

相关推荐

    最好的scala学习 课件

    本课件是针对Scala学习者精心准备的资源,旨在帮助你深入理解和掌握Scala的核心概念,并进一步熟悉在Spark框架中的应用。 首先,我们从"Scala进阶之路-part01-基础.pdf"开始,这部分内容主要涵盖了Scala的基础知识...

    学习scala好的项目

    在这个名为"学习scala好的项目"的压缩包中,我们可以期待找到一系列有助于初学者掌握Scala编程的知识资源。 首先,让我们深入探讨Scala的基础知识。Scala的语法简洁而富有表现力,它的类型系统支持静态类型检查,有...

    Scala学习笔记,大全笔记

    Scala学习笔记,大全笔记

    scala学习资料(带书签)

    这个压缩包“scala学习资料(带书签)”提供了一个全面的学习路径,从基础到高级,帮助你深入理解和掌握Scala语言。 **入门篇** 1. **基础语法**:Scala的基础包括变量声明、类型系统、控制结构(如if/else、循环)...

    scala学习源代码

    这个"scala学习源代码"的压缩包文件很可能包含了用于教学或自我学习Scala编程的基础示例。让我们深入了解一下Scala语言的关键概念和特性。 首先,Scala运行在Java虚拟机(JVM)上,这意味着它可以无缝地与Java库...

    Scala学习笔记(全)

    ### Scala学习笔记(全) #### 一、Scala概述与特点 Scala是一种多范式的编程语言,旨在集成面向对象编程和函数式编程的各种特性。它运行于Java平台(Java虚拟机JVM),并且能够完全兼容所有的Java程序。这使得Scala...

    SCALA 学习手册 2016.02

    SCALA 学习手册 2016.02

    scala学习手册.zip

    Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化 。Scala的Case Class及其内置的模式匹配相当于函数式编程语言中常用的...

    scala 学习

    其次,网络上有大量的免费Scala学习资源可供参考。比如,通过google搜索“programminginscala2ndedition.pdf”,我们可以找到《Programming in Scala》这本书的第二版电子版资源。这本书由Scala语言的主要设计师和...

    scala 学习资料

    Scala是一种强大的多范式编程语言,它融合了面向对象...总之,Scala以其强大的功能和灵活性在大数据和并发领域占据了一席之地,学习Scala不仅可以提升你在Spark开发中的效率,还能让你更好地理解和应用函数式编程思想。

    scala学习帮助文件

    这个"scala学习帮助文件"包含了Scala编程的第一发行版,第六版本的详细内容,是学习Scala语言的宝贵资源。 在 Scala 编程中,基础概念包括变量、常量、数据类型(如基本类型Int、Double、String,以及类类型和集合...

    scala学习笔记整理

    在"scala学习笔记整理"中,我们可以深入探讨以下关键知识点: 1. **基础语法**:Scala的基础语法与Java有相似之处,但也有很多独特的特点。例如,它支持变量的不可变性(immutability),使用`val`声明常量,`var`...

    scala学习-project.zip

    这个"scala学习-project.zip"压缩包很可能是为了帮助初学者或者开发者深入理解Scala语言而设计的一个实践项目。下面,我们将深入探讨Scala的一些核心概念和关键知识点。 1. **基础语法**:Scala的语法与Java有些...

    Scala学习之路(一)

    ### Scala学习之路(一)—— 开发环境搭建与首个程序 #### 一、Scala简介 Scala是一种多范式编程语言,旨在实现可扩展性,并融合了面向对象编程和函数式编程的最佳特性。作为一种与Java非常相似的语言,Scala能够...

    Scala-学习资料-mht.rar

    在"Scala-学习资料-mht.rar"这个压缩包中,包含了关于Scala的学习资料,格式为MHT(单一文件网页),这种格式通常用于保存完整的网页内容,包括文本、图像和样式表。 首先,我们来了解一下Scala的基础知识。Scala这...

    scala学习资料

    - Scala与其他技术的结合:如Spark、Akka等,学习如何在实际项目中应用Scala。 总的来说,Scala是一种强大的工具,它的设计哲学是提供一种既能充分利用面向对象编程的优势,又能发挥函数式编程优点的语言。通过学习...

    spark+scala学习

    ### Spark+Scala 学习知识点概述 #### 一、Scala语言基础 **1. Scala语言简介** Scala是一种融合了面向对象编程与函数式编程特性的现代编程语言。它旨在简化编程,提供更简洁、强大的代码编写方式。Scala运行在...

    scala深入学习

    同时,由于Scala构建在Java平台上,了解Java对于Scala学习者来说是非常有帮助的,因为可以将Java的生态和已有的知识无缝迁移到Scala上。 深入学习Scala,除了阅读书籍和文档之外,还需要大量的实践。参与开源项目、...

    scala学习视频(基础)&讲义

    scala学习视频资料以及讲义,从基础的环境配置开始讲起,以及后面具体案例开发.适合新手学习,还有具体讲义对照复习查看。

    eclipse-Scala不兼容的更新包

    本文将深入探讨“eclipse-Scala不兼容的更新包”这一问题,以及如何解决Spark与Scala版本不匹配的问题。 首先,Spark是一个流行的分布式计算框架,广泛应用于大数据处理。它与Scala语言紧密集成,因为Spark的主要...

Global site tag (gtag.js) - Google Analytics