! g: n3 D/ k/ ?' w % S H# w( ]. U% l& A8 b( h" e% z9 p' y
但如果驾驶技术不好的话,法拉利也能变成桑塔纳,甚至还不如。拿之前那段看起来似乎很 6 的代码来说吧,它并不是一段好的代码——尽管使用了新颖的技术,但难以理解。 " B3 N8 t" Y% t9 {0 @6 N 2 @/ w# F3 u/ N" v z9 R在 Java 8 之前,如果你想编写函数式代码的话,应该会使用 Google 的 Guava 类库,它是一个很棒的开源类库(不陌生吧),可以在一定程度上弥补 Java 原生类库的不足。我在它的 wiki 上看到下面这样一条建议,说得很富有远见: & I- v, P; }& U$ h8 ?# j/ r1 W/ a4 w: B: T
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.# P7 |* X1 |) \1 g
应该能看得懂吧?大致的意思就是说,如果过度使用 Guava 的函数式编程的话,会导致代码冗长、混乱、不可读,甚至低效;如果有些开发者为了减少代码的长度,刻意把多行代码“优化”成一行代码时,Guava 甚至会被玩哭。0 ~: Q) K. d! J2 `' N1 X% s; u
. z. h0 [2 j8 R0 c" v9 N6 f) V
我只能说,优秀的人真可怕,他不仅知道自己的长处,更了解自己的不足——说的就是你,Guava 的开发者。至于开头提到的那位大牛,他写的代码我就不敢恭维,只能说炫技炫到盲目自信吧。根据我的经验,只有很少一部分的大牛能够保持理智,在追求技术创新的同时意识到炫技的问题。* {& p* F0 P; y( ?
" a/ P- p" M! h. r2 N我认为,Guava wiki 上的建议同样适用于 Java 8,好技术要妥善的利用,而不是滥用。众所周知,Java 8 的新特性可以用来减少冗余代码,当我们把一个复杂的匿名内部类变成一个简洁的 Lambda 表达式就是一个很好的例子。0 q% ^/ E+ s1 k/ I/ \. b
2 v1 l& L0 }. u/ V7 n, A" g5 A! TThread t1 = new Thread(new Runnable() { ( H# j. E( P. U9 d+ k7 ] @Override( f G: |4 \4 Q
public void run() { 7 y0 V# K$ R$ p5 n0 M) Y- |. D. \ System.out.println("匿名内部类,搞起来"); ( f+ @! c9 o6 g7 {, d }+ q; M+ n5 |9 h' m) K
});# U4 e. j! x" I* b% H( f
t1.start(); ' O o9 _+ ^! r$ A$ e4 X& w% |5 e# y; \. u. g
// 优化后 5 Q' F: Y- Z/ K0 k0 y1 E2 }# K) ]/ M4 p- C/ a
Thread t2 = new Thread(() -> {: }5 e9 |- t8 D
System.out.println("Lambda 表达式,搞起来"); 3 i4 e- O) d: H& k8 p1 |- x& t) \}); ! l+ C( q% T, `0 Ft2.start(); 2 F. F: k8 w( }% b$ {4 q1 - \+ H4 L5 {! U, S% C7 ^. t0 P2 7 M9 b7 n9 z* x3 9 i! u+ N9 J2 B- ~1 B# e/ F4) T6 I# M' V( G7 F8 f; H* R# o, e
5, b5 k- s% D& Z k, ]9 w$ j
6( q6 _; U1 k% @3 D. `+ r
7. v9 k7 z) x; g- z. d
8. e" c0 @; I' X! g. F
9 9 H) Y3 a; |4 ^' e5 W10 6 J% Z( j: z9 v1 H11. {$ C( J$ e- X, K; [! @) I
12, l7 d+ x( |7 X+ |
13 : z/ B( U, I4 J+ h P( G14" R" ~* }; r6 J, h* w' g# D
你看,优化后的代码量更少,并且一目了然,任谁也不会搞到看不懂的地步。函数式编程出现的目的可不仅仅是为了减少冗余代码,它是为了解放生产力——言外之意就是说,代码复杂点没关系,只要可用可靠。编程的目标不是产生尽可能少的代码,而是产生易于维护的、高性能的系统。- s- G1 P/ G/ ^+ o3 v! m$ C3 j' x1 r
- F+ r; Z" F6 B1 {8 J0 F举个例子来说,假如我从洛阳出发,去郑州参加一个技术沙龙,我就没必要坐飞机;高铁和驾车才是最优的选择。明白我说的意思吧?别整那些花里胡哨的,实用至上。 5 K/ [9 h8 b" K———————————————— 8 c8 }4 F8 b% t! U版权声明:本文为CSDN博主「沉默王二」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。6 F! [/ ^) }, M) w' c9 w2 J
原文链接:https://blog.csdn.net/qing_gee/article/details/104709079+ B/ F4 X0 A, ?
" c) W. o j+ o3 T g
( ?4 F3 _1 O1 W3 x) F