再拾Scala

Scala 运行于JVM之上,拥有海量类库和工具,兼顾函数式编程和面向对象。

在Scala中, 解释器就是我们喜欢的REPL,变量或者函数的类型总是写在变量或函数的后面(与java相反),数值类型的转换通过方法而不是强制类型转换,仅当同一行代码存在多条语句时才需要用分号隔开。

scala 允许自定义操作符,注意有分寸地使用,在使用scala.开头的包时,可以省去scala前缀。scala没有静态方法,类似的特性可以用单例对象,一个类对应的companion object就跟Java中的静态方法一样,使用companion object的apply方法是scala中构建对象的常用方法。

控制

在scala中,判断语句跟其他语言类似,但{}块包含一系列表达式,其结果也是一个表达式,块中最后一个表达式的值就是块的值。

在for 循环的变量之前并没有val或var的指定。该变量的类型是集合的元素类型,循环变量的作用域一直持续到循环结束。scala并没有提供break或continue语句来退出循环,替代方法如下: 1)使用Boolean的控制变量 2)使用嵌套函数——在函数中return 3)使用Breaks对象中的break方法,控制权的转移是通过抛出和捕获异常完成的,出于性能考虑,尽量避免这一机制。

for有丰富的形态,可以提供多个生成器,并带有if开头的表达式,还可以使用任意多的循环变量定义。

函数

scala中的方法对对象进行操作,而函数不是,C++中也有函数,不过在Java中智能用静态方法模拟,scala的函数不需要return,对应递归函数必须指明返回类型,可以混用未命名参数和带名参数,只要那些未命名的参数是排在前面的即可。

同样,变长参数列表很方便,通过 :_* 将值序列转换成参数序列。当变长参数类型为Object的Java方法时,需要手工对基本类型进行转换。

scala对不返回值的函数有特殊的表示法,如果函数体包含在花括号当中但没有前面的=号,那么返回类型就是Unit,这样的函数也叫过程函数。

当val 被声明为lazy时,它的初始化将被延迟加载,直到对它初次取值。每次访问延迟加载的变量,都会有一个方法被调用,以线程安全的方式检查该值是否已被初始化。

异常

scala异常的工作机制和Java或C++一样,但没有"受检"异常,捕获异常采用模式匹配的语法,不需要使用捕获的异常对象,可以用_来替代变量名。try/catch和try/finally是互补的。

时间: 2024-12-15 18:02:23

再拾Scala的相关文章

再谈Scala集合

集合!集合!一个现代语言平台上的程序员每天代码里用的最多的大概就是该语言上的集合类了,Scala的集合丰富而强大,至今无出其右者,所以这次再回过头再梳理一下. 本文原文出处:  还是先上张图吧,这是我找到的最好的一个关于Scala集合的图了,出自:http://lkumarjain.blogspot.co.id/2015/01/scala-collection-framework.html : 一致的构建风格 在Scala里我们使用一致的简洁的语法实例化一个集合,不管你使用的是一个Trait还是

再撸一次简单的NODE.JS

这毕竟大势所趋,了解一下无防的. 最终,对JS的要求还是有点高... 以后弄过一次,很快就忘了. 再来再拾起来一下. server.js var http = require("http"); var url = require("url"); function start(route, handle) { function onRequest(request, response){ var postData = ""; var pathname

【scala初学】scala symbol 符号 -3

前面接触了scala符号,这会整体性的说说. scala符号主要分为四类: 1. 关键字,保留字 (Keywords/reserved symbols) 2. 自动导入 (Automatically imported methods) 3. 常用方法 (Common methods) 4. 语法糖(Syntactic sugars) 前两章主要讲到了1.关键字 2.常用方法 这章补充 自动导入,和语法糖 自动导入 任何scala代码中都自动导入了如下: //顺序无关 import java.la

为什么选择Scala,它在大数据处理方面有何优势?

近年来,关于大数据讨论已然是热火朝天,虽不说是家喻户晓,那至少对于业界来说也是引起了轩然大波.作为学生党的我,最近也在研究关于大数据的东东.作为一个技术迷,总是会想尝试一些新鲜的东西.前一段时间学习了Hadoop之后,又想看看Spark是什么东东.那么在这里有必要八卦一下Spark了. Spark是发源于美国加州大学伯克利分校AMPLab的集群计算平台.它立足于内存计算,从多迭代批量处理出发,兼收并蓄数据仓库.流处理和图计算等多种计算范式,是罕见的全能选手.就大数据集而言,对典型的迭代机器 学习

Scala学习回顾(一)---- scala的环境搭建

注:本文学习源自:DT大数据梦工厂(微信公众号:DT_Spark) 1.先下载scala安装包: 为后续spark的学习,咱们需要选择版本:2.10.4 http://www.scala-lang.org/download/2.10.4.html 2.安装完后,选择scala IDE,一个是Eclipse scala IDE,另一个是Intellij IDEA 因个人偏爱于Intellij IDEA,故以Intellij IDEA为例. 3.IDEA的使用 ①新建Model ②选择scala ③

Play scala 7 一步一步QuickSort

1. 算法思想 如果一个待排序的数列,所有的数都已经在正确的位置上了,那么排序完毕. 先随便选一个数,把它放在正确的位置上.它左边是未排序的,右边也是未排序的. 此时,已经将在一个较长数列上排序的问题转化成了在两个较小数列上排序的问题. 参考:http://developer.51cto.com/art/201403/430986.htm 以数列 a = {6 , 1,  2, 7,  9,  3,  4,  5, 10 , 8} 为例 2. 为了将6放到正确的位置上(升序),我首先想到的是:从

使用SBT构建Scala应用【转载】

使用SBT构建Scala应用 SBT简介 SBT是Simple Build Tool的简称,如果读者使用过Maven,那么可以简单将SBT看做是Scala世界的Maven,虽然二者各有优劣,但完成的工作基本是类似的. 虽然Maven同样可以管理Scala项目的依赖并进行构建, 但SBT的某些特性却让人如此着迷,比如: 使用Scala作为DSL来定义build文件(one language rules them all); 通过触发执行(trigger execution)特性支持持续的编译与测试

scala语法解析(解码指环)

看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了. scala语法解析(解码指环)

IntelliJ IDEA开发Spark的Maven项目Scala语言

1.Maven管理项目在JavaEE普遍使用,开发Spark项目也不例外,而Scala语言开发Spark项目的首选.因此需要构建Maven-Scala项目来开发Spark项目,本文采用的工具是IntelliJ IDEA 2016,IDEA工具越来越被大家认可,开发java, python ,scala 支持都非常好,安装直接下一步即可. 2.安装scala插件,File->Settings->Editor->Plugins,搜索scala即可安装. 3.创建Maven工程,File-&g