代码精进之路
范学雷
Oracle首席软件工程师,Java SE安全组成员,OpenJDK评审成员
立即订阅
6350 人已学习
课程目录
已完结 47 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 你写的每一行代码,都是你的名片
免费
第一模块:代码“规范”篇 (16讲)
01 | 从条件运算符说起,反思什么是好代码
02 | 把错误关在笼子里的五道关卡
03 | 优秀程序员的六个关键特质
04 | 代码规范的价值:复盘苹果公司的GoToFail漏洞
05 | 经验总结:如何给你的代码起好名字?
06 | 代码整理的关键逻辑和最佳案例
07 | 写好注释,真的是小菜一碟吗?
08 | 写好声明的“八项纪律”
09 | 怎么用好Java注解?
10 | 异常处理都有哪些陷阱?
11 | 组织好代码段,让人对它“一见钟情”
12丨组织好代码文件,要有“用户思维”
13 | 接口规范,是协作的合约
14 | 怎么写好用户指南?
15 | 编写规范代码的检查清单
16丨代码“规范”篇用户答疑
第二模块:代码“经济”篇 (14讲)
17 | 为什么需要经济的代码?
18丨思考框架:什么样的代码才是高效的代码?
19 | 怎么避免过度设计?
20 | 简单和直观,是永恒的解决方案
21 | 怎么设计一个简单又直观的接口?
22丨高效率,从超越线程同步开始!
23 | 怎么减少内存使用,减轻内存管理负担?
24 | 黑白灰,理解延迟分配的两面性
25 | 使用有序的代码,调动异步的事件
26 | 有哪些招惹麻烦的性能陷阱?
27 | 怎么编写可持续发展的代码?
28 | 怎么尽量“不写”代码?
29 | 编写经济代码的检查清单
30丨“代码经济篇”答疑汇总
第三模块:代码“安全”篇 (14讲)
31 | 为什么安全的代码这么重要?
32 | 如何评估代码的安全缺陷?
33 | 整数的运算有哪些安全威胁?
34 | 数组和集合,可变量的安全陷阱
35 | 怎么处理敏感信息?
36 | 继承有什么安全缺陷?
37 | 边界,信任的分水岭
38 | 对象序列化的危害有多大?
39 | 怎么控制好代码的权力?
40 | 规范,代码长治久安的基础
41 | 预案,代码的主动风险管理
42 | 纵深,代码安全的深度防御
43 | 编写安全代码的最佳实践清单
44 | “代码安全篇”答疑汇总
加餐 (1讲)
Q&A加餐丨关于代码质量,你关心的那些事儿
结束语 (1讲)
结束语|如何成为一个编程好手?
代码精进之路
登录|注册

11 | 组织好代码段,让人对它“一见钟情”

范学雷 2019-01-28
当我们看到一个事物的时候,它的轮廓首先进入视野,给了我们第一印象。如果第一印象没有吸引到我们,那我们就不会集中注意力去关注它,也不会想去认识它。
我觉得有个俗语非常好地概括了这个认知习惯。这个俗语就是“不起眼”,更通俗一点的说法是“放在人群里认不出来”。
不管我们愿不愿意,第一印象特别影响我们的判断和心情。我们看到美好的东西,自己也跟着高兴;看到乱糟糟的东西,自己也感觉乱糟糟的。
代码也是这样的。如果我们看到整齐、清爽的代码,我们就对它有好感,愿意阅读,也愿意改进。 如果代码一团糟,风格混乱,我们就特别想静静地走开,一行都不想看。
前面的几讲中,我们讨论了注释、声明、格式、注解等编码规范。现在,是时候把这些零散的知识放到一块儿了。这些规范组合在一起,就会让代码既有让人喜悦的轮廓,也有让人清爽的细节。
这一次,我们将使用大量的例子,从代码文件头部结构、对象结构、类的内部结构、方法的代码结构、限定词的使用以及空行的使用这六大维度,来说明到底该怎么组织一个源代码文件。

代码文件头部结构

一般来说,一个源代码文件的开始部分包含三项内容。 按照出现顺序,分别为:
版权和许可声明;
命名空间(package);
外部依赖(import)。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《代码精进之路》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • 老杨同志
    /*
    Copyright (c) 2019 leetcode 算法练习
    给定整形数组和目标值,求数组中那两个元素之和等于目标值
    example : 输入 [2,4,6,7,] target = 10 ;return [4,6]
    */

    import java.util.HashMap;
    import java.util.Map;

    class Solution {

    //为了展示属性应该放的位置,强加属性,关键字顺序也是老师推荐的
    private static final long serialVersionUID = 5454155825314635342L;

    //只有一个构造方法可以省略,多个构造方法时,空实现换行加注解
    public Solution(){
    //blank 空实现
    }

        /**
         * Given an array of integers, return indices of the two numbers
         * such that they add up to a specific target.
         * return int[0] if nums==null or nums.length==0 or result not found.
         */
        public int[] twoSum(int[] nums, int target) {
        
         //check 代码块之间空行隔开
         if (nums==null || nums.length==0) {
         return new int[0];//老师提示返回int[0]避免空指针
         }
        
         //algorithm begin
            Map<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                int complement = target - nums[i];
                if (map.containsKey(complement)) {
                    return new int[] { map.get(complement), i };
                }
                map.put(nums[i], i);
            }
            
            //not found
            return new int[0];
        }
    }

    作者回复: 改的不错,还有一些小问题,有的我们还没有讲到。

    2019-01-28
    4
  • 北风一叶
    谢谢老师的整理 以后有法可依了
    2019-03-08
    1
  • 苦行僧
    一般用静态检查工具去发现问题

    作者回复: 嗯,检查工具有反馈,多查到几次问题,慢慢我们就知道怎么规避这些问题了。

    2019-01-28
    1
  • Demon.Lee
    老师,类的声明与方法或属性之间没有强制要求换行分割吧,有些同事喜欢这样干。
    public class Xxx{
    //换行
    private String xxx;
    }

    作者回复: 一般不要求分割。 缩进已经表明了这是下一级代码块。 换行的时候,大都是声明一行写不完,要用两行或者多行。 如果两个代码块视觉分割不清楚,可以多一个空行。

    2019-01-28
    1
  • 王智
    好规范呀,发现自己以前写的代码好多都不规范!!!
    课后习题在我看来:
    1. 类没有介绍
    2.方法前面介绍不全,必要的没写,比如说抛出的异常,参数等等
    3.方法内没有空行分割,看起来一大片.
    这就是我的看法,这篇文章的规范有点多,需要好好看一下.
    加油!!!

    作者回复: 找的不错,还有一些问题,我们后面还会讲。

    2019-01-28
    1
  • Sisyphus235
    规范的代码结构能提高开发效率,让后续的开发者能够快速理解项目结构和历史情况。代码迭代的时候也能快速找到所需要的信息,以及需要连动迭代的代码
    2019-05-22
收起评论
6
返回
顶部