写在用Java一个月后

  学编程语言就是学编程思想,所以要尽量学习与自己熟悉的语言差异大的,以拓展思路。因为Java和C++长得太像,所以一直没什么兴趣学习它,直到工作要用到。用了一个月,谈几点感受:

  1) 冗长

  只要有好的IDE,写代码不算太累,读代码有些费劲。我用的Java入门书是《Java编程思想》,总觉得书中的代码太长,提取有用的信息很累,所以主要看文字,很少看代码。这一半是因为Java本身的冗长,一半是因为不少编程书的通病——废代码太多。

  2) 安全

  异常机制让程序员更愿意处理异常,很适合输入不很明确的场合。

      类型安全让程序员更专心于程序本身,而不用学习一些额外的东西来确保类型安全——比如在C,C++中,以下的代码埋着bug:

if (cppIsBest == true) {
    javaIsBest = false;
}

  因为在C语言中,cppIsBest也可以是int类型(在C++中更无法确定是什么诡异类型);而在Java中,以上的代码则没有问题,只是观感上易引起C程序员的疙瘩……

  然后是内存安全,Java所有的对象都是在堆上创建,当然就配有GC,可以放心地new——起初这一点还是很爽到我的,现在习惯了……

  顺便吐嘈一下现在很火的Objective-C。苹果一直不愿在iOS上让Objc支持GC(其实iPhone做得再厚一点就可以支持GC的),让程序员手动管理引用技术。现在干出个ARC,让clang自动管理引用计数——这正好说明之前手动管理方式的繁琐、无意义。

  3) 没有局部静态变量

  不明白Java的设计者出于什么样的考虑不支持这一特性,这样的恶果就是,本该出现在函数里的静态变量,都跑到类里去了,造成不必要的命名污染,严重降低代码可读性。

  4)缺少Lambda表达式

  相比其他主流语言,Java的抽象能力不够,没有build-in的lambda。只能通过内部类实现闭包结构——这不够直观,而且有另一个问题……

  5)泛型?

  刚写Java代码时尝试过通过闭包和泛型实现Lambda,以期更好的抽象,减少重复。结果发现编译不过,然后发现模板参数只会被认为Object类型……为此我又写了个interface,打消泛型的想法。这样写出的代码不够直观,且有命名污染。

  最后,学习Java并不能带来多少新的编程思想……

你可能感兴趣的:(java)