Java8 Lambda本质论

2016-04-04
阅读 3 分钟
7k
Lambda的本质 需求1. 按照产品的重量进行升序排序 此处使用「匿名内部类」的设计,但掺杂了较多的语法噪声,引入了不必要的复杂度。 {代码...} 使用Lambda表达式,可以进一步消除语法噪声,简化设计。 {代码...} 也就是说,Lambda其本质是「匿名内部类」的一种「语法糖」表示,存在如下3个方面的特征: Anonymous Functi...

重构:最委屈的工程实践

2016-04-03
阅读 2 分钟
2.7k
重构误区 重构变成了业界最委屈的工程实践之一,管理层不支持,而程序员吃力不讨好。归根结底,是对「重构」错误地理解,给管理层带来很多负反馈。 将事情做好,还得正确地做事。重构是一个系统工程,不仅仅要求雄厚的软件设计素养,同时需要正确的做事方法。 大谬不然 谈及「重构」,管理层谈虎色变,错误地理解或实践...

Scala Essentials: 剖析 List

2016-04-03
阅读 1 分钟
1.7k
DRY List Nil对象定义在scala.collection.immutable.List中。 {代码...} Nil可以通过::方法追加新的元素,并返回新的List。 {代码...} List可以通过:::连接两个List,并返回新的List。 {代码...}

Scala Essentials: 隐式转换

2016-04-03
阅读 4 分钟
3.2k
java.lang.String并存在exists方法,为此标准库中在Predef定义了一个隐式转换,使String隐式地转换为StringOps,从而提供更多地操作字符串的方法。

Scala Essentials: 类型约束

2016-04-03
阅读 3 分钟
5.5k
Scala提供了另一种类型界定的手段,与类型界定操作符<:, <%具有微妙的关系。 T <=< U:T是否与U类型相等 T <:< U:T是否是U的子类型 T <%< U:T是否可以隐式地转换为U类型 类型界定常常用于以下两种场景: 在泛型类中,定义在特定条件下的才能使用的方法 协助类型推演 特定方法 以T <:< U...

Scala Essentials: 剖析 var/val

2016-04-03
阅读 3 分钟
4.1k
var {代码...} {代码...} var自动生成了「读写」的接口; var表示可变对象,代表了一种「命令式」的思维; val {代码...} {代码...} val只生成了「只读」的接口; val表示不可变对象,代表了一种「函数式」的思维; val蕴含了final的语义; private {代码...} {代码...} Scala对字段都是private的,即使没有显式地提供pr...

Scala Essentials: 字符串内插

2016-04-03
阅读 1 分钟
3k
Scala是一门高度可扩展性的程序设计语言,保持微小的内核,但具有无穷大的扩展能力。例如,「字符串内插」功能,Scala语言并不是原生地支持该特性,而是通过类库的扩展来实现的。

Scala Essentials: 字面值

2016-04-03
阅读 2 分钟
2.6k
类型系统 引用类型 AnyRef的子类 使用new构造对象 当存在默认构造函数,可以略去括号 AnyRef等价于java.lang.Object 可以将null赋值给Reference Type 值类型 AnyVal的子类 Char, Byte, Short, Int, Long, Float, Double, Unit, Boolean 不能使用new构造实例,而使用Literal Values构造实例 编译器将其映射为Java原生类型...

持续学习

2016-03-15
阅读 2 分钟
2.9k
我出生时,父亲为我取名「刘光云」,承“光”辈,单字“云”。但自上学之后,便「不知所云」。有一天语文老师说文解字道:“聪者,耳到,眼到,口到,心到也”。判若相识恨晚的感觉,我对“聪”字「情有独钟」,随将自己的名字改为「刘光聪」。

Refactoring to Functions

2016-03-10
阅读 4 分钟
1.6k
OO makes code understandable by encapsulating moving parting, but FP makes code understandable by minimizing moving parts. -Michael Feathers

The Coding Kata: FizzBuzzWhizz in Modern C++11

