文档章节

学编程,先知规范

cnbo
 cnbo
发布于 2017/08/13 22:26
字数 1476
阅读 59
收藏 0
点赞 0
评论 0

我为什么要写这篇博客

写博客一直是我想去做的事,可是一直没有付诸于行动。虽然看别人的博客很容易,但当自己开始在键盘上敲打的时候,我发现太痛苦了。

八月初,和我同一批校招进厂的同学们都已上岗工作了。因为我们的水平不太统一,有的基础好点,有的基础差点,所以老大每周会给我们布置作业,同时也会对我们的作业进行讲评。经过最近两次作业,我发现有部分同学的编码规范有待提高。其实这也可以理解,因为他们之前没有接触过,在学校的时候也没人告诉他们编码要讲究规范。

我是四月份进的厂,老大安排我维护两个系统。当我看见系统的源码的时候,我的心里有着一万匹叫做曹里的马在奔腾。包含几百行代码的方法随处可见;一个方法有几十个形式参数是正常现象;各种代码风格混杂在一起特别杀马特;在JSP里掺杂着 Java、JS、HTML、CSS 代码,有种 56 个民族一家亲的味道;整个系统有一半的逻辑是写在存储过程里的,先喝口水压压惊。

其实公司老系统代码令人恶心的一个很重要的原因就是上梁不正,下梁歪。由于刚进来的新人也不分不清代码风格的好坏,他们只能学着前人的风格。这样的恶性循环非常可怕。我希望所有学习编程的同学,从开始就养成一个非常好地编码习惯。

高级程序语言诞生的目的

我们现在接触到的绝大多数编程语言都是高级语言,例如: C、C++、Java、JavaScript 等。我们在这里不论各种高级程序语言的优劣。

我们一定要铭记,用高级语言写出来的代码是给人看的。我相信高级语言诞生时最宏伟的一个目标就是:即使没有学过编程的人,他们可以通过类名、方法名和变量名大概知道程序的功能。

像写好一篇文章一样写代码

我相信一篇优秀的文章,一定是内容精彩,同时字迹漂亮,文章格式人性化。如果一篇文章的内容非常的不错,但是作者的字及其丑陋,同时文章的格式乱糟糟的。我相信那依然是一篇没人喜欢看的天书。写代码也是同样的道理,即使你的代码所实现的功能非常牛逼,但我们这些凡夫俗子都看不懂,那你的代码也没有多大的价值。

我们简单看一下写出好代码要掌握哪些规范:

  • 每个方法所能容纳的代码行数不要超过 30 行,一行代码的字符数量控制在 120 以内。
  • 一个方法只做一件事, 就好比我们在家只吃饭,却不做饭。
  • 在给类名、方法名和变量命名时尽量做到见名知意,这会比你们的注释更加给力,因为这时你们的代码自带注释功效。
  • 类名的每个单词的首字母大写;方法名和变量名的第一个单词的首字母小写,后面单词的首字母大写,这就是传说中的驼峰命名法;常量名的所有字母都要大写,并且每个单词间用下划线隔开。
  • 如果一个方法的形式参数中有太多的基本类型,或者数量超过了 5 个,这时你可以将这些参数封装成一个类。
  • 当一个方法的逻辑比较复杂的时候,一定要加上注释;给类加上注释,以阐明一个类有哪些功能。

我们也是自己嘴中的那个傻 BI

如果你们觉得养成良好的编码习惯并不重要,或者是很难。那么你们可以时隔一个月、半年或者一年再去看你们之前写过的代码,我相信你们会喷嚏连连,因为你们会骂这是哪个傻*写的,很不幸那个傻BI就是你们自己。

不要抱着侥幸的心态,自以为只要是自己写的代码自己就能看懂。其实,你们写的代码并不是你们自己的,随着时间的推移,你们的代码就是别人的啦。为了不让别人(包括你们自己)在背后骂你们,一定要养成良好的编码习惯。

总结

