代码规范

Android代码规范检查配置 Android代码规范检查配置 Android代码规范检查分为Java、kotlin语言代码检查两部分配置。 1)对于Java代码,我们采用checkstyle插件来做代码规范检查。代码规范模版,我们采用阿里的Android代码规范。 2)对于Kotlin代码,我们采用detekt插件来做代码规范检查。代码规范模版,我们在detekt自带模版的基础上进行调整。 一.CheckStyle配置 1.安装插件 command +逗号 快捷键,弹出以下界面,输入checkStyle-IDE... 阅读详情

缩进与空白字符(Indenting and Whitespace)

  • 使用 2 个空格而不使用 tab 键进行代码缩进(notepad++, Eclipse 等编辑器均支持此项配置);
  • 行尾不应该有空白字符
  • 应使用 \n (Unix换行符),而不是 \r\n (Windows 换行符)
  • 所有文件均应以一个空行结尾

运算符(Operators)

  • 所有二元运算符(二个值之间的运算符),如 +, -, =, !=, ==, > 等等,在运算符两端均需留有一个空格,如应该使用 $foo = $bar 而不是 $foo=$bar。
  • 所有一元运算符(只操作一个值班的运算符),例如 ++,在值与运算符之间则不应加入空格

转型(Casting)

  • 在 (type) 与要转型的变量之间应加入一个空格,如 (int) $mynumber.

控制结构(Control Structures)

控制结构包含 if, for, while, switch 等等,下面是一个简单的 if 语句结构示例:

if (condition1 || condition2) {
  action1;
}
elseif (condition3 && condition4) {
  action2;
}
else {
  defaultaction;
}

(Note: 不要使用 "else if" -- 总是使用 elseif.)

控制语句的关键词与左边括号之间应该有一个空格,以此来与函数调用进行区分。

即使在大括号是可选的情况下,也应当总是使用大括号。这样可以加强代码的可读性以及减少因嵌套带来的逻辑错误。

switch 语句结构示例:

switch (condition) {
  case 1:
    action1;
    break;

  case 2:
    action2;
    break;

  default:
    defaultaction;
}

do-while 语句结构示例:

do {
  actions;
} while ($condition);

行长度与封装(Line length and wrapping)

  • 通常情况下,每行代码的长度不应超过80个字符
  • 以下情况,行长度可超过80个字符:当行内包含过长的函数名称、函数/类定义、变量声明等
  • 为方便阅读和理解,控制结构的行长度可超过80个字符
      if ($something['with']['something']['else']['in']['here'] == 
    mymodule_check_something($whatever['else'])) {
        ...
      }
      if (isset($something['what']['ever']) && $something['what']['ever'] > $infinite 
    && user_access('galaxy')) {
        ...
      }
      // Non-obvious conditions of low complexity are also acceptable, but should
      // always be documented, explaining WHY a particular check is done.
      if (preg_match('@(/|\\)(\.\.|~)@', $target) && strpos($target_dir, $repository) 
    !== 0) {
        return FALSE;
      }
      
  • 控制条件(condition)不应该写作多行
  • 控制条件应该适当拆分以便于阅读和理解,编写代码时要避免以下情形:
    // DON'T DO THIS!
    if ((isset($key) && !empty($user->uid) && $key == $user->uid) || (isset($user-
    >cache) ? $user->cache : '') == ip_address() || isset($value) && $value >= time()))
    {
      ...
    }
    

    将控制条件进行拆分,不仅便于阅读,同时也方便添加注释让人知道为何进行这样的条件判断

    // Key is only valid if it matches the current user's ID, as otherwise other
    // users could access any user's things.
    $is_valid_user = (isset($key) && !empty($user->uid) && $key == $user->uid);
    
    // IP must match the cache to prevent session spoofing.
    $is_valid_cache = (isset($user->cache) ? $user->cache == ip_address() : FALSE);
    
    // Alternatively, if the request query parameter is in the future, then it
    // is always valid, because the galaxy will implode and collapse anyway.
    $is_valid_query = $is_valid_cache || (isset($value) && $value >= time());
    
    if ($is_valid_user || $is_valid_query) {
      ...
    }
    

函数调用(Function Calls)

调用函数时,函数名与左括号之间没有空格,除最后一个参数外,每个参数后的 , 都应跟上一个空格,如:

$var = foo($bar, $baz, $quux);

如之前所说,等号两边应该各有一个空格。当有一系列相关语句时,出于可读性的考虑,可以适当增加空格的数量,如:

$short         = foo($bar);
$long_variable = foo($baz);

函数声明(Function Declarations)

包含默认值的参数应当放在最后,当函数拥有返回值时,尽量返回便于理解的值:

function funstuff_system($field) {
  $system["description"] = t("This module inserts funny text into posts randomly.");
  return $system[$field];
}

类构造器调用(Class Constructor Calls)

当调用不带参数的类构造器时,始终包含括号

$foo = new MyClassName();

带参数的类构造器

$foo = new MyClassName($arg1, $arg2);

如果使用变量做为类名,需先为变量赋值,然后才调用类构造器:

