干净的代码是改出来的

简介:

对于程序员来说,最终的也是最基本的目标就是能写出一手好的代码。随着代码量的增长,自身对什么是好的代码的认识也渐渐有了不断的调整。

 

1 注释真的那么重要么?

最好的注释就是代码。这句话确实是没有错误的。如果一个函数占用了一屏的版面,原因是由于各种各样的注释和解释性的 // ** 等说明文档,确实是比较恼人的。与其花过多的时间花精力在注释和说明的编写上面,不如花时间在变量名的编写上面。

 

不能说没有注释的代码一定是天书。在程序员界来说,其实有许多是大家默认的约定,以php为例子

如果说function getMsgBySsn(msgid,msgid,ssn)

function getMsgs($msgids);

这样的语句其实不用注释完全是可以的

 

这说明好的变量名和函数名是最好的注释!

在做一个完整的项目的时候,看代码的过程中其实就是接受作者潜意识规约的过程。

如果一个大的项目,所有的数据结构都使用一致的变量名,msg,msg,chg, 那么这些变量名就已经赋予了完整的定义了。

比如在一个项目中,在所有表示“消息”这个概念的地方,不管是参数还是返回值,完全都只使用$msg这么一个array()

那么,虽然我没有在每个引用的地方加大篇幅说明$msg中的key和value是什么,只要读者追着看到这样的函数:

1
2
3
4
5
6
7
8
9
10
11
12
function  getMsg()
 
{
     $msgid  = self::getMsgid()
     return  array (
 
     ‘msgid’ => $msgid ,
     'ssn'       => self::getSsn( $msgid ),
     'title'       => self::getTitle( $msgid ),
    );
 
}

是不是/** Msg包含 msgid,ssn,title **/这样的注释更好呢?

 

当然,好代码在变量都一定会遵循的规则是:一个项目一个意思的东西,一定只有一个规定的变量名

好的代码会由于一个或两个变量名起的不对而不惜一次一次的svn commit,最后出现的代码一定不会让你失望的

 

2 代码的简洁性

你总是能感叹到为什么有的人写的代码是这么让人舒服。

让代码简单并不是一件容易的事情。这需要相当的代码能力才能有这样的能力。

比如这么一个函数,明明可以更简单的:

1
2
3
4
5
6
7
8
9
10
11
12
function  example()
{
     $iMsgid  = $this ->getMsgid();
     $sTitle  = $this ->genTitle( $iMsgid );
     $sContent  = $this ->genContent( $iMsgid );
     $result  = array (
         'msgid'  => $iMsgid ,
         'title'      => $sTitle ,
         'content'  => $sContent ,
     );
     return  $result ;
}

我宁可选择写成这样:

1
2
3
4
5
6
7
function  example()
{
     $msgid  = $this ->getMsgid();
     $title  = $this ->genTitle( $msgid );
     $content  = $this ->genContent( $msgid );
     return  compact( 'msgid' , 'title' , 'content' );
}

不妨能不能用更少的代码行数写出一样功能性的代码。

代码的量一旦减少,给的信息就是:犯错的概率也更少了。

 

 

最近在新项目组有几个感想:

1

以前经常觉得有很多函数必须要很详细的参数说明什么的,其实大都都是可以使用OO的方法来使代码更优美

比如function(msgid,msgid,title, content,content,ssn)

为什么不是使用function($msg)呢?

开始我认为,$msg这样传入并不知道里面包含的key和value是什么,对代码的阅读性造成障碍

但是后来想想,其实这是因为我在阅读到这个函数的时候并没有$msg是一个对象的概念,也就是前面的代码并没有在人的潜意识里面栽种下这个对象的概念。那么前面的代码应该改了…………

 

2 好的代码不是一次性写出来的,一定是一次一次svn commit堆积出来的,你会看到某大牛为了一个空格,一个文件名是使用cron还是shell, 一个变量名(比如getMsg(Msgid)=>getMsg(Msgid)=>getMsg(msgid))而进行一次又一次的改动

最后得出的代码真的是“干净”的!

 

----------------------

作者:yjf512(轩脉刃)

出处:http://www.cnblogs.com/yjf512/

本文版权归yjf512和cnBlog共有,欢迎转载,但未经作者同意必须保留此段声明

目录
相关文章
|
存储 弹性计算 数据库
云计算概念和与云服务的区别
“云”在计算机科学和信息技术领域通常指“云计算”,即通过互联网提供计算资源(如服务器、存储、数据库、网络、软件、分析等)的模式。用户可以按需访问和使用这些资源,而无需管理和维护实际的硬件和软件。
2266 3
|
中间件
流量回放工具之GoReplay output-http 源码分析
【6月更文挑战5天】流量回放工具之GoReplay output-http 源码分析
255 2
|
Android开发 开发者
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
Android、Flutter为不同的CPU架构包打包APK(v7a、v8a、x86)
1390 1
|
XML JSON 监控
API 开发完全指南
本指南将详尽探讨API开发的基本要素,包括涉及的概念、类型和协议,以及可用的最佳实践和工具。我们将从揭示API在现代软件开发中的作用开始,阐明它们如何促进不同软件组件之间的无缝通信。之后,我们将深入研究各种API类型,如RESTful、GraphQL和SOAP,并分析它们独特的特点和理想用例。 接下来将讨论API设计的关键方面,重点关注API安全性、可扩展性和可维护性。我们将讨论常见的身份验证和授权机制、速率限制以及API版本控制等其他基本主题。最后,我们将介绍领先的API开发工具和框架以及文档和测试的价值,确保你具备开发高质量、高效且安全API所需的知识和资源。
2514 0
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
1622 0
|
搜索推荐 数据可视化 前端开发
ECharts 词云图案例【用户画像】:创意蒙版应用
使用ECharts创建词云图,结合蒙版技术提升可视化创意。通过设置`maskImage`属性,将自定义图像作为词云的外形,如用户画像。案例中详细介绍了HTML结构、ECharts配置及蒙版图像加载过程,鼓励探索SVG路径和CSS样式以实现更多个性化效果。代码和依赖可下载,激发更多数据可视化灵感。
1093 0
 ECharts 词云图案例【用户画像】:创意蒙版应用
|
存储 SQL 关系型数据库
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
MySQL - 深入理解 MySQL 的 MVCC 及实现原理
992 1
|
Java 数据库连接 数据库
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
1765 0
|
搜索推荐 网络安全 Apache
如何飞速成为开源贡献者(Contributor)
如何飞速成为开源贡献者(Contributor)
516 0
|
消息中间件 NoSQL Java
Redis实现延迟队列,我研究了两种方案,发现并不简单
前段时间有个小项目需要使用延迟任务,谈到延迟任务,我脑子第一时间一闪而过的就是使用消息队列来做,比如RabbitMQ的死信队列又或者RocketMQ的延迟队列,但是奈何这是一个小项目,并没有引入MQ,我也不太想因为一个延迟任务就引入MQ,增加系统复杂度,所以这个方案直接就被pass了。