2016-03-10
阅读 4 分钟
2.3k
至今,C++社区仍具有强大的生命力,尤其自C++11出现后获得了新生。C++到底存在什么样的魅力,让人如此痴狂呢?本文试图阐述C++的设计思维,并揭示C++内在的设计本质;最后通过FizzBuzzWhizz的设计和实现一展C++11的风采。

The Coding Kata: FizzBuzzWhizz in Ruby

2016-03-10
阅读 3 分钟
2k
Functional programming leads to deep insights into the nature of computation. -- Martin Odersky

The Coding Kata: FizzBuzzWhizz in Java8

2016-03-10
阅读 4 分钟
1.9k
Functional programming leads to deep insights into the nature of computation. -- Martin Odersky

The Coding Kata: FizzBuzzWhizz in Scala

2016-03-10
阅读 3 分钟
2.1k
Functional programming leads to deep insights into the nature of computation. -- Martin Odersky

你无法忍受Google Test的9个特性

2016-03-10
阅读 4 分钟
4.8k
这种严格的规则,虽然给Google Test的实现带来了诸多便捷之处,但这给用户造成了很大的负担。尤其当一个用例需要描述一个数学逻辑规则时,用例的表达力将大大折扣。

Magellan: A Simple xUnit Test Framework in Modern C++11

2016-03-10
阅读 14 分钟
2.7k
Magellan是一个简单的、可扩展的、使用C\+\+11实现的xUnit测试框架。Magellan设计灵感来自于Java社区著名的测试框架JUnit。

浅谈C++物理设计:实用宏

2016-03-10
阅读 2 分钟
2.5k
Config.h提供了编译器支持C++11特性的配置信息。ABSTRACT, OVERRIDE, EXTENDS, IMPLEMENTS等关键字,使得Java程序员也能看懂C++的代码,也极大地改善了C++的表现力。

浅谈C++物理设计:最佳实践

2016-03-10
阅读 13 分钟
4.7k
如何保证自满足 为了验证头文件设计的自满足原则,实现文件的第一条语句必然是包含其对应的头文件。 反例: {代码...} 正例: {代码...} override和private 所有override的函数(除override的virtual析构函数之外)都应该是private的,以保证按接口编程的良好设计原则。 反例: {代码...} 正例: {代码...} inline 避免头...

浅谈C++物理设计:设计原则

2016-03-10
阅读 5 分钟
4.3k
所有头文件都应该自满足的。看一个具体的示例代码,这里定义了一个TestCase.h头文件。TestCase对父类TestLeaf, TestFixture都存在编译时依赖,但没有包含基类的头文件。

浅谈C++物理设计:代码规范

2016-03-10
阅读 3 分钟
4.1k
第一种命名规则问题在于:当文件名重命名或移动目录时,需要同步修改头文件保护宏;推荐使用IDE随机自动地生成头文件保护宏,其更加快捷、简单、安全、有效。

Write Lean Programs

2016-03-10
阅读 16 分钟
3.8k
OO makes code understandable by encapsulating moving parting, but FP makes code understandable by minimizing moving parts. -Michael Feathers

Programming DSL: JMatchers

2016-03-10
阅读 8 分钟
3k
上次在「软件匠艺小组」上分享了「正交设计」的基本理论,原则和应用,在活动线下收到了很多朋友的反馈。其中有人谈及到了DSL的设计,为此我将继续以find为例,通过「正交设计」的应用,重点讨论DSL的设计过程。

Programming DSL:JSpec

2016-03-10
阅读 8 分钟
3.5k
There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies. -- C.A.R. Hoare

Jumping with Try

2016-03-10
阅读 5 分钟
2.6k
按照流程定义,可以快速实现第一个版本。这段代码充满了很多的坏味道,职责不单一,复杂的异常分支处理,流程的脉络不够清晰等等,接下来我们尝试一种很特别的重构方式来改善设计。

Jumping with Option

2016-03-10
阅读 8 分钟
2.8k
I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with chec...

Refactoring to DSL

2016-03-10
阅读 14 分钟
2k
OO makes code understandable by encapsulating moving parting, but FP makes code understandable by minimizing moving parts. -Michael Feathers

正交设计

2016-03-07
阅读 9 分钟
10.4k
Design is there to enable you to keep changing the software easily in the long term. -- Kent Beck.