像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。
数组边界检查
注意越界,错误。所有的直接对数组的读取之前都要判断数组里面的数值个数,千万别越界。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。