初学Scala
由于项目的需要接触了Scala语言,也花了一些时间来了解和学习Scala,今天对学习的Scala进行一个小的总结。
1.What is Scala?
Scala的官方网站上给出的解释是:
Scala is an acronym for “Scalable Language”. This means that Scala grows with you.
Scala是“Scalable Language” 扩展性(可伸缩性)语言的缩写,是一门可以与你共同成长的语言。Scala的可扩展性(伸缩性)体现在你既可以用它来写一行简单的脚本来查看输出,也可以用它来构建庞大复杂的系统。在官网首页对Scala的描述是Object-Oriented Meets Functional,这也Scala具有可扩展性(伸缩性)的根本原因。
At the root, the language’s scalability is the result of a careful integration of object-oriented and functional language concepts
Scala是面向对象和函数式的集成。在Scala编程一书中,对象的描述如下:
原则上,面向对象编程的动机非常简单:除了最琐碎的程序之外的绝大多数都需要某些结构。做的这点最直接的办法就是把数据和操作放进某种形式上的容器。面向对象编程里最伟大的思想是让这些容器完全地通用化,
这样它们就能像保存数据那样保存操作,并且它们是自己的值,可以存储到其他容器里,或作为参数传递给操作。这样的容器就被叫做对象。
而Scala则是更加纯粹的面向对象语言:每个值都是对象,每个操作都是方法调用
Scala is a pure-bred object-oriented language. Conceptually, every value is an object and every operation is a method-call
同样Scala也具有函数式的特征,在Scala编程一书中,函数的描述如下
函数式编程有两种理念做指导,第一种理念是函数是第一类值。在函数式语言中,函数也是值,与,比如说,整数或字串,在同一个地位。
函数式编程的第二个主要理念是程序的操作符应该把输入值映射到输出值而不是就地修改数据。
2.Why choose Scala?
Scala在编程实现上具有很多特性,其中有四个特点是非常重要的:
1)Seamless Java Interop
Scala是兼容的,因为它被设计成无缝地与Java实施互操作。
Scala runs on the JVM. Java and Scala classes can be freely mixed, no matter whether they reside in different projects or in the same. They caneven mutually refer to each other, the Scala compiler contains a subset of a Java compiler to make sense of such recursive dependencies.
2)Scala是简洁的
Scala程序一般都很短。首先,Scala的语法避免了一些束缚Java程序的固定写法。例如,Scala里的分号是可选的,且通常不写。有助于Scala的简洁易懂的另一个因素是它的类型推断。重复的类型信息可以被忽略,因此程序变得更有条理和易读。
3)Scala是高层级的
Scala可以通过让你提升你设计和使用的接口的抽象级别来帮助你管理复杂性。例如,假设你有一个String变量name,你想弄清楚是否String包含一个大写字符。在Java里,你或许这么写:
// 在Java里
boolean nameHasUpperCase = false;
for (int i = 0; i < name.length(); ++i) {
if (Character.isUpperCase(name.charAt(i)))
{ nameHasUpperCase = true; break;
}
}
在Scala里,你可以写成:
val nameHasUpperCase = name.exists(_.isUpperCase)
4)Scala是静态类型的
静态类型系统认定变量和表达式与它们持有和计算的值的种类有关。Scala坚持作为一种具有非常先进的静态类型系统的语言
初学Scala的更多相关文章
- 转载:scala中:: , +:, :+, :::, ++的区别
原文链接:https://segmentfault.com/a/1190000005083578 初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. ...
- scala中的一些特殊符号的意义
1.作为“通配符”,类似Java中的*.如import scala.math._ 2.:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就 ...
- [转] scala中:: , +:, :+, :::, +++的区别
[From] https://segmentfault.com/a/1190000005083578 初学scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别 ...
- Scala构建工具sbt的配置
时间是17年12月24日.初学Scala,想使用它的标配构建工具sbt,结果好大一轮折腾,因为公司隔离外网,需要内部代理,所以尤其折腾.下面的配置参考了好多篇不同的文章,已经没法一一留下出处了.而且还 ...
- 在scala中:: , +:, :+, :::, +++的区别总结
初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. 4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. ...
- 非典型的scala程序及其编译后的结果
初学Scala Folder structure以及部分代码 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xldmVyd3lx/font/5a6L5L ...
- 转载:scala中的:+\+:\::\:::
原文链接:https://segmentfault.com/a/1190000005083578 初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. ...
- scala初学
起因:新公司的程序用scala,为了不落后,不落伍,跟上时代的浪潮,咱们测试也得学学新东西 适合读者:有java经验的IT人士 scala:所有变量都是对象,所有操作都是方法 1.定义变量:变量:类型 ...
- scala初学笔记
tips: 1.函数的定义: def addOne(m: Int): Int = m + 1 m为参数,要指定其类型,Int: 后边跟着返回值的类型,Int= 后边是函数的内部 2.匿名函数: (x: ...
随机推荐
- 程序设计入门——C语言 第8周编程练习 2GPS数据处理(6分)
题目内容: NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine ...
- 第四周作业-yjw
运动策略分析 首先我们可以得到我方击球手质心的位置,球的质心的位置,对方球门中心位置.同时以桌面边缘为坐标轴,建立笛卡尔坐标系.可以明确的一点是,击球手的运动为曲线,球进框的运动为直线,或者折线. 击 ...
- simpson法求积分 专题练习
[xsy1775]数值积分 题意 多组询问,求\(\int_l^r\sqrt{a(1-{x^2\over b})}dx\) 分析 double f(double x) { return sqrt(a* ...
- HashMap多线程并发问题分析
转载: HashMap多线程并发问题分析 并发问题的症状 多线程put后可能导致get死循环 从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题. ...
- Python下载进度条
import dialog,e32,appuifw def ru(x):return x.decode('utf8') def qu(): appuifw.note(ru('已取消')) wait.c ...
- (46) odoo核心文档分享
*前言: 要掌握一个系统,还得有扎实的基础,最好的方法,阅读核心文档 然后去实践. *核心文档列表如下: odoo8官方参考.pdf 链接: http://p ...
- visual studio错误解决 [error LNK1104: 无法打开文件“gdi32.lib”]
哔了狗.我是win7装的vs2013,本着体验一下"新"玩意的心情.(然而2017都快出来了),没想到竟遇到如此粗鄙的问题. 从错误信息上明显可以了解是缺少一个静态库.(当然错误信 ...
- Spring Bean
一.Spring的几大模块:Data access & Integration.Transcation.Instrumentation.Core Spring Container.Testin ...
- YY前端课程3
1. 常用的字符实体(html实体):空格= <=< >=> 版权符号=© 2. ID就像身份证号一样,是唯一的,html页面的ID不能重复: ...
- 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳
<Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...