
scala编程思想
badman250
专注分享IT知识技能
展开
-
74.scala编程思想笔记——使用类型类
74.scala编程思想笔记——使用类型类欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。可扩展性对许多设计来说很重要,在构建系统之初,通常不知道将来的应用领域有多宽广。随着需求的增加,需要添加功能来构建新版本。在多态中看到过一种创建可扩展系统的方式:继承出新类,并覆盖其中的方法。SCALA中有一种类叫做:类型类。 类型类使得我们可以将功能与类型解耦,专门原创 2016-01-04 22:08:04 · 30476 阅读 · 0 评论 -
54.scala编程思想笔记——使用特征
54.scala编程思想笔记——使用特征欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。在Scala中,可以将模型划分为恰当的部分。而有些语言则强制进行笨拙的抽象。 特征以及他们的混合是这些工具中最强大的,特征不仅使得语法变得优雅而有意义,并且可以防止代码重复。 因此:n 优先是使用特征而不是更具体的类型n 将模型划分成相互原创 2016-01-02 09:39:53 · 30371 阅读 · 0 评论 -
53.scala编程思想笔记——组合
53.scala编程思想笔记——组合欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。继承描述的是 “是一个”关系。特征表示的是一种能力。 最基础的关系不是继承,也不是特征,而是组合。 例如,这栋房子有两间厨房,如下:trait Buildingtrait Kitchen trait House extends Bui原创 2016-01-02 09:39:25 · 30264 阅读 · 0 评论 -
52.scala编程思想笔记——多态
52.scala编程思想笔记——多态 欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。多态表示许多形态。 表示在不同类型上执行相同的操作。 基类和特征除了用于组装类之外,还有很多其他用途。 例如,如果使用类A、特征B和特征C来创建新类,就可以选择将这个新类只当做A、B或C来处理。 例如原创 2016-01-02 09:38:50 · 30376 阅读 · 0 评论 -
51.scala编程思想笔记——浅尝反射
51.scala编程思想笔记——浅尝反射欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。反射表示拿起一个对象并将其放在镜子前面,这样它就可以发现自身的奥秘。 例如trait会自动 将一个toString方法添加到任何类中,如下:object EchoArgs2 { defmain(args:Array[String]) = for(ar原创 2016-01-02 09:38:20 · 31537 阅读 · 0 评论 -
50.scala编程思想笔记——应用
50.scala编程思想笔记——应用欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 创建代码如下:object WhenAmI extends App { hi println(newjava.util.Date()) def hi =println("Hello! It's:")}编译如下:#scalac Compiled.s原创 2016-01-02 09:37:46 · 30434 阅读 · 0 评论 -
49.scala编程思想笔记——衔接JAVA
49.scala编程思想笔记——衔接JAVA欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。有时候必须导入java包来使用java类。例如java的Date类在scala中不是直接可用的,位于java.util.Date中,需要以导入Scala包的方式导入它。如下:scala> val d=new Date:10: error: not found: typeDa原创 2016-01-02 09:37:12 · 30639 阅读 · 0 评论 -
48.scala编程思想笔记——统一访问方式和setter
48.scala编程思想笔记——统一访问方式和setter欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。先看一个例子如下:import com.atomicscala.AtomicTest._ trait Base { def f1:Int def f2:Int val d1:Int val d2:Int var d3:Int原创 2016-01-02 09:36:37 · 30602 阅读 · 0 评论 -
47.scala编程思想笔记——特征
47.scala编程思想笔记——特征 欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 继承可以在现有类的基础上创建新类。这样就无需从头开始重写所有类。 特征是创建类的另一种可选的方式:允许以零碎的方式获取能力,而不是以整块的方式继承所有能力。 特征是小型的逻辑概念,这些基本的功能项使得我们可以很容易地通过混合各种想法来创建类原创 2016-01-02 09:35:57 · 30573 阅读 · 0 评论 -
46.scala编程思想笔记——抽象类
46.scala编程思想笔记——抽象类欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。抽象类就像普通类一样,只是其中的一个或抖个方法或域是不完整的。Scala延续了java的做法,用abstract关键字来描述抽象类,抽象类包含了未定义的方法或未初始化的域。例如:abstract class WithValVar { val x:Int var y:I原创 2016-01-02 09:35:15 · 30445 阅读 · 0 评论 -
45.scala编程思想笔记——枚举
45.scala编程思想笔记——枚举欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。枚举是名字的集合。Scala的Enumeration类提供 了一种管理这些名字的便捷方式。要想创建一个枚举,通常需要将Enumeration类继承到object.例如:import com.atomicscala.AtomicTest._ object Level ex原创 2016-01-02 09:34:45 · 30519 阅读 · 0 评论 -
44.scala编程思想笔记——覆盖方法
44.scala编程思想笔记——覆盖方法欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。当开发覆盖方法时,继承就变得有趣了。例如:import com.atomicscala.AtomicTest._ class GreatApe { def call ="Hoo!" var energy =3 def eat() = {energy += 10原创 2016-01-02 09:34:08 · 30637 阅读 · 0 评论 -
43.scala编程思想笔记——基类初始化
43.scala编程思想笔记——基类初始化欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。Scala通过确保所有构造器都会被调用来保证正确的对象创建过程:不仅对象导出类的构造器会被调用,基类的构造器也会被调用。 如果基类有构造器参数,那么任何继承自该类的类都必须在构造过程中提供这些参数。例如:import com.atomicscala.Atomi原创 2016-01-02 09:33:37 · 31084 阅读 · 0 评论 -
42.scala编程思想笔记——继承
42.scala编程思想笔记——继承欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 对象将数据存储于域中,并通过操作执行行动。每个对象在内存中都有独占的空间,因此一个对象的域可以具有与所有其他对象不同的值。 类确定过了其对象的形式或模板:域和方法。 使用extends关键字基于现有的类继承了一个新类:如下:impo原创 2016-01-02 09:33:00 · 30664 阅读 · 0 评论 -
41.scala编程思想笔记——伴随对象
41.scala编程思想笔记——伴随对象欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。方法作用于类的特定对象:例如:import com.atomicscala.AtomicTest._ class X(val n:Int) { def f = n *10} val x1 = new X(1)val x2 = new X(2)原创 2016-01-02 09:32:25 · 31092 阅读 · 0 评论 -
40.scala编程思想笔记——元组
40.scala编程思想笔记——元组欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。如果从给某个方法放回的结果必须超过一项,那么创建特殊的类来保存返回值就是一种完全合法的方式。如下:import com.atomicscala.AtomicTest._ case class ReturnBlob(data:Double, info:String)原创 2016-01-02 09:31:51 · 30738 阅读 · 0 评论 -
39.scala编程思想笔记——自动字符串转换
39.scala编程思想笔记——自动字符串转换欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 Case类可以将对象连同其参数恰当的格式化为适于显示的形式,例如:import com.atomicscala.AtomicTest._ case class Bicycle(riders:Int)val forTwo = Bicycle(2)for原创 2016-01-02 09:31:06 · 30750 阅读 · 0 评论 -
55.scala编程思想笔记——标记特征和case对象
55.scala编程思想笔记——标记特征和case对象欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。标记特征是一种将类或对象组织到一起的方式。 Sealed关键告诉scala,除了在此处看到的Color子类型之外,没有任何其他子类型。 Case对象像case类一样,只是产生的是对象而不是类。 例如:impor原创 2016-01-02 09:40:27 · 30706 阅读 · 0 评论 -
56.scala编程思想笔记——类型参数限制
56.scala编程思想笔记——类型参数限制 欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 如果想让一个枚举成为某个特征的子类型,如果是一个普通类,那么只需在继承时将继承时将该特征添加到基类型的列表中,但是在面对枚举时,必须通过从val继承来创建新的value类型。例子如下:import com.atomicscala.AtomicTest._ t原创 2016-01-02 09:41:01 · 30753 阅读 · 0 评论 -
57.scala编程思想笔记——使用特征构建系统
57.scala编程思想笔记——使用特征构建系统 欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 特征是如此独立且影响微小,可以将问题按照需要分解为大量的小碎片。 例如:package sodafountain object Quantity extends Enumeration { type Quantity= Value原创 2016-01-02 09:41:31 · 30763 阅读 · 0 评论 -
73.scala编程思想笔记——扩展方法
73.scala编程思想笔记——扩展方法欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 Scala支持扩展方法,可以在现有类中添加自己的方法。扩展方法是使用隐式类实现的,如果将implicit关键字放到类定义的前面,那么scala就可以自动使用类参数来产生新类型的对象,然后将你的方法应用到该对象上。一个限制是:扩展方法必须在一个object中定义,如下:im原创 2016-01-04 22:07:27 · 30606 阅读 · 0 评论 -
72.scala编程思想笔记——记日志
72.scala编程思想笔记——记日志欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。记日志就是指记录这些事件,使得应用的程序员和管理员得到另一种发现问题的工具。 可以采用Java内建的日志记录机制。例如:package com.atomicscalaimport java.util.logging._ trait Logging {原创 2016-01-04 22:06:56 · 30495 阅读 · 0 评论 -
71.scala编程思想笔记——按契约设计
71.scala编程思想笔记——按契约设计欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。按契约设计(Designby contract,DbC)思想提出可以归功于Eiffel编程语言的创造者Bertrand Meyer,Scala从汲取了按契约设计的精神。按契约编程关注设计错误,它会验证参数和返回值在运行时是否与设计过程中确定的规则相一致。Scala包含用作按契约编程工原创 2016-01-04 22:06:21 · 30619 阅读 · 0 评论 -
70.scala编程思想笔记——定制错误报告机制
70.scala编程思想笔记——定制错误报告机制欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 Either是一个有用的实验,但是left和right对于错误来说并不是特别有意义的名字。尽管在推导中可以使用Either,但是需要额外的语法支持,这使其变得更复杂且更不易阅读。 创建自制的错误报告机制如下:import com.atomics原创 2016-01-04 22:05:42 · 30649 阅读 · 0 评论 -
69.scala编程思想笔记——使用Try转换异常
69.scala编程思想笔记——使用Try转换异常欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。为了进一步降低对异常进行管理的代码量,Try会铺货所有异常,并且产生一个作为结果的对象。 Success和Failure 是Try的子类。而Try是在Scala2.10 中出现的,早起版本无法工作。 例如:import com.atom原创 2016-01-04 22:05:07 · 32445 阅读 · 0 评论 -
68.scala编程思想笔记——使用Option
68.scala编程思想笔记——使用Option欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。有时候方法会产生没有任何意义的结果。这种情况发生时候,方法没有产生错误,也没有任何地方有问题,只是没有答案而已。 Option的意图就是在此。 例如如下代码,只对0~1感兴趣,其他值的话不会返回任何信息。import com.atomic原创 2016-01-04 22:04:32 · 30354 阅读 · 0 评论 -
67.scala编程思想笔记——使用Either
67.scala编程思想笔记——使用Either欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 如果将每个错误都当做异常处理会使代码变得过于凌乱,scala引入了不相交并集来从方法中返回结果。 最初实验称为Either的并集,将left和right组合在一起。Left表示错误,Right携带成功的返回信息。 Either是原创 2016-01-04 22:03:59 · 32057 阅读 · 0 评论 -
66.scala编程思想笔记——构造器和异常
66.scala编程思想笔记——构造器和异常欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 构造器在创建对象。 New表达式除了返回新创建的对象外,不能返回其他任何信息。 但返回只构造了部分的对象也是无用的,客户端程序员会很轻易地认为这个对象是没问题的。 解决这个问题有两个基本方法:a)原创 2016-01-04 22:03:26 · 30444 阅读 · 0 评论 -
65.scala编程思想笔记——用过异常进行错误处理
65.scala编程思想笔记——用过异常进行错误处理欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。改进错误报告机制是提高代码可靠性的最强有力的方式之一。 捕获错误的理想时机是在SCALA运行程序之前对程序进行分析的时候。 处理错误没有明确的唯一解决方案,错误处理这个话题在不断的演化。 异常是从错误发生地点 “抛出”原创 2016-01-04 22:02:51 · 32191 阅读 · 0 评论 -
64.scala编程思想笔记——使用元组的模式匹配
64.scala编程思想笔记——使用元组的模式匹配欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。先看枚举如下:package paintcolors object Color extends Enumeration { type Color =Value val red,blue, yellow, purple, green,orange,原创 2016-01-04 22:02:18 · 31174 阅读 · 0 评论 -
63.scala编程思想笔记——引用和可修改性
63.scala编程思想笔记——引用和可修改性欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。var可以被修改,val不行。但是val如果是对象,那么对象本身属性是可以修改的如下:import com.atomicscala.AtomicTest._ class X(var n:Int)val x = new X(11)x.n is 11x.n = 2原创 2016-01-04 22:01:43 · 30539 阅读 · 0 评论 -
62.scala编程思想笔记——映射表
62.scala编程思想笔记——映射表欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 Map(映射表)将键与值关联起来。当给定一个键时,Map会找出对应的值。例如:import com.atomicscala.AtomicTest._ val constants = Map("Pi" -> 3.141, "e"-> 2.718, "phi"原创 2016-01-04 22:01:08 · 30604 阅读 · 0 评论 -
61.scala编程思想笔记——集
61.scala编程思想笔记——集欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 Set集可以确保对于每个值都只包含一个元素,因此会自动移除重复元素。Set的最常见用法是使用()操作符测试某个值是否是其元素。 例如:import com.atomicscala.AtomicTest._ val set = Set(1, 1,原创 2016-01-04 22:00:34 · 30412 阅读 · 0 评论 -
60.scala编程思想笔记——将序列与zip相结合
60.scala编程思想笔记——将序列与zip相结合欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。接受两个序列并将其配对使用这种做法经常很有用,称为链接。例如:import com.atomicscala.AtomicTest._ val left = Vector("a", "b","c", "d")val right = Vector("q", "r原创 2016-01-04 22:00:01 · 30625 阅读 · 0 评论 -
59.scala编程思想笔记——列表和递归
59.scala编程思想笔记——列表和递归欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。在几乎所有情况下,都应该选择Vector作为序列容器,因为会以最高效的方式执行大多数操作。有时,Scala 会选择List.如下:scala>Seq(1,3,5,7)res1: Seq[Int] = List(1, 3, 5, 7) List针对称为递归的原创 2016-01-04 21:59:30 · 30376 阅读 · 0 评论 -
58.scala编程思想笔记——序列
58.scala编程思想笔记——序列欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 Vector是一种集合,可以在集合中存储事务。Vector还是一种序列,此外还有另一种基本序列,即List. 可以在不导入任何类的情况下使用它们,就像它们是语言中的固有类型一样。 Vector和List继承自Seq序列,因此具有公共的操作,所以testSeq原创 2016-01-04 21:58:28 · 30544 阅读 · 0 评论 -
38.scala编程思想笔记——定义操作符
38.scala编程思想笔记——定义操作符欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 方法名可以包含几乎所有字符。 也可以对操作符+ 赋予新的含义如下:class Molecule { varattached:Molecule = _ defplus(other:Molecule) = attached =oth原创 2016-01-02 09:30:22 · 30927 阅读 · 0 评论 -
37.scala编程思想笔记——风格拾遗
37.scala编程思想笔记——风格拾遗欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。 大多数编程语言都会随着自身的不断成熟而开发出相应的风格指南。 不过,Scala的代码格式化风格是在该语言破壳而出是时就建立的。 在Scala社区中,圆括号在风格上有特殊的含义。如果一个方法修改了对象的内部状态,即调用该方法时内部变量发生原创 2016-01-01 20:39:40 · 30659 阅读 · 0 评论 -
17.scala编程思想笔记——测试
17.scala编程思想笔记——测试欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。健壮的代码必须不断测试,即在每次修改后都需要测试。 不断测试是快速程序开发之根本。 使用println来验证代码的正确性是一种比较弱的方法。 使用assert可以自动运行,但是失败会产生噪声输出。原创 2015-12-31 23:59:28 · 30736 阅读 · 0 评论 -
16.scala编程思想笔记——导入和包
16.scala编程思想笔记——导入和包 欢迎转载,转载请标明出处:源码下载连接请见第一篇笔记。编程的基本原则之一时不要自我重复(Don’t Repeat Yourself,DRY). 重复代码不仅仅意味着额外的工作,还需要维护多份相同的代码段。 Scala的import可以服用其他文件中的代码。例如: i原创 2015-12-31 23:58:47 · 30984 阅读 · 0 评论