当前位置: 首页 > 科技观察

提高代码可读性的10个小技巧

时间:2023-03-20 10:30:57 科技观察

可读性强的代码可以帮助你调试程序,让自己不至于太累。代码可读性是计算机编程领域普遍存在的问题。这是我们作为开发人员首先要学习的东西之一。本文将详细介绍编写高度可读代码时最佳实践中最重要的部分。1-CommentsandDocumentationIDE(IntegratedDevelopmentEnvironmnet,集成开发环境)在过去几年中已经存在了很长时间。使用IDE注释代码比以往任何时候都容易。某些精确的注释标准可能会导致IDE和其他工具以不同的方式进行注释。举个例子:我在函数定义前加的注释在函数使用时可以显示,即使在其他文件中使用这个函数。下面是另一个例子,关于从第三方库调用函数:在这些例子中,注释(或文档)的类型是基于PHPDoc的,使用的IDE是Aptana。2-假设您已经知道代码需要缩进,则保持一致的缩进。不过,值得注意的是,***保持缩进风格一致。代码缩进的方式有很多种,这里介绍两种最常见的方式:方式一:functionfoo(){if($maybe){do_it_now();again();}else{abort_mission();}finalize();}方式2:functionfoo(){if($maybe){do_it_now();again();}else{abort_mission();}finalize();}我以前使用样式#2,但最近改为#1。但这个问题只是一个偏好问题。没有人人都遵循的“***”风格。事实上,最好的风格是一贯的风格。如果您是团队的一员,或者如果您正在为项目贡献代码,您应该遵循项目中使用的风格。缩进样式之间并不总是有明显的区别。有时,不同的规则会造成混淆。例如,在PEAR编码标准中,左大括号“{”与控制结构在同一行,但在函数定义中需要换行。PEARstyle:functionfoo(){//放在下一行();}else{abort_mission();}finalize();}另外注意缩进是4个空格而不是制表符。这是来自维基百科的不同缩进样式的示例。3-避免明显的注释注释代码很棒;但是,如果注释只是重复,那么它们就是多余的。看看这个例子://获取国家代码$country_code=get_country_code($_SERVER['REMOTE_ADDR']);//如果国家代码是USif($country_code=='US'){//在表单中Show"state"inputechoform_input_state();}如果文字很明显,真的没必要在评论里再写一遍。如果一定要在代码中写一些注释,可以将它们组合成一行://为美国用户显示“state”输入框$country_code=get_country_code($_SERVER['REMOTE_ADDR']);if($country_code=='US'){echoform_input_state();}4–代码分组有些任务往往不是几行代码就能解决的,所以最好把这些任务代码分成不同的代码段,中间加一些空行。这是一个简单的例子://getlistofforums$forums=array();$r=mysql_query("SELECTid,name,descriptionFROMforums");while($d=mysql_fetch_assoc($r)){$forums[]=$d;}//loadthetemplatesload_template('header');load_template('forum_list',$forums);load_template('footer');在每段代码之前添加注释可以增强视觉分离。5-保持一致的命名约定PHP本身有时不遵循一致的命名约定:strpos()与str_split()imagetypes()与image_type_to_extension()首先,名称应该有单词边界。这里有两个流行的选择:CamelCase:将除首字母以外的每个单词的首字母大写。Underscores(下划线):用下划线分隔单词,如:mysql_real_escape_string()。这类似于我之前提到的使用不同缩进样式的内容。如果您的项目中已经使用了约定,您应该遵循它。此外,某些语言平台通常有特定的命名约定。例如,在Java中,大多数代码使用驼峰命名风格,而大多数PHP程序员使用下划线命名风格。这些网络也可以混合使用。一些开发人员喜欢对过程函数和类使用下划线风格,但对类方法使用驼峰式命名法:classFoo_Bar{publicfunctionsomeDummyMethod(){}同样,没有“***”风格,保持一致即可。6-DRY原则DRY代表不要重复自己。也称为DIE:复制是邪恶的。该原则指出:“每条知识都必须在系统中具有唯一的、明确的、权威的表示。”大多数应用程序(或一般的计算机)的目标是自动执行重复性任务。这个原则应该保留在所有代码中,包括Web应用程序。同一段代码不应该一遍又一遍地重复。例如,大多数Web应用程序都包含许多页面。这些页面可能包含共同元素。页眉和页脚通常就是证据。在每一页上复制这些页眉和页脚不是一个好主意。JeffreyWay在这里解释了如何在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('MethodsChained')->set_body('Somelongmessage')->send();//good$my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('MethodsChaind')->set_body('Somelongmessage')->send();//错误$query="SELECTid,username,first_name,last_name,statusFROMusersLEFTJOINuser_postsUSING(users.id,user_posts.user_id)WHEREpost_id='123'";//good$query="SELECTid,username,first_name,last_name,statusFROMusersLEFTJOINuser_postsUSING(users.id,user_posts.userp_id)W'123'";当然,如果有人,比如Vim用户,想在终端窗口中阅读你的代码,***将代码行的长度限制在80个字符左右9-技术上文件和文件夹的组织Inother换句话说,您可以将整个应用程序的代码写在一个文件中。但是,这将是阅读和维护的噩梦。在我的第一个编程项目中,我学会了创建“包含文件”的做法……但是,我还没有接触过远程组织。我创建了一个包含两个文件的“inc”文件夹:db.php和functions.php。随着应用程序的扩展,函数文件变得很大且无法维护。最好的方法之一是使用框架或模仿其文件夹结构。这是CodeIgniter的代码布局:10-ConsistentTemporary变量命名通常,变量应该是描述性的并且包含一个或多个词。但是,这不一定适用于临时变量。它们的长度可以短到单个字符。对服务于相同目的的临时变量使用一致的命名是一种很好的做法。以下是我在代码中常用的几个示例://$iforloopcountersfor($i=0;$i<100;$i++){//$jforthenestedloopcountersfor($j=0;$j<100;$j++){}}//$retforreturnvariablesfunctionfoo(){$ret['bar']=get_bar();$ret['stuff']=get_stuff();return$ret;}//$kand$vinforeachforeach($some_arrayas$k=>$v){}//$q,$rand$dformysql$q="SELECT*FROMtable";$r=mysql_query($q);while($d=mysql_fetch_assocr($r)){}//$fpforfilepointers\$fp=fopen('file.txt','w');探索TDM在敏捷、DevOps和持续交付中对速度和质量的必要性。与CA技术携手合作。