像Go一样写Java,从Go的特性,讨论一种编程风格。

上篇转帖的blog里面提到了Go的特性,作为编写Java时也可以给自己点编程风格的参考。

下面是提到的改进

  • 下面简单学习和分析一下重点的风格提示,领会Ken和Pike的编程思想:

  • 规范的语法(不需要符号表来解析)
    垃圾回收(独有)
    无头文件
    明确的依赖
    无循环依赖
    常量只能是数字
    int和int32是两种类型
    字母大小写设置可见性(letter case sets visibility)
    任何类型(type)都有方法(不是类型)
    没有子类型继承(不是子类)
    包级别初始化以及明确的初始化顺序
    文件被编译到一个包里
    包package-level globals presented in any order
    没有数值类型转换(常量起辅助作用)
    接口隐式实现(没有“implement”声明)
    嵌入(不会提升到超类)
    方法按照函数声明(没有特别的位置要求)
    方法即函数
    接口只有方法(没有数据)
    方法通过名字匹配(而非类型)
    没有构造函数和析构函数
    postincrement(如++i)是状态,不是表达式
    没有preincrement(i++)和predecrement
    赋值不是表达式
    明确赋值和函数调用中的计算顺序(没有“sequence point”)
    没有指针运算
    内存一直以零值初始化
    局部变量取值合法
    方法中没有“this”
    分段的堆栈
    没有静态和其它类型的注释
    没有模板
    没有异常
    内建string、slice和map
    数组边界检查


  • 常量只能是数字

    可以学习。在jdbc编程的时候,我们把SQL语句提成配置文件。

  • 没有子类型继承(不是子类)

    少用继承


  • 包级别初始化以及明确的初始化顺序

    注意静态变量和构造函数里面的初始化顺序,Java里面的顺序是和静态变量的在类里面声明的出现顺序有关系的。

  • 文件被编译到一个包里

    少用别人的Jar包,减少DLL噩梦和Jar噩梦。


  • 接口隐式实现(没有“implement”声明)

    适当使用Object类型,JFinal就这么做的。效率很高。

  • 嵌入(不会提升到超类)

    多聚合,多组合,少继承

  • 方法按照函数声明(没有特别的位置要求)

    能静态的方法就都静态化,提高效率。还有可以将静态方法放到一个工具类里面,不初始化此类,直接调用。FastJson就是这样做的。极大提高效率。

  • 方法即函数

    同上

  • 接口只有方法(没有数据)

    interface里面不声明数据。Java社区之前争论过很多的问题,go给出一个参考答案。

  • 方法通过名字匹配(而非类型)

    这个适量使用Object前提。

  • 没有构造函数和析构函数

    不要依赖构造函数,可以考虑编写init方法和destory方法,手动获取,释放链接和空间,提高效率。

  • postincrement(如++i)是状态,不是表达式

    慎用++

  • 没有preincrement(i++)和predecrement

    不用++

  • 赋值不是表达式

    防止最2的==和=混淆

  • 明确赋值和函数调用中的计算顺序(没有“sequence point”)

    多用括号。提高计算顺序可读性

  • 内存一直以零值初始化

    注意初始化的值。看情况是否要赋值初值。

  • 方法中没有“this”

    哈,好东西。非常重要的提醒!!之前我在编程的时候隐隐约约觉得this不是很妥当。带来大量的歧义和隐患。


  • 没有模板

    Java的模板太恶心。虽然效率低下,但是还是要使用反射构造器。。。

  • 没有异常

    少用异常做处理,能预测的故障尽量写程序控制。

  • 内建string、slice和map

    找一个趁手的string,map工具。没有的话,要自己写一个,我选择guava。

  • 数组边界检查

    注意越界,错误。所有的直接对数组的读取之前都要判断数组里面的数值个数,千万别越界。



本文来自:开源中国博客

感谢作者:Brin想写程序

查看原文:像Go一样写Java,从Go的特性,讨论一种编程风格。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。