提升代码可读性的10个技巧

具有较强可读性的代码,能帮助你调试程序,不让自己活得太累。

代码可读性是计算机编程领域中普遍存在的问题。这也是我们成为开发者首先要学习的事情之一。本文会详细介绍在编写强可读性代码时最佳实践中最重要的一部分内容。

1 – 注释和文档

IDE(Integrated Development Environmnet,集成开发环境)在过去数年中已经存在了很长时间。使用 IDE 注释代码比以往容易得多。某些确切的注释标准可以让 IDE 和其它工具以不同的方式来完成注释。

看个示例:

我在这里添加到函数定义前的注释可以在使用函数的时候显示出来,甚至在其它文件中使用这个函数也没问题。

下面是另一个示例,关于调用一个第三方库的函数:

在这些示例中,注释(或文档)的类型是基于 PHPDoc 的,使用的 IDE 是 Aptana。

2 – 保持一致的缩进

假设你已经知道代码需要缩进。不过值得注意的是,最好保持缩进样式一致。

缩进代码的方式很多,这里最最常见的两种:

风格 1:


  1. function foo() { 
  2.     if($maybe){ 
  3.         do_it_now(); 
  4.         again(); 
  5.     } else{ 
  6.         abort_mission(); 
  7.     } 
  8.     finalize(); 
  9. }  

风格 2:


  1. function foo(){   
  2. if($maybe) {   
  3.  do_it_now(); 
  4.         again(); 
  5.     }else{   
  6.  abort_mission(); 
  7.     } 
  8.     finalize(); 
  9. }  

我以前使用的风格 #2,但最近改为 #1 了。但这个问题只是一个偏好的问题。没有“最好”的风格来让每一个人都去遵循。实际上,最好的风格就是一致的风格。如果你是团队的一员,或者你在向某个项目贡献代码,你就应该遵循项目中正在使用的风格。

