0 I/ \7 U! H1 A1 U3 J9 V8 ffor (int i = 1; i < 5; i++) { 4 o" P- \0 l9 N: F1 ]5 E System.out.println("Happy Birthday " + (i == 3 ? "dear NAME" : "to you")); " Z; O: f6 p# C# i}9 X! @% Q" C6 E" n% F$ W2 A3 O
1 ; y9 s4 X/ i3 {$ {( `, U24 z3 `8 _* @! H8 x( M7 g$ L
3- e5 H6 \3 |8 f) u% o, B+ ~/ U# d
哇,beautiful code,简洁又明了!不仅我能看得懂,就连刚入门的 Java 小白都能看得懂。要知道,代码是写给人看的,假如只有自己看得懂,只有自己觉得很 6,而其他人看起来云里雾里的,就不一定是好代码,尽管好像是行走在技术的前沿。3 u, i& V" n [8 `, Y8 G' T
, A7 Y% d4 m+ z0 [! Q* k
俗话说得好,“能力越大,责任越大”。Java 8 为我们提供了强大的能力,它的新特性是划时代的(Java 8 之后的版本中新特性都不够亮眼),包括 Lambda 表达式和 Stream 流,我们通过它们可以写出简洁又高效的代码。打个不恰当的比喻,Java 8 之前,开发者驾驶的是桑塔纳,Java 8 之后,开发者驾驶的是法拉利。& b- W8 q+ A7 [ o: p
# T3 V3 l. T' J9 a6 q- T/ R: D
4 p7 i. x4 C Q; s i6 w
C, Z4 V8 f2 h" c2 I, a但如果驾驶技术不好的话,法拉利也能变成桑塔纳,甚至还不如。拿之前那段看起来似乎很 6 的代码来说吧,它并不是一段好的代码——尽管使用了新颖的技术,但难以理解。( j- s5 f# E& h
4 {$ o0 x& R+ v1 p. U2 c& X- J在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见: 7 U7 E3 k7 I) `. e$ {; u# e% {+ e9 t0 `/ Q- a O8 i1 s: [3 Q
Excessive use of Guava’s functional programming idioms can lead to verbose, confusing, unreadable and inefficient code. … when you go to preposterous lengths to make your code “a one-line”, the Guava team weeps. ]2 C: w; W6 ?% R
应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。! ]* [# j. W9 k" {, x1 u
9 i* ?( t9 N. T; e2 D v1 Y; B
我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。 4 A9 y) R6 `, P/ y% A- a) k3 i/ j$ Y( m+ G& {
我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。3 a, k, A" i- a