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


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


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


1 - 注释和文档


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


看个示例:


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


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



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


2 - 保持一致的缩进


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


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


风格 1:

function foo() {   if($maybe){   do_it_now();   again();   } else{   abort_mission();   }   finalize();   
}

风格 2:

function foo(){     
if($maybe) {     do_it_now();   again();   }else{     abort_mission();   }   finalize();   
}

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


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


PEAR 风格:

function foo(){                       
// 放在下一行[译者注:示例中明明是放在与声明同行的,可能是作者笔误]   if($maybe){        // 放在同一行   do_it_now();   again();   }else{   abort_mission();   }   finalize();   
}

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


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


3 - 避免显而易见的注释


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

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

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


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

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

4 - 代码分组


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


下面是一个简单的示例:

// get list of forums   $forums = array();   
$r = mysql_query("SELECT id, name, description FROM forums");   while ($d = mysql_fetch_assoc($r)){   
$forums[] = $d;   
}   // load the templates   
load_template('header');   load_template('forum_list', $forums);   load_template('footer');

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


5 - 保持一致的命名规范


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


  • strpos() vs. str_split()

  • imagetypes() vs. image_type_to_extension()


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


  • 驼峰风格(camelCase):除第一个单词外每个单词的第一个字母都大写。

  • 下划线(underscores): 在单词间使用下划线分隔,比如:mysql_real_escape_string()。


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

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