$bar = 'MyClassName';
$foo = new $bar();
$foo = new $bar($arg1, $arg2);

数组(Array)

数组的值之间应使用空格分隔,赋值操作符号(=>)左右也应包含空格:

$some_array = array('hello', 'world', 'foo' => 'bar');

当声明数组的字符长度超过80个字符(通常在构造表单和菜单时),应该将各元素分行、缩进编写:

$form['title'] = array(
  '#type' => 'textfield',
  '#title' => t('Title'),
  '#size' => 60,
  '#maxlength' => 128,
  '#description' => t('The title of your node.'),
);

注意:最后一个数组元素末尾有一个逗号,这并不是手误,而是避免有新元素加入到最后之后因缺少逗号而出现解析错误。(从某种程度上来讲,在最后一个数组元素末尾加上逗号是一种推荐的做法,甚至在向drupal.org提交代码时,一些代码规范检测脚本会因为最后一个元素没有添加逗号而出现警告提示。)

引号(Quotes)

Drupal 对于单引号和双引号的使用并没有很强硬的标准,只需在同一模块内保持用法的统一即可。

使用单引号的效率要高于双引号,因为解析器不需要到引号之间查找变量。以下是使用双引号的两种情况:

  • 引号中间带有变量,如"<h2>$header</h2>"
  • 引号中间带有单引号,使用双引号可避免对单引号的转义 "He's a good person." 当然也可以使用单引号,但 .pot 解析器不能很好的处理这种情况,而且看起来怪怪的'He\'s a good person.'

字符串连接(String Concatenations)

在点与要连接字符串之间需要加入空格以加强代码可读性:

 

如果只是简单地连接变量,可以使用双引号

 

使用连接赋值符(.=)时,需要在符号两侧预留空格

 

注释(Comment)

注释规范单独在 Doxygen及注释格式规范页面 讨论

引入代码(Including Code)

任何无条件引用文件的情况下,使用 require_once(), 任何有条件引用文件的情况,则使用 include_once(). 这两条语句都会保证文件只被引入一次。

当从当前目录或子目录引入代码时,始终以点路径开头

include_once ./includes/mymodule_formatting.inc

在 Drupal 7 及更新版本中,使用 DRUPAL_ROOT 常量:

require_once DRUPAL_ROOT . '/' . variable_get('cache_inc', 'includes/cache.inc');

PHP 代码标签(PHP Code Tags)

始终使用<?php ?>来界定PHP代码而不使用要<? ?>。这是为了遵循Drupal规范,同时也便于代码在其它系统和平台中被引用。

