值对象(ValueObject)- Martin Fowler博客

/**
 * 献给我最尊敬的偶像Martin Fowler
 * 原文出处:https://martinfowler.com/bliki/ValueObject.html
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-10
 */

本翻译已征得Martin Fowler同意,并链接在博客原文下方。

编程时,我发现把东西表示成一个组合物是很有用的。一个二维坐标由x和y组合。一定数量金额由一个数值和一种货币组成。一个日期范围由开始和结束日期组成,而日期又可以由年、月、日组成。

当我这样做的话,我就会遇到了两个组合物是否是一样的问题。假设我有两个都是表示笛卡尔坐标(2,3)的point对象,把他们当作是相等是有意义的。根据其属性来判断相等性的对象被称为值对象,在这里的属性就是他们的x和y坐标。

但除非我在编程时很小心,不然在我的程序里可能得不到那样的效果。

比如想在JavaScript表示一个坐标。

const p1 = {x: 2, y: 3};  
const p2 =

继续阅读»»»

印度朋友手把手教你学Scala(7):无处不在的对象

/**
 * 谨献给我最爱的YoYo 
 *
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-7-objects-everywhere/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-06
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

无处不在的对象

在这篇文章中,我们会讨论为什么Scala中对象的概念更为普遍,以及它的优点是什么。大部分示例是数据类型,因为它们是Scala语言的基础。

这是关于Scala系列教程的第七章。点击这里可查看整个系列。

目录

  • 简介
  • 作为对象的数据类型
  • 类型的操作
  • 创建自定义类型
  • Java数据类型装箱/拆箱的比较
  • Bigint例子
  • 类型转换(Typecasting)
  • 值比较
  • 在其他语言的实现和一些注意事项

简介

Scala是一种多范式语言,主要是结合了面向对象和函数式。

为了支持这种语言,有必要制定一个围绕什么东西而构建的想法。正


继续阅读»»»

印度朋友手把手教你学Scala(5):类

/**
 * 谨献给我最爱的YoYo 
 *
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-5-classes/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-05
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

这是关于Scala系列教程的第五章。点击这里可查看整个系列。

目录

  • 简介
  • 访问和可见性
  • 构造器
  • 类参数和类字段
  • 类参数提升
  • 直接访问成员
  • 不可变对象和可变对象
  • 何时使用getter和setter
  • Scala风格的getter和setter
  • 辅助构造器
  • 默认构造参数
  • 抽象类
  • override关键字
  • 何时使用抽象类

简介

Scala中类的概念非常类似于他们在Java中的同行。但是它们提供的功能有很多不同。

首先,让我们举个简单的例子。

// 典型Java风格的类
class Person {

继续阅读»»»

印度朋友手把手教你学Scala(4):对象

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-4-objects/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-01
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

Scala的对象

这是关于Scala系列教程的第四章。点击这里可查看整个系列。

在这章,我们将讲解objects

目录

  • 什么是对象?
  • Java单例的概念和Scala对象的比较
  • 静态与面向对象编程
  • 伴生对象
  • 重温Hello World
  • 深入理解main方法

什么是对象?

在Scala里,object是一个关键字,在这个教程系列的第一章我们就知道了。

再来回顾看一下Hello World这段代码。

object Test {  
    def main(args : Array[String]){
      printl

继续阅读»»»

印度朋友手把手教你学Scala(9):函数式编程简介

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-9-intro-to-functional-programming/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-21
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

由于它的优雅和性能特点,Scala的函数式编程范式在最近几年变得相当流行。

这是关于Scala系列教程的第九章。点击这里可查看整个系列。

在这系列里的前面8章里,我从来都没谈及过Scala函数式编程这一方面,那是因为如果你是这个范式的新手(这世界大多数是),那么伴随着完全陌生和困难的范式,学习这门语言和环境会有一点难学,那就是为什么我一开始没有谈及他们。既然我们已经覆盖了面向对象编程方面到达一定程度,理解起来就稍微更简单了。

目录

  • 看看在2017年的摩尔定律
  • 什么是编程范式?
  • 理解冯·诺依曼编程风格
  • 冯·诺依曼

继续阅读»»»

印度朋友手把手教你学Scala(6):样本类

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-6-case-classes/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-03-04
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

样本类

样本类和类非常相似,但样本类做了很多东西并且有一些简洁的功能。

这是关于Scala系列教程的第六章。点击这里可查看整个系列。

目录

  • 声明样本类
  • 不用new关键字创建类
  • 访问变量
  • 默认和部分构造器参数
  • 不可变对象
  • 结构相等 - 自动生成equals
  • 引用相等
  • 字符串表示
  • 自动生成hash码
  • 样本类复制
  • 样本类反编译

声明样本类

以下代码声明了一个叫做Block的类,有三个成员变量:idtitleisbn

case class Book(id:Int,title:String,isbn:Long)

继续阅读»»»

印度朋友手把手教你学Scala(3):方法

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-3-methods/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-25
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

Scala里的方法

自从2015年12月写了最后一篇关于Scala的文章后,到现在已经有很长一段时间了。希望我能写多一点。^_^

这是关于Scala系列教程的第三章。点击这里可查看整个系列。

这篇文章是关于怎么处理Scala里的方法。大部分都是关于风格,但当我们进入函数式编程的世界前这是很重要的。

目录

  • Primer
  • 方法的语法
  • Unit类型
  • 不可变的方法参数
  • return关键字的注意事项
  • 异构返回类型(Heterogeneous return types)
  • 传值调用和传名调用
  • 方法参数的默认值
  • 剔除方法

Primer

回到那些汇编编程的日子,那时有


继续阅读»»»

印度朋友手把手教你学Scala(1):Scala入门

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-1-getting-started/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-23
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

Scala入门

这是关于Scala系列教程的第一章。点击这里可查看整个系列。

如果你之前是Java开发人员,这里将会有很多让你头疼的东西,而最容易的学习方式就是忘却已知的一切,从头学起(译者注:即保持空性)。

视频:《就像水那样,我的朋友!!》

让我们开始吧。

目录

以下是本章将会覆盖的内容。

  • Scala简介和环境搭建
  • Scala REPL,一段简短的介绍
  • Hello World !!
  • 变量
  • 引用和值不可变性
  • 幕后的不可变性
  • valfinal的对比
  • Scala里的数据类型
  • 类型接口
  • 变量初始化
  • 类型

继续阅读»»»

印度朋友手把手教你学Scala(2):Scala里的类型推断 & 类型

/**
 * 谨献给我最爱的YoYo
 * 原文出处:https://madusudanan.com/blog/scala-tutorials-part-2-type-inference-in-scala/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-25
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

类型推断

这是关于Scala系列教程的第二章。点击这里可查看整个系列。

如果你还记得的话,在上一章,我们通过一些示例简短地讲解了推断推断。现在我们准备通过更多的示例继续进行深挖,以下是这篇文章的主要内容。

温馨提示:这是一个枯燥无味的主题,很多都是基本的理论,但也很重要。我已经努力尽可能以最简约覆盖本质的内容。此外,提供了很多材料以供业余学习。

目录

  • 从程序员的视角,到底什么是类型推断
  • 类型系统概览
  • 根据类型系统的语言分类
  • 类型推导器(HM)类型推断
  • 本地 vs 全局类型推断 -- 为什么Scala选择本地推断推断
  • Scal

继续阅读»»»

为什么Scala会成为下一个神器?

/**
 * 谨献给YoYo
 * 原文出处:https://madusudanan.com/blog/why-scala-will-be-the-next-big-thing/
 * @author dogstar.huang <chanzonghuang@gmail.com> 2017-02-22
 */

本翻译已征得Madusudanan.B.N同意,并链接在原文教程前面。

为什么要学Scala?

这不是一篇关于Scala狂热的文章,只是我最近正在学Scala,以下是关于这门语言我觉得值得分享的一些东西。

Scala是一门强大、不容易学习的语言。首先,我会列出好的优点,这一点不通过与其他语言来比较是体现不出来的,然后我还会说出它的缺点以及如何避免他们。这里不会有任何代码,但会有一些好的视频/访谈,你可以用来学习Scala代码的细微区别。

任何编程语言都不是银弹,对于你的工作,什么是最好的,取决于你的决定。

PS:你可以免费使用这篇文章来向你的BOSS兜售Scala。

头条!!

如果让我重新选择一门今天会用到的语言,它将会是S


继续阅读»»»