缩进风格间并不总是会有明显的区别。有时候,不同的规则会产生混淆。比如,在 PEAR 编码标准中,前大括号“{”与控制结构在同一行,但在函数定义中却需要换行。

PEAR 风格:


  1. function foo(){                     
  2. // 放在下一行[译者注:示例中明明是放在与声明同行的,可能是作者笔误] 
  3.     if($maybe){      
  4.       // 放在同一行 
  5.         do_it_now(); 
  6.         again(); 
  7.     }else{ 
  8.        abort_mission(); 
  9.     } 
  10.     finalize(); 
  11. }  

另外,请注意,缩进是用的 4 个空格而不是制表符。

这里是 Wikipedia 中不同缩进风格的示例。

3 – 避免显而易见的注释

注释代码非常棒;但是,如果注释只是简单的重复就显得多余了。看看这个示例:


  1. // 获取国家/地区代码 
  2. $country_code = get_country_code($_SERVER['REMOTE_ADDR']); 
  3. // 如果国家/地区代码是 US 
  4. if ($country_code == 'US'){ 
  5. // 在表单中显示“州”输入框 
  6. echo form_input_state(); 
  7. }  

如果文本是显而易见的,真的没必要在注释里再写一次。

如果你一定要在代码里写点注释,可以把它们合并在一行:


  1. // 对美国用户显示“州”输入框 
  2. $country_code = get_country_code($_SERVER['REMOTE_ADDR']); 
  3. if ($country_code == 'US'){ 
  4. echo form_input_state(); 
  5. }  

4 – 代码分组

某些任务往往不是几句代码就能解决的,那最好把这些任务代码分为不同的代码段,在它们之间添加一些空行。

下面是一个简单的示例:


  1. // get list of forums 
  2. $forums = array(); 
  3. $r = mysql_query("SELECT id, name, description FROM forums"); 
  4.  
  5. while ($d = mysql_fetch_assoc($r)){ 
  6. $forums[] = $d; 
  7.  
  8. // load the templates 
  9. load_template('header'); 
  10. load_template('forum_list', $forums); 
  11. load_template('footer');  

在每段代码前添加注释可以加强视觉分离效果。

5 – 保持一致的命名规范

PHP 本身有时候并不遵循一致的命名规范:

  • strpos() vs. str_split()
  • imagetypes() vs. image_type_to_extension()

首先,名字应该有单词的边界。下面是两种流行的选择:

  • 驼峰风格(camelCase):除第一个单词外每个单词的第一个字母都大写。
  • 下划线(underscores): 在单词间使用下划线分隔,比如:mysql_real_escape_string()。

这一点与我前面提到使用不同缩进风格的情况相似。如果项目中已经在使用某个约定,你应该遵循它。另外,某些语言平台往往会有一个特定的命名规范。比如在 Java 中,多数代码使用驼峰命名风格,而多数 PHP 程序员使用下划线命名风格。

这些网络也可以混合使得。有些开发者喜欢对过程函数和类使用下划线风格,但对类方法使用驼峰风格:


  1. class Foo_Bar { 
  2.     publicfunctionsomeDummyMethod(){ 
  3. }  

再强调一下,没有“最好”的风格,保持一致就好。

6 – DRY 原则

DRY 代表不要重复你劳动(Don’t Repeat Yourself)。也被称为 DIE:复制是不可接受的(Duplication is Evil)。

该原则规定:

“每个知识必须在一个系统内具有一个唯一的、明确的、权威的表示。”大多数应用程序(或通用的计算机)的目标是使重复的任务变得自动化。这个原则应该在所有的代码中保留,包括 Web 应用程序中。同一段代码不应该一再地被重复。

例如,大多数 Web 应用程序由许多页面组成。这些页面很可能包含通用的元素。标题和页脚通常是最佳证明。将这些页眉和页脚在每个页面中复制一份并不是一个好主意。 Jeffrey Way 在此解释了如何在 CodeIgniter 中创建模板。


  1. $this->load->view('includes/header');    
  2. $this->load->view($main_content);    
  3. $this->load->view('includes/footer');  

7 – 避免深嵌套

过多的嵌套层次会使代码变得难以阅读和跟踪


  1. functiondo_stuff(){ 
  2. // ... 
  3. if (is_writable($folder)){ 
  4.     if ($fp = fopen($file_path, 'w')){ 
  5.         if ($stuff = get_some_stuff()){ 
  6.             if (fwrite($fp, $stuff)){ 
  7. // ... 
  8.    } 
  9.       else 
  10.    { 
  11.     returnfalse; 
  12.    } 
  13.   } 
  14.   else 
  15. {  

为了提高可读性,通常会通过修改代码来减少嵌套的层级:


  1. functiondo_stuff(){ 
  2. // ... 
  3. if (!is_writable($folder)){ 
  4. returnfalse; 
  5. if (!$fp = fopen($file_path, 'w')){ 
  6. returnfalse; 
  7. if (!$stuff = get_some_stuff()){ 
  8. returnfalse; 
  9. if (fwrite($fp, $stuff)){ 
  10. // ... 
  11.   else 
  12. returnfalse; 
  13. }  

8 – 限制行长度

人眼在阅读窄长的列式文本时感觉更舒适,这也是为什么报纸的文章都是这个样子:

避免代码行水平过长是一种良好的变成习惯


  1. //bad 
  2. $my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('Methods Chained')->set_body('Some long message')->send();    
  3. // good 
  4. $my_email    
  5. ->set_from('test@email.com')     
  6.   ->add_to('programming@gmail.com')     
  7.   ->set_subject('Methods Chained')    
  8.   ->set_body('Some long message')    
  9.   ->send();    
  10. // bad 
  11. $query= "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";    
  12. // good 
  13. $query= "SELECT id, username, first_name, last_name, status     
  14.   FROM users    
  15.   LEFT JOIN user_posts  
  16.   USING(users.id, user_posts.user_id)     
  17.   WHERE post_id = '123'";  

当然,如果有人,比如 Vim 用户,想要在终端窗口中阅读你的代码,最好将代码行的长度限制在 80 个字符左右。

9 – 文件和文件夹的组织

从技术上讲,你可以在单个文件中编写整个应用程序的代码。但是,这对阅读和维护来说将是一个噩梦。

在我的第一个编程项目中,我懂得了创建“包含文件”的作法。不过,我还没有接触过远程组织。我创建了一个“inc”文件夹,其中包含两个文件:db.php 和 functions.php。随着应用的扩展,functions 文件也变得庞大和不可维护。

最好的方法之一就是使用框架或者模拟其文件夹结构。下面是 CodeIgniter 的代码布局:

10 – 一致的临时变量命名

通常,变量应该是描述性的,并且包含一个或多个单词。但是,这并不一定适用于临时变量。它们可以短到单个字符的长度。

对于具有相同作用的临时变量,使用一致的命名是一个很好的做法。以下是我在代码中常用的几个示例:


  1. // $i for loop countersfor 
  2. ($i= 0; $i< 100; $i++) {        
  3.   // $j for the nested loop counters     
  4.   for($j= 0; $j< 100; $j++) {        
  5.   } 
  6. }    
  7. // $ret for return variables 
  8. functionfoo() {     
  9.  $ret['bar'] = get_bar();     
  10.  $ret['stuff'] = get_stuff();        
  11.  return$ret; 
  12. }    
  13. // $k and $v in foreachforeach 
  14. ($some_arrayas$k=> $v) {    
  15. }    
  16. // $q, $r and $d for mysql 
  17. $q= "SELECT * FROM table"; 
  18. $r= mysql_query($q); 
  19. while($d= mysql_fetch_assocr($r)) {   
  20. }    
  21. // $fp for file pointers\ 
  22. $fp= fopen('file.txt','w');  

探索 TDM 对于敏捷、DevOps 和持续交付中速度和质量的必要性。与 CA 技术一起携手合作。 

原文发布时间为:2017-10-30

本文作者:Manas Sadangi

本文来自合作伙伴“51CTO”,了解相关信息可以关注。

时间: 2024-12-22 15:33:32

提升代码可读性的10个技巧的相关文章

提升代码可读性的 10 个技巧

代码可读性是计算机编程领域中普遍存在的问题.这也是我们成为开发者首先要学习的事情之一.本文会详细介绍在编写强可读性代码时最佳实践中最重要的一部分内容. 1 - 注释和文档 IDE(Integrated Development Environmnet,集成开发环境)在过去数年中已经存在了很长时间.使用 IDE 注释代码比以往容易得多.某些确切的注释标准可以让 IDE 和其它工具以不同的方式来完成注释. 看个示例: 我在这里添加到函数定义前的注释可以在使用函数的时候显示出来,甚至在其它文件中使用这个

如何提升代码可读性?

作为开发者,可能会经常听到"代码首先是写给人看的"."写可读的代码相当重要"等等. 对于如何使代码的可读性更强,开发者往往都有自己的看法.那么你可曾仔细想过什么才能真正使代码可读性增强. 一些标准答案 无论你使用什么编程语言,你都可能会认同下面的建议可以增强代码的可读性: 好的变量.方法.类名一个变量.类.方法只做一件事一致的缩进,一致的格式减少代码中的嵌套级别 当然,还有很多其他标准答案,比如 Clean Code(Robert Martin著)和Code Com

提高代码可读性的十大注释技巧分享_相关技巧

本文讲述了提高代码可读性的十大注释技巧.分享给大家供大家参考,具体如下: 很多程序员在写代码的时候往往都不注意代码的可读性,让别人在阅读代码时花费更多的时间.其实,只要程序员在写代码的时候,注意为代码加注释,并以合理的格式为代码加注释,这样就方便别人查看代码,也方便自己以后查看了.下面分享十个加注释的技巧: 1. 逐层注释 为每个代码块添加注释,并在每一层使用统一的注释方法和风格.例如: 针对每个类:包括摘要信息.作者信息.以及最近修改日期等: 针对每个方法:包括用途.功能.参数和返回值等. 在

最小化用户差评新手机应用的10个技巧

文章描述:总结Android手机应用UI设计的10个要点. 作者:Guenther Beyer 最近,许多开发者进驻手机领域,小团队也能够构想出优秀和独特的想法,使用业余时间便足够来开发应用. 每个开发循环迟早到会走到应用几近完成这个点.接下来要做什么呢?你可曾听说过"用户体验"这个词?以下这10个技巧能够使新手机应用在发布前提升质量,最大化发掘该应用的潜力,从而最小化用户差评和低下载量这种不良结果. 1.首次开启体验 优秀的网站和手机应用有诸多相似之处.这两者都能够迅速吸引用户或访问

三年0故障总结,提升代码质量的秘诀

该文章来自于阿里巴巴技术协会(ATA)精选文章. 个人经历 对我代码质量影响最大的是在一家外资企业,在这家公司我觉得有以下几个方面做的很不错. 团队编码风格统一 统一到什么程度? 不看代码作者,你很难区分代码是谁写的(在目前公司一些团队也能达到这个标准). 个人观点: 这样做有什么好处?团队中每个人阅读代码都很容易,减少很多沟通,维护成本( 代码阅读的次数远远大于变更的次数),并且心情非常愉悦.有人肯定觉得愉悦有点夸张,举个栗子: 有一些代码,如果不是由于与工作内容有关联,你是否有种这辈子都不情

10大技巧教你提高访客忠诚度

摘要: 访客忠诚度:网站访客对于您的网站依赖的程度,通过网站统计工具可以得到具体的数字. 访客忠诚度可以分为二种: ●偶发性访客 偶发性访客,互联网用户在需要某一帮助功能时, 访客忠诚度:网站访客对于您的网站依赖的程度,通过网站统计工具可以得到具体的数字. 访客忠诚度可以分为二种: ●偶发性访客 偶发性访客,互联网用户在需要某一帮助功能时,我们通过搜索引擎出现在访客面前.比如:一个广告设计策划类型的网站,在访客需要广告设计策划帮助时,他们会通过搜索引擎浏览到这个网站,通过访问这个网站解决自己心中

使用Java与XSLT的10条技巧

技巧 在我的新书<Java and XSLT>中介绍了Java与XSLT的技术组合.这篇文章从书中选出了我认为非常重要的10条技巧.但实际上这有限的10条只是粗略的描述了什么是可能的.其中大多数都集中在Java与XSLT的组合上,而不是在XSLT(可扩展样式表转换)技术规范.而更详细的信息,在文章结尾处指出了一些有价值的资源. 基本的XSL转换是非常简单的:一个或多个包含着指令的XSLT样式表,这些指令定义了如何把XML数据转换成其他格式.XSLT处理器完成实际的工作:Sun微系统的Java

ASP.NET应用程序设计的10大技巧

asp.net|程序|技巧|设计 在本篇文章中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件.表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境. 1.在使用Visual Studio .NET时,除直接或非引用的对象外,不要使用缺省的名字 .NET带来的好处之一是所有的源代码和配置文件都是纯文本文件,能够使用Notepad或WordPad等任意的文本编辑器进行编辑.如果不愿意,我们并非一定要使用Vis

ASP.NET应用程序设计的10大技巧(二)

   5.只在必要时使用服务器端控件 ASP.NET中新引入了一种在服务器端运行的被称作Web Server Controls的控件,在代码中,它们经常通过下面的语法被说明: <asp:TextBox id="txtLastName" size="40" runat="server" />  它们有时也被称作ASP控件.服务器端控件是由runat属性指示的,它的值总是"server". 通过添加runat属性,一般