我在文章中并没有详细地列举具体地编码规则,因为这些规则已经有人给出来了。阿里巴巴为我们贡献了一套 Java 开发规范,这套规范不仅适用于 Java 开发,同样对其他的编程开发有借鉴意义。这里是阿里巴巴 Java 开发手册的下载地址。[PS: 阿里巴巴的 Java 开发团队是国内最牛逼的]

最后我给大家推荐一本非常好的书[编写可读代码的艺术],它会教你如何写出一手漂亮的代码,在书中有各种编程语言的实例。
输入图片说明

© 著作权归作者所有

共有 人打赏支持
cnbo
粉丝 4
博文 8
码字总数 15846
作品 0
深圳
程序员
杰尔夫CTT团队/weapp-jief-bilibili

本系列教程开始 微信小程序11月4日开始公测,做技术的我们又得解锁新技能了,所以决定一边学一边写,分享走过的坑。 以《微信小程序 - 哔哩哔哩弹幕视频网》移动端网站为基础开发微信小程序版...

杰尔夫CTT团队 ⋅ 2016/11/14 ⋅ 0

JavaScript 异步

JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过分页形式获取列表。...

掘金官方 ⋅ 01/02 ⋅ 0

开源的ios程序在哪可以看到呢?

开源这个词谁都知道,程序员可以通过开源的程序学很多东西。 我做了两年的ios,想学更多的东西,想看看别人写的代码,别人写的项目,我该去哪看呢?我一般都是看看常用第三方库的源码。可是我...

任我飞啊000 ⋅ 2014/07/06 ⋅ 2

关于Java中的英文?不会英文就不能学习Java吗?

好多学生问,不会英语就不能学Java吗?不是。英语和Java完全没关系。但是就算你不会英语也没关系。Java中系统规定的单词也就200个作用。然后其他的就是你根据意思可以自定义构造一些单词。像...

虞姬-lu ⋅ 01/11 ⋅ 0

Go语言基础学习:变量

Go语言基础学习(一)变量 猜你喜欢 Ceylon语言学习笔记(1) 《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言 go语言学习-常量 GO语言学习-复杂类型(2) Go语言学习...

d_watson ⋅ 2016/04/15 ⋅ 0

Fanta/free-programming-books-zh_CN

免费的编程中文书籍索引 免费的编程中文书籍索引,欢迎投稿。 国外程序员在 stackoverflow 推荐的程序员必读书籍,中文版。 stackoverflow 上的程序员应该阅读的非编程类书籍有哪些? 中文版...

Fanta ⋅ 2016/11/14 ⋅ 0

开源电子书

目录 语言无关类 操作系统 智能系统 分布式系统 编译原理 函数式概念 计算机图形学 WEB服务器 版本控制 编辑器 NoSQL PostgreSQL MySQL 管理和监控 项目相关 设计模式 Web 大数据 编程艺术 ...

zting科技 ⋅ 2017/12/11 ⋅ 0

总有你要的编程书单(GitHub )

目录 IDE IntelliJ IDEA 简体中文专题教程 MySQL 21分钟MySQL入门教程 MySQL索引背后的数据结构及算法原理 NoSQL Disque 使用教程 Neo4j .rb 中文資源 Redis 命令参考 Redis 设计与实现 The ...

汇智网 ⋅ 2017/11/22 ⋅ 0

你最深爱的编程语言其实很烂

我最近写了几篇比较严肃的博客,是关于一些沮丧的事情,结果我开始有些忧郁。很严重。所以,我想应该说些比较轻松的事情。我要做的就是数落大家最喜欢的编程语言。你会问我为什么,为什么要搞...

oschina ⋅ 2014/04/21 ⋅ 131

free-programming-books-zh.md

语言无关MySQL NoSQL PostgreSQL Web WEB服务器 其它 函数式概念 分布式系统 在线教育 大数据 操作系统 数据库 智能系统 正则表达式 版本控制 程序员杂谈 管理和监控 编程艺术 编译原理 编辑...

银月光海 ⋅ 2016/05/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 23分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 31分钟前 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 40分钟前 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 53分钟前 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

【转】JS浮点数运算Bug的解决办法

37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会这样,两个只有一位小数的数字相乘,怎...

NickSoki ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部