class Foo_Bar {   publicfunctionsomeDummyMethod(){   
}

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


6 - DRY 原则


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


该原则规定:


“每个知识必须在一个系统内具有一个唯一的、明确的、权威的表示。”


大多数应用程序(或通用的计算机)的目标是使重复的任务变得自动化。这个原则应该在所有的代码中保留,包括 Web 应用程序中。同一段代码不应该一再地被重复。

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

$this->load->view('includes/header');      
$this->load->view($main_content);      
$this->load->view('includes/footer');

7 - 避免深嵌套


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

functiondo_stuff(){   
// ...   if (is_writable($folder)){   if ($fp = fopen($file_path, 'w')){   if ($stuff = get_some_stuff()){   if (fwrite($fp, $stuff)){   
// ...   }   else   {   returnfalse;   }   }   else   {

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

functiondo_stuff(){   
// ...   if (!is_writable($folder)){   
returnfalse;   
}   
if (!$fp = fopen($file_path, 'w')){   
returnfalse;   
}   
if (!$stuff = get_some_stuff()){   
returnfalse;   
}   
if (fwrite($fp, $stuff)){   
// ...   }   else   {   
returnfalse;   
}   
}

8 - 限制行长度


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



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

//bad   
$my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('Methods Chained')->set_body('Some long message')->send();      
// good   
$my_email      
->set_from('test@email.com')       ->add_to('programming@gmail.com')       ->set_subject('Methods Chained')      ->set_body('Some long message')      ->send();      
// bad   
$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'";      
// good   
$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'";

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


9 - 文件和文件夹的组织


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


在我的第一个编程项目中,我懂得了创建“包含文件”的作法。不过,我还没有接触过远程组织。我创建了一个“inc”文件夹,其中包含两个文件:db.php 和 


functions.php。随着应用的扩展,functions 文件也变得庞大和不可维护。


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



10 - 一致的临时变量命名


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


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

// $i for loop countersfor   
($i= 0; $i< 100; $i++) {          // $j for the nested loop counters       for($j= 0; $j< 100; $j++) {          }   }      
// $ret for return variables  
functionfoo() {       $ret['bar'] = get_bar();       $ret['stuff'] = get_stuff();          
return$ret;   }      
// $k and $v in foreachforeach  
($some_arrayas$k=> $v) {       }      
// $q, $r and $d for mysql  
$q= "SELECT * FROM table";   $r= mysql_query($q);   while($d= mysql_fetch_assocr($r)) {     }      
// $fp for file pointers\  
$fp= fopen('file.txt','w');

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


来自:开源中国社区

链接:https://www.oschina.net/translate/10-tips-how-to-improve-the-readability-of-your-sof

原文:https://dzone.com/articles/10-tips-how-to-improve-the-readability-of-your-sof



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phpsotrm怎么 搜索功能_Windows 10 网络搜索设计太反人类?教你如何彻底关闭它

来源&#xff1a;太平洋电脑网我们知道微软在Windows 10中&#xff0c;特别加强了系统的搜索功能&#xff0c;但Windows 10的搜索的确很难称得上好用。抛开效率低下、呈现结果少、造成系统卡顿等老生常谈的问题不论&#xff0c;在功能设计方面&#xff0c;Windows 10搜索也有硬…

支撑性服务 自动化能力

连载传送门&#xff1a;什么是云原生&#xff1f;云原生设计理念.NET 微服务谈到云原生&#xff0c;绕不开“容器化”Backing services云原生系统依赖于许多不同的辅助资源&#xff0c;例如数据存储、消息队列、监视和身份服务&#xff0c;这些服务统称为支撑性服务。下图显示了…

网站logo放在服务器,自己建网站如何设计网站LOGO

LOGO是一个网站的形象代表或者说是品牌的象征&#xff0c;用户记住了网站LOGO&#xff0c;就相当于记住了网站&#xff0c;因此&#xff0c;自己建网站时要融入网站LOGO的设计&#xff0c;潜移默化地把LOGO形象植入用户脑海中&#xff0c;把网站与LOGO紧密连接在一起&#xff0…

python http协议获取对方的ip地址_http协议(一)基础知识

参考&#xff1a;老张http://link.zhihu.com/?targethttps%3A//www.cnblogs.com/imyalost/p/5627816.html参考书籍——《图解http》当我们在浏览器的地址栏中输入网址&#xff0c;然后点击回车&#xff0c;接着&#xff0c;浏览器就会呈现出我们需要的web界面&#xff0c;那么…

TIOBE编程语言排行榜,Python遥遥领先

在这个快节奏的时代&#xff0c;要想走在潮流前端&#xff0c;你需要用最有效的方式&#xff0c;最有效率的工具&#xff0c;学习最有用的知识。而如今人工智能和数据分析爆发&#xff0c;python就是一颗冉冉升起的新星&#xff0c;因为简单易用和广阔的可能性&#xff0c;不仅…

Dapr是如何简化微服务的开发和部署

基于微服务设计模式的现代应用程序面临着一系列挑战。微服务需要有一个强大的服务发现机制来实现动态连接。它们需要松散耦合&#xff0c;实现自主性和独立缩放。微服务需要支持多种语言&#xff0c;其中每个服务都是以最合适的语言、框架和运行时实现的。尽管采用容器和编排引…

table 内 下拉列表 被遮挡_一个简洁、有趣的无限下拉方案

本文主旨长列表渲染、无限下拉也算是前端开发老生常谈的问题之一了&#xff0c;本文将介绍一种简洁、巧妙、高效的方式来实现。话不多说&#xff0c;看下图&#xff0c;也许你可以发现什么&#xff1f;无限下拉示意图不知你是否从上面这张图中注意到了什么&#xff0c;比如只是…

天龙八部服务器维护后提BB,天龙八部:宠物比号值钱?玩家哭诉附体BB半年也卖不出去...

说到天龙八部的附体宝宝&#xff0c;相信许多爱美的玩家基本上都人手一只。附体后的增益多不多无所谓&#xff0c;首先附体后身上有龙、凤凰、蝴蝶等之类的特效&#xff0c;让许多玩家觉得游戏中角色颜值增添不少&#xff0c;当然一只属性不错的附体珍兽&#xff0c;也能够给游…

写了 15 年代码,总结出提升 10 倍效率的三件事

译者&#xff1a;roy 【译者注】本文作者 Matt Watson 已经写了超过 15 年的代码&#xff0c;也由此总结出了提升 10 倍效率的三件事。Matt 表示&#xff0c;一个 10 倍效率的开发人员很快就知道了他们需要做什么&#xff0c;要问什么问题&#xff0c;什么时候不问问题&#xf…

服务器不知道怎么回事安卓系统很卡,为什么安卓系统很容易变卡?该怎么解决?看完长知识了...

手机是我们现代生活的必备之物&#xff0c;什么都可以没有到就是不能没有手机&#xff0c;如今市面上的手机的手机不是安卓系统就是ios系统&#xff0c;安卓系统的手机虽然便宜但是有一个诟病&#xff0c;那就是安卓的手机会越用越卡&#xff0c;不管你手机配置是多么的高&…

EntityFramework Core自动返回SQL语句

【导读】给各位拜年了&#xff0c;开年第一篇&#xff0c;后续我们介绍EF Core 5.0相关新特性自动返回SQL语句当执行LINQ查询时&#xff0c;EF Core 5.0提供了ToQueryString扩展方法返回生成的SQL语句比如&#xff0c;执行如下LINQ查询var name "jeffcky"; var user…

怎么用ai做出适量插画_怎么用最简单的方法,做出最炫酷的数据可视化图表?...

如果要问数据怎样做才能显得最装逼&#xff0c;那么答案一定只有一个&#xff1a;“数据可视化”&#xff01;看上去也很炫酷对不对&#xff0c;其实上面的可视化图表其实并不复杂&#xff0c;很多人推荐的Python、R语言、Tableau等专业数据分析工具几乎都能很轻松的实现。但是…

stm32烧不进去程序_STM32的FLASH和SRAM的使用情况分析

点击上方蓝字关注我哦&#xff5e;01前言STM32片上自带FLASH和SRAM&#xff0c;简单讲FLASH用来存储程序的&#xff0c;SRAM是用来存储运行程序中的中间变量。本文详细分析下如何查看程序中FLASH和SRAM的使用情况。本文开发工具: keil5芯片: STM32F105VCT602FLASH和SRAM介绍FLA…

每一个人都应该学习电脑编程,因为它会教你如何思考

扎克伯格11岁开始学习编程&#xff0c;创办Facebook&#xff1b;比尔盖茨13岁学习编程&#xff0c;创办微软……乔布斯说&#xff1a;“每一个人都应该学习电脑编程&#xff0c;因为它会教你如何思考。" 现在在北京上海&#xff0c;顶级的IT工程师&#xff0c;年薪至少是百…

GitHub Actions 支持 skip ci 了

GitHub Actions 支持 "skip ci" 了IntroGitHub Actions 作为 GitHub 官方的 CI 支持&#xff0c;很多开源项目已经在使用 Actions 来做项目的 CI 了&#xff0c;但是一直以来有一个痛点&#xff0c;就是不支持跳过 CI&#xff0c;其他的 CI 大多都可以通过在 commit …

layui上传报错会有哪些原因_一到冬天,为什么会比别人更怕冷?有哪些原因?...

冬天已经正式来到&#xff0c;气温也是越来越低了&#xff0c;早晚的时候就能明显的感觉到寒风凛凛。有很多人到了冬天以后就很怕冷&#xff0c;风一吹过来&#xff0c;就觉得浑身都冰冷。明明已经穿了很多的衣服&#xff0c;还是会觉得很冷&#xff0c;只有在空调、暖气底下&a…

干货|MIT线性代数课程精细笔记[第一课]

1知识概要本节开始&#xff0c;我们一起来学习线性代数的有关知识&#xff0c;首节我们从解方程谈起&#xff0c;学习线性代数的应用之一就是求解复杂方程问题&#xff0c;本节核心之一即为从行图像与列图像的角度解方程。 2方程组的几何解释基础 2.1 二维的行图像 我们首先通…

element 方法返回的boolean被当成字符串了_13个需要知道的方法:使用 JavaScript 来操作 DOM...

作者&#xff1a;Milos Protic 译者&#xff1a;前端小智来源&#xff1a;impressivewebs.DOM 或文档对象模型是 web 页面上所有对象的根。它表示文档的结构&#xff0c;并将页面连接到编程语言。它的结构是一个逻辑树。每个分支结束于一个节点&#xff0c;每个节点包含子节点、…

很遗憾,总对工作挑挑拣拣的家伙,一般结局都不会太好

这是头哥侃码的第233篇原创在过去的五年里&#xff0c;我最怕遇到两件事。一是失眠&#xff0c;一个人半夜醒来&#xff0c;瞬间毫无困意&#xff0c;只能瞪大眼睛望着天花板数羊&#xff0c;等待着黎明的到来。二是每到春节之前&#xff0c;在进行团队年度绩效评估和年终奖发放…

为什么技术与产品沟通起来总是那么痛苦

“如果产品经理过一会又打电话说再买个“面包”。。。那就折腾死程序员了。” 为什么产品与技术沟通起来总是那么痛苦&#xff1f;有时候你觉得很简单的一件事&#xff0c;在程序的世界里很有可能变得纷繁复杂。 编程语言&#xff0c;它终归是一门语言&#xff0c;只是它的使用…