由于项目的需要接触了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. 使用VC++ ATL实现iStylePDF的COM插件

    本文介绍了一种使用VC++ ATL(Active Template Library),利用ISPExtensibility接口,为 iStylePDF 加入功能简单的COM插件(addin),加入工具 ...

  2. php+js进度读取条

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  3. main函数的详解

    public : 公共的. 权限是最大,在任何情况下都可以访问. 原因: 为了保证让jvm在任何情况下都可以访问到main方法. static: 静态.静态可以让jvm调用main函数的时候更加的方便 ...

  4. 统计学习中感知机的C++代码

    感知机是古老的统计学习方法,主要应用于二类线性可分数据,策略是在给定的超平面上对误差点进行纠正,从而保证所有的点都是正确可分的. 用到的方法是随机梯度下降法,由于是线性可分的,可保证最终在有限步内收敛 ...

  5. HTML5 十大新特性(三)——视频和音频

    一.视频(video) H5新加了video标签,用来播放视频,默认为一个300*150的inline-block. 二.音频(audio) H5新加了audio标签,用来播放音频,默认为一个300* ...

  6. openssl evp RSA 加密解密

    openssl evp RSA 加密解密 可以直接使用RSA.h 提供的接口 如下测试使用EVP提供的RSA接口 1. EVP提供的RSA 加密解密 主要接口: int EVP_PKEY_encryp ...

  7. 打开hibernate文件报警告

    在web工程中新建一个,Hibetnate项目,打开配置文件报警高错误,This project is not a MyEclipse Hiberbate Project. Assuming Hibe ...

  8. int(3)和int(10)的区别

    int(M) 在 integer 数据类型中,M 表示最大显示宽度.在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系. int(3).int(4).int(8) 在磁盘上都 ...

  9. oracle 的分析函数

    row_number() over(partition by ... order by ...) rank() over(partition by ... order by ...) dense_ra ...

  10. c#数据绑定(5)--LINQ

    嶽永鹏/文 本实例以MS AdventureWorks2008Entities数据库为基础,演示了LINQ TO ENTITY.LINQ TO ENTITYSQL和LINQ TO ENTITYCLIE ...