自 Drupal 4.7 开始,最后的 ?> 都故意被忽略不写,原因如下:

  • 移除它可以避免在文件末尾出现空白字符,这些空白字符可能导致“文件头已发送(header already sent)”错误,XHTML/XML验证错误,及其它问题
  • PHP 官方说明 结尾的PHP界定符是可选项
  • PHP.net 自身也移除了文件末尾的界定符(如 prepend.inc

分号(Semicolons)

PHP 语言要求除了代码块以外,大多数行尾都要跟上分号。Drupal 代码规范同样有此要求,并且对于代码块也是如此。以下是一个单行代码块的示例:

 -- YES
 -- NO

示例 URL(Example URL)

使用 example.com 表示所有示例 URLs

命名规范(Naming Conventions)

函数与变量(Functions and Variables)

函数与变量名称应该使用小写字母,且单词之间使用下划线分隔。函数应该使用模块组/模块名称作为前缀,以避免与不同模块间的冲突。

持久变量(Persistent Variables)

持久变量是指通过 variable_get()/variable_set() 函数取得和设置的变量,变量名称应该使用小写字母,且单词之间使用下划线进行分隔。持久变量也应该使用模块组/模块名称作为前缀,以避免与不同模块间的冲突。

常量(Constants)

  • 常量始终要求使用全大写字母,且单词之间使用下划线进行分隔。(包括PHP内置常量 TRUE, FALSE, NULL)
  • 模块中定义的常量需始终使用大写的模块名称作为前缀。
  • 在 Drupal 8 及之后,应使用 const 关键词代替 define() 函数来定义常量,因为效率更高
     

    注意 const 不能用于PHP表达式,因此在条件判断和非字面值(non-literal value ???)时,还是应当使用 define() 函数

     

全局变量(Global Variables)

定义全局变量时,应当使用下划线加模块/主题名称开头

类(Class)

类名应使用驼峰式命名(即单词首字母大写)

 

类中的方法(函数)和属性(成员变量)应使用首字母小写的驼峰式

 

定义访问权限时,使用 protected 而代替 private,从而其它的类可以在必要时扩展和更新方法。Protected 和 public 函数和变量不应以下划线开头。

更多关于 面向对象的编码规范

文件名(Filename)

所有文档文件都应加上 .txt 后缀,以便于 Windows 用户查看。同时,所有文件名称应该全部大写,而文件后缀应该全部小写。

如 README.txt, INSTALL.txt, TODO.txt, CHANGELOG.txt 等等。

辅助模块及工具

  • Coder 模块:可以遵循部分以上代码规范,对代码进行审查及修改建议
  • Drupal Code Sniffer :代码规范检测工具
  • PAReview.sh :还处理沙盒中的代码规范检测脚本,几乎严格遵守以上所有代码规范并给出修改建议。
Android进阶之路 - 代码规范 写一份好的代码,就像我们的脸面,所以代码规范必不可少,此乃修行必备之技 ~ 阅读详情

相关推荐

科技中介如何高效匹配技术供需?.docx

科技中介如何高效匹配技术供需?

< 知识拓展:前端代码规范

前端开发在日新月异的发展下,各式各样开箱即用的工具组件的出现,给开发人员带来便捷与高效,也给开发人员带来挑战与思考。 在开发过程中,一千个人之中有一千个哈姆雷特,也出现了一千份截然不同的代码,也就是人们常说的 `“ 千人千面 ”`。使得代码后期的`管理` 以及 `维护`带来困难。在此基础下,不同的团队在自身的环境下具体问题具体分析后制定出自己的一套`规范`,由此,展开了规范化在于项目过程中的重要性讨论。

一个平平无奇的技术宅 8143

!qhyb.rar

当 CAD 缺失对应字体时,图纸文字会显示异常,出现乱码、问号。将下载好的字体文件复制到 AutoCAD 的 Fonts 文件夹中,即可恢复正常显示。

代码规范利器-阿里代码规范插件

好的代码规范不管对自己还是对别人都很重要,毕竟大家都不想接手到各种难以读懂的代码。 今天跟大家介绍一下阿里代码规范插件的安装使用以及注意事项。 首先需要在线安装插件到Idea,可以直接在File-> Setteings->Plugins->Browse Repositories,在Browse Repositories搜索Alibaba,然后安装重启idea就安装完成了。 如果无法在线安装,另外也可以通过下载插件的方式离线安装。 ...

Java自学之路 4953

前端 ESlint 代码规范及修复代码规范错误

代码规范:一套写代码的约定规则。例如:赋值符号的左右是否需要空格?一句结束是否是要加分号?虽然不遵守这些代码规范并不会造成语法错误,但是一个团队中,我们通常希望各个团队成员的代码风格是统一的没有规矩不成方圆ESLint:是一个代码检查工具,用来检查你的代码是否符合指定的规则(你和你的团队可以自行约定一套规则)。在创建项目时,我们使用的是代码风格的规则。创建vue项目时可以添加ESLint代码检查工具。

lbcbjtlhmjq的博客 1292

前端代码规范

前端代码规范

勾勾的博客 1561

【C#语言】代码规范

在 C# 的标识符命名中,主要遵循两种命名风格:Pascal 命名法和 Camel 命名法。Pascal 命名法要求每个单词的首字母都大写,例如 “CustomerName”“OrderTotal”。这种命名法常用于类名、方法名、属性名、命名空间等,能够清晰地标识出不同的代码元素,增强代码的可读性和专业性。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1209

基于google升级版c++代码规范指南

有些团队所有成员写的代码都一致,10个人写的代码像1个人写的。正因为有代码规范,使得代码可读性强,方便代码review,利于后期维护。这体现了代码规范的重要性。接下来,在参考google的代码规范基础上,详细列举代码规范细节。

徐福记456 3万+

JavaScript 代码规范

遵循 JavaScript 代码规范是写出高质量代码的关键。通过本文所介绍的规范,我们强调了代码的可读性、可维护性和优雅性。良好的代码规范不仅有助于提升代码质量,还能提高团队协作效率,减少潜在的错误和冲突。代码规范并非一成不变的金科玉律,它随着技术的发展和团队的实践而不断演进。因此,作为开发者,我们应保持对最新编码标准和最佳实践的关注,不断学习和提升自己的编码能力。除了遵循代码规范外,我们还应该注重代码的性能优化和安全性。

Python老吕的博客 1335

政府科技管理部门如何实现科技成果高效转化?.docx

政府科技管理部门如何实现科技成果高效转化?

国有企业如何推动科技创新与产业升级融合?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

科技中介服务如何实现数字化升级?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

librdkafka Windows 包(可直接使用)

librdkafka/win ├─ bin/ # 全部运行时dll + pdb调试符号 + plugins插件目录 ├─ include/ # 头文件 rdkafka.h └─ lib/ # .lib静态导入库(链接阶段使用)

兄弟MFC-J2330DW 中文维修手册

兄弟MFC-J2330DW 中文维修手册

CesiumForUnitySamples-v1.25.1

Cesium for Unity 是一个官方插件,它将 Cesium 强大的3D 地理空间平台能力深度集成到了 Unity 引擎中。简单来说,它让你能在 Unity 里创建出一个高精度的真实地球,并加载和探索全球范围内的海量地理数据

政府科技管理部门如何降低平台建设成本?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

sam l part3 niubi666

sam l part3 niubi666

上一篇: 502 bad gateway是什么意思?502 bad gateway怎么解决!
下一篇: js 读取 cookie
yanfangphp
博客等级 码龄15年 126粉丝 126原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值