布尔相关的命名加上 is、can、should、has 等前缀。
-
用 min、max 表示数量范围;
-
用 first、last 表示访问空间的包含范围;
-
begin、end 表示访问空间的排除范围,即 end 不包含尾部。
=====================================================================
适当的空行和缩进。
排列整齐的注释:
int a = 1; // 注释
int b = 11; // 注释
int c = 111; // 注释
语句顺序不能随意,比如与 html 表单相关联的变量的赋值应该和表单在 html 中的顺序一致。
====================================================================
阅读代码首先会注意到注释,如果注释没太大作用,那么就会浪费代码阅读的时间。那些能直接看出含义的代码不需要写注释,特别是不需要为每个方法都加上注释,比如那些简单的 getter 和 setter 方法,为这些方法写注释反而让代码可读性更差。
不能因为有注释就随便起个名字,而是争取起个好名字而不写注释。
可以用注释来记录采用当前解决办法的思考过程,从而让读者更容易理解代码。
注释用来提醒一些特殊情况。
用 TODO 等做标记:
| 标记 | 用法 |
| — | — |
| TODO | 待做 |
| FIXME | 待修复 |
| HACK | 粗糙的解决方案 |
| XXX | 危险!这里有重要的问题 |
====================================================================
尽量简洁明了:
// The first String is student’s name
// The Second Integer is student’s score
Map<String, Integer> scoreMap = new HashMap<>();
// Student’s name -> Student’s score
Map<String, Integer> scoreMap = new HashMap<>();
添加测试用例来说明:
// …
// Example: add(1, 2), return 3
int add(int x, int y) {
return x + y;
}
使用专业名词来缩短概念上的解释,比如用设计模式名来说明代码。
=======================================================================
条件表达式中,左侧是变量,右侧是常数。比如下面第一个语句正确:
if (len < 10)
if (10 > len)
只有在逻辑简单的情况下使用 ? : 三目运算符来使代码更紧凑,否则应该拆分成 if / else;
do / while 的条件放在后面,不够简单明了,并且会有一些迷惑的地方,最好使用 while 来代替。
如果只有一个 goto 目标,那么 goto 尚且还能接受,但是过于复杂的 goto 会让代码可读性特别差,应该避免使用 goto。
在嵌套的循环中,用一些 return 语句往往能减少嵌套的层数。
====================================================================
长表达式的可读性很差,可以引入一些解释变量从而拆分表达式:
if line.split(‘:’)[0].strip() == “root”:
…
username = line.split(‘:’)[0].strip()
if username == “root”:
…
使用摩根定理简化一些逻辑表达式:
if (!a && !b) {
…
}
if (!(a || b)) {
…
}
====================================================================
去除控制流变量 。在循环中通过使用 break 或者 return 可以减少控制流变量的使用。
boolean done = false;
while (/* condition */ && !done) {
…
if ( … ) {
done = true;
continue;
}
}
while(/* condition */) {
…
if ( … ) {
break;
}
}
减小变量作用域 。作用域越小,越容易定位到变量所有使用的地方。
JavaScript 可以用闭包减小作用域。以下代码中 submit_form 是函数变量,submitted 变量控制函数不会被提交两次。第一个实现中 submitted 是全局变量,第二个实现把 submitted 放到匿名函数中,从而限制了起作用域范围。
submitted = false;
var submit_form = function(form_name) {
if (submitted) {
return;
}
submitted = true;
};
var submit_form = (function() {
var submitted = false;
return function(form_name) {
if(submitted) {
return;
}
submitted = true;
}
}()); // () 使得外层匿名函数立即执行
JavaScript 中没有用 var 声明的变量都是全局变量,而全局变量很容易造成迷惑,因此应当总是用 var 来声明变量。
变量定义的位置应当离它使用的位置最近。
实例解析
在一个网页中有以下文本输入字段:
现在要接受一个字符串并把它放到第一个空的 input 字段中,初始实现如下:
var setFirstEmptyInput = function(new_alue) {
var found = false;
var i = 1;
var elem = document.getElementById(‘input’ + i);
while (elem != null) {
if (elem.value === ‘’) {
found = true;
break;
}
i++;
elem = document.getElementById(‘input’ + i);
}
if (found) elem.value = new_value;
return elem;
}
以上实现有以下问题:
-
found 可以去除;
-
elem 作用域过大;
-
可以用 for 循环代替 while 循环;
var setFirstEmptyInput = function(new_value) {
for (var i = 1; true; i++) {
var elem = document.getElementById(‘input’ + i);
if (elem === null) {
return null;
}
if (elem.value === ‘’) {
elem.value = new_value;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-hH4JkVZR-1715794775950)]
[外链图片转存中…(img-KBdIPWeS-1715794775951)]
[外链图片转存中…(img-d7wKXFVy-1715794775951)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!