由于项目的需要接触了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的更多相关文章

  1. 转载:scala中:: , +:, :+, :::, ++的区别

    原文链接:https://segmentfault.com/a/1190000005083578 初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. ...

  2. scala中的一些特殊符号的意义

    1.作为“通配符”,类似Java中的*.如import scala.math._ 2.:_*作为一个整体,告诉编译器你希望将某个参数当作参数序列处理!例如val s = sum(1 to 5:_*)就 ...

  3. [转] scala中:: , +:, :+, :::, +++的区别

    [From] https://segmentfault.com/a/1190000005083578 初学scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别 ...

  4. Scala构建工具sbt的配置

    时间是17年12月24日.初学Scala,想使用它的标配构建工具sbt,结果好大一轮折腾,因为公司隔离外网,需要内部代理,所以尤其折腾.下面的配置参考了好多篇不同的文章,已经没法一一留下出处了.而且还 ...

  5. 在scala中:: , +:, :+, :::, +++的区别总结

    初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. 4种操作符的区别和联系 :: 该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表. ...

  6. 非典型的scala程序及其编译后的结果

    初学Scala Folder structure以及部分代码 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2xldmVyd3lx/font/5a6L5L ...

  7. 转载:scala中的:+\+:\::\:::

    原文链接:https://segmentfault.com/a/1190000005083578 初学Scala的人都会被Seq的各种操作符所confuse.下面简单列举一下各个Seq操作符的区别. ...

  8. scala初学

    起因:新公司的程序用scala,为了不落后,不落伍,跟上时代的浪潮,咱们测试也得学学新东西 适合读者:有java经验的IT人士 scala:所有变量都是对象,所有操作都是方法 1.定义变量:变量:类型 ...

  9. scala初学笔记

    tips: 1.函数的定义: def addOne(m: Int): Int = m + 1 m为参数,要指定其类型,Int: 后边跟着返回值的类型,Int= 后边是函数的内部 2.匿名函数: (x: ...

随机推荐

  1. Gbase数据库备份与还原

    备份命令:cd D:\GeneralData\GBase\Server\bin        回车 后 : d :        回车 后: dump.exe -usysdba(u+用户名) -pbj ...

  2. POI 解析xls

    1.所需jar包 poi-3.6.jar poi-ooxml-3.6.jar 2.M.java package junit; import java.io.FileInputStream; impor ...

  3. Scrum Meeting 12-20151218

    任务安排 姓名 今日任务 明日任务 困难 董元财 无 网络连接框架优化 无 胡亚坤 无 修复商品列表排列混乱) 无 刘猛 无 无 马汉虎 无 无 赖彦俞 无 无 燃尽图 团队照片 代码签入记录 今天开 ...

  4. Nginx模块之———— RTMP 模块的在线统计功能 stat 数据流数据的获取(不同节点则获取的方式不同)

    一.目前只有一个Live节点存在 单节点获取方式如下: public function getStreamByIp($outerIP, $streamName) { //查询录像模块的IP地址外网,根 ...

  5. JavaScript中有关数字的精确计算

    问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) ,我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会 ...

  6. iOS 工程功能实现之好用的第三方

    1.http://www.cocoachina.com/ios/20140224/7868.html  (一个天气App案例) LBBlurredImage是一个继承自UIImageView,轻而易举 ...

  7. ubuntu16.04 + ubuntu + apache2 配置apache解析php

    给apache安装php扩展:  sudo apt-get install libapache2-mod-php 注:这是apache解析php文件的关键,光修改配置文件不安装扩展是不起作用的. 目录 ...

  8. python——赋值与深浅拷贝

    初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...

  9. XSS 初识

    xss(跨站脚本攻击)xss是指攻击者在网页中嵌入客户端脚本,通常是javascript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将在用户的浏览器上被解析执行.重点是“脚本” ...

  10. 抓包工具--Fiddler及charles的使用

    Fiddler和charles--是抓包工具,可以抓到pc端的请求,手机上设置代理后也可以抓到手机上的请求,也可以修改请求数据和返回的数据. 1.网页抓包,打开Fiddler或Charles应用直接访 ...