您永远不会忘记您的初恋!
对于我来说,她的名字是 Tabinda (Bindi) Khan。那是一段愉快的少年时光,准确地说是在七年级。她很美丽、聪明,而最好的是,她常常因我的笨拙的笑话而乐不可支。在七年级和八年级的时间里,我们经常 “出去走走”(那时我们是这么说的)。但到了九年级,我们分开了,文雅一点的说法是,她厌倦了连续两年听到同样的笨拙的男孩笑话。我永远都不会忘记她(特别是因为我们在高中毕业 10 周年聚会时再次相遇);但更重要的是,我将永远不会失去这些珍贵的(也许有点言过其实)回忆。
Java 编程和面向对象是许多程序员的 “初恋”,我们对待它就像对待 Bindi 一样尊重和完全的爱慕。一些开发人员会告诉您 Java 将他们从内存管理和 C++ 的炼狱中解救出来了。其他一些人会告诉您 Java 编程使他们摆脱了对过程性编程的绝望。甚至对于一些开发人员来说,Java 代码中的面向对象编程就是 “他们做事情的方式”。(嘿嘿,如果这对我爸爸,以及爷爷有用该多好!)
然而,时间最终会冲淡所有对初恋的记忆,生活仍然在继续。感情已经变了,故事中的主角也成熟了(并且学会了一些新笑话)。但最重要的是,我们周围的世界变了。许多 Java 开发人员意识到尽管我们深爱 Java 编程,但也应该抓住开发领域中的新机会,并了解如何利用它们。
我将始终爱着你。。。
在最近五年中,对 Java 语言的不满情绪逐渐增多。尽管一些人可能认为 Ruby on Rails 的发展是主要因素,但是我要争辩的是,RoR(被称为 Ruby 专家)只是结果,而非原因。或者,可以更准确地说,Java 开发人员使用 Ruby 有着更深刻、更隐伏的原因。
简单地说,Java 编程略显老态了。
或者,更准确地说,Java 语言 略显老态了。
考虑一下:当 Java 语言最初诞生时,Clinton(第一位)在办公室中,很少有人使用 Internet,这主要是因为拨号是在家里使用网络的惟一方式。博客还没有发明出来,每个人相信继承是重用的基本方法。我们还相信,对象是为对世界进行建模的最好方法,摩尔定律将永远统治着世界。
实际上,摩尔定律引起了行业内许多人的特别关注。自 2002/2003 年以来,微处理器技术的发展使得具有多个 “内核” 的 CPU 得以创造出来:本质上是一个芯片内具有多个 CPU。这违背了摩尔定律,摩尔定律认为 CPU 速度将每隔 18 个月翻一倍。在两个 CPU 上同时执行多线程环境,而不是在单个 CPU 上执行标准循环周期,这意味着代码必须具有牢固的线程安全性,才能存活下来。
学术界已经展开了围绕此问题的许多研究,导致了过多新语言的出现。关键问题在于许多语言建立在自己的虚拟机或解释器上,所以它们代表(就像 Ruby 一样)到新平台的转换。并发冲突是真正的问题所在,一些新语言提供了强大的解决方案,太多的公司和企业对 10 年前从 C++ 到 Java 平台的迁移仍记忆犹新。许多公司都不愿意冒迁移到新平台的风险。事实上,许多公司对上一次迁移到 Java 平台仍心有余悸。
了解 Scala。
一种可伸缩语言
Scala 是一种函数对象混合的语言,具有一些强大的优点:
- 首先,Scala 可编译为 Java 字节码,这意味着它在 JVM 上运行。除了允许继续利用丰富的 Java 开源生态系统之外,Scala 还可以集成到现有的 IT 环境中,无需进行迁移。
- 其次,Scala 基于 Haskell 和 ML 的函数原则,大量借鉴了 Java 程序员钟爱的面向对象概念。因此,它可以将两个领域的优势混合在一起,从而提供了显著的优点,而且不会失去我们一直依赖的熟悉的技术。
- 最后,Scala 由 Martin Odersky 开发,他可能是 Java 社区中研究 Pizza 和 GJ 语言的最著名的人,GJ 是 Java 5 泛型的工作原型。而且,它给人一种 “严肃” 的感觉;该语言并不是一时兴起而创建的,它也不会以同样的方式被抛弃。
Scala 的名称表明,它还是一种高度可伸缩 的语言。我将在本系列的后续文章中介绍有关这一特性的更多信息。
下载并安装 Scala
可以从 Scala 主页 下载 Scala 包。截止到撰写本文时,最新的发行版是 2.6.1-final。它可以在 Java 安装程序版本 RPM 和 Debian 软件包 gzip/bz2/zip 包中获得,可以简单地将其解压到目标目录中,而且可以使用源码 tarball 从头创建。(Debian 用户可以使用 “apt-get install” 直接从 Debian 网站上获得 2.5.0-1 版。2.6 版本具有一些细微的差异,所以建议直接从 Scala 网站下载和安装。)
将 Scala 安装到所选的目标目录中 — 我是在 Windows® 环境中撰写本文的,所以我的目标目录是 C:/Prg/scala-2.6.1-final。将环境变量 SCALA_HOME
定义为此目录,将 SCALA_HOME/bin
放置于 PATH
中以便从命令行调用。要测试安装,从命令行提示符中激发 scalac -version
。它应该以 Scala 版本 2.6.1-final 作为响应。
函数概念
开始之前,我将列出一些必要的函数概念,以帮助理解为何 Scala 以这种方式操作和表现。如果您对函数语言 — Haskell、ML 或函数领域的新成员 F# — 比较熟悉,可以跳到下一节。
函数语言的名称源于这样一种概念:程序行为应该像数学函数一样;换句话说,给定一组输入,函数应始终返回相同的输出。这不仅意味着每个函数必须返回一个值,还意味着从一个调用到下一个调用,函数本质上不得具有内蕴状态(intrinsic state)。这种无状态的内蕴概念(在函数/对象领域中,默认情况下指的是永远不变的对象),是函数语言被认为是并发领域伟大的 “救世主” 的主要原因。
与许多最近开始在 Java 平台上占有一席之地的动态语言不同,Scala 是静态类型的,正如 Java 代码一样。但是,与 Java 平台不同,Scala 大量利用了类型推断(type inferencing),这意味着,编译器深入分析代码以确定特定值的类型,无需编程人员干预。类型推断需要较少的冗余类型代码。例如,考虑声明本地变量并为其赋值的 Java 代码,如清单 1 所示:
清单1.声明本地变量并为其赋值的Java代码
|
Scala 不需要任何这种手动操作,稍后我将介绍。
大量的其他函数功能(比如模式匹配)已经被引入到 Scala 语言中,但是将其全部列出超出了本文的范围。Scala 还添加许多目前 Java 编程中没有的功能,比如操作符重载(它完全不像大多数 Java 开发人员所想象的那样), 具有 “更高和更低类型边界” 的泛型、视图等。与其他功能相比,这些功能使得 Scala 在处理特定任务方面极其强大,比如处理或生成 XML。
但抽象概述并不够:程序员喜欢看代码,所以让我们来看一下 Scala 可以做什么。
开始认识您
开始认识您
根据计算机科学的惯例,我们的第一个 Scala 程序将是标准的演示程序 “Hello World”:
清单2.Hello.Scala
|
使用 scalac Hello.scala
编译此程序,然后使用 Scala 启动程序(scala HelloWorld
)或使用传统的 Java 启动程序运行生成的代码,注意,将 Scala 核心库包括在 JVM 的类路径(java -classpath %SCALA_HOME%/lib/scala-library.jar;. HelloWorld
)中。不管使用哪一种方法,都应出现传统的问候。
清单 2 中的一些元素对于您来说一定很熟悉,但也使用了一些新元素。例如,首先,对 System.out.println
的熟悉的调用演示了 Scala 对底层 Java 平台的忠诚。Scala 充分利用了 Java 平台可用于 Scala 程序的强大功能。(事实上,它甚至会允许 Scala 类型继承 Java 类,反之亦然,但更多信息将在稍后介绍。)
另一方面,如果仔细观察,您还会注意到,在 System.out.println
调用的结尾处缺少分号;这并非输入错误。与 Java 平台不同,如果语句很明显是在一行的末尾终结,则 Scala 不需要分号来终结语言。但是,分号仍然受支持,而且有时候是必需的,例如,多个语句出现在同一物理行时。通常,刚刚入门的 Scala 程序员不用考虑需不需加分号,当需要分号的时候,Scala 编译器将提醒程序员(通常使用闪烁的错误消息)。
此外,还有一处微小的改进,Scala 不需要包含类定义的文件来反映类的名称。一些人将发现这是对 Java 编程的振奋人心的变革;那些没有这样做的人可以继续使用 Java “类到文件” 的命名约定,而不会出现问题。
现在,看一下 Scala 从何处真正脱离传统的 Java/面向对象代码。
本文仅转载部分,详细请点击:
http://www.ibm.com/developerworks/cn/java/j-scala01228.html
网上有对本系列的整理:
http://wenku.baidu.com/view/2668ad0abb68a98271fefa90.html
cdsn下载也有资源。
<!-- CMA ID: 286778 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-article-6.0-beta.xsl -->
分享到:
相关推荐
Scala是一种强大的多范式编程语言,它融合了面向对象编程和函数式编程的概念,被广泛应用于大数据处理和分布式计算领域,特别是在Apache Spark等框架中。标题提到的"scala-2.12.14.zip&scala-2.12.11.tgz"是Scala的...
scala-library-2.12.1 是 Scala 编程语言的标准库文件,版本为 2.12.1。它提供了在使用 Scala 进行...Scala 是一种多范式编程语言,融合了面向对象编程和函数式编程的特性,主要运行在 JVM (Java Virtual Machine) 上。
Scala是一种强大的静态类型编程语言,它融合了面向对象和函数式编程的概念,旨在提供一种可扩展的、高效的编程环境。Scala这个名字是“Scalable Language”的缩写,它旨在克服Java的一些局限性,同时保留其平台兼容...
Scala是一种多范式编程语言,融合了面向对象和函数式编程的概念。它被设计成可以在Java虚拟机(JVM)上运行,并可以充分利用Java的生态系统。IntelliJ IDEA的Scala插件提供了对Scala语法的深度支持,包括智能代码...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款著名的集成开发环境(IDE),广泛用于Java、Scala和其他 JVM 语言的开发。"scala-intellij-bin-2020.2.3.zip" 是一个...
Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受赞誉的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能来提升开发效率。针对Scala语言,IntelliJ ...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、类型安全并且可扩展的语言。标题中的"scala-2.12.11.zip"指的是Scala编程语言的一个特定发行版,版本号为2.12.11,...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java和Scala开发者中有着极高的赞誉。"scala-intellij-bin-2021.3.6.zip"是一个...
Scala是一种强大的多范式编程语言,它融合了函数式编程和面向对象编程的特点。IntelliJ IDEA是一款广受赞誉的Java开发集成环境,为开发者提供了高效、智能的代码编写体验。"scala-intellij-bin-0.41"是专门为...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款流行的集成开发环境(IDE),尤其在Java和Scala开发者中广受欢迎。"scala-intellij-bin-2023.1.15.zip" 是一个包含...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的Java开发集成环境,同时也为多种其他语言提供了支持,包括Scala。"scala-intellij-bin-2021.1.22.zip" 是一个...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个"scala-2.12.10.zip"文件是Scala编程语言的特定版本——2.12.10,专为Windows操作系统设计的安装包。Scala 2.12.x系列是该语言的一个...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款广受欢迎的集成开发环境(IDE),尤其在Java开发者中备受推崇。它提供了丰富的功能来支持各种编程语言,包括Scala。`...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念,为开发者提供了丰富的工具集。这个"scala-2.12.13.tgz"文件是Scala编程语言的一个版本,针对Linux操作系统提供的安装包。tgz(tar.gz)格式...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。IntelliJ IDEA是一款广受赞誉的Java集成开发环境(IDE),它为开发者提供了丰富的工具和功能来提升开发效率。"Scala-intellij-bin-2017.2.13...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念,设计目标是提供一种静态类型系统,能够防止程序在运行时出现错误。Scala-2.12.6.tgz是一个针对该语言的最新版本安装包,用于在各种操作系统...
Scala是一种强大的多范式编程语言,它融合了面向对象编程(OOP)和函数式编程(FP)的特点,为开发者提供了丰富的表达能力和高效的代码编写体验。`scala-2.11.8.tgz` 是Scala编程语言的一个发行版本,特别的是2.11.x...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。IntelliJ IDEA是一款非常流行的集成开发环境(IDE),尤其受到Java和Scala开发者喜爱。在本压缩包"scala-intellij-bin-2016.3.1.zip"中,...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。这个"scala-intellij-bin-2019.1.9.zip"压缩包文件是为IntelliJ IDEA开发的一个Scala插件,适用于2019.1.x版本的IDEA集成开发环境。IntelliJ...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个压缩包“scala-intellij-bin-2020.2.23.zip”是为IntelliJ IDEA设计的一个特定版本的Scala插件,适用于2020.2.23更新。IntelliJ IDEA是...