您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

团队写代码,为什么要遵循coding guideline?

时间:2023-05-25 13:53:59  来源:  作者:云联壹云

最近我在思考这样一个问题,顺便看一下gpt对这个问题的解释。搜索发现:

团队写代码,为什么要遵循coding guideline?

1. 一致性:编码准则确保整个团队的代码风格和格式是一致的,这使得团队成员之间更易于交流和协作。这也使得代码更容易维护和更新,因为其他人可以更轻松地理解代码。

2. 可读性:编码准则有助于提高代码的可读性。通过对代码进行格式化和注释,代码会更易于阅读和理解,从而减少错误和缺陷,并提高代码的质量。

3. 可维护性:编码准则有助于提高代码的可维护性。通过使用一致的格式和风格,团队成员可以更轻松地理解代码,并进行更快速的故障排除和修复。

4. 代码质量:编码准则有助于提高代码的质量。通过要求团队成员编写可读性高、可维护性强的代码,编码准则可以确保代码更加健壮、可靠和安全。这也有助于减少代码缺陷和错误,提高代码的可靠性和可用性。

5. 代码重用:编码准则有助于提高代码的重用性。通过编写符合标准的代码,团队成员可以更容易地将代码重用在其他项目中,从而提高生产力和效率。

继续搜索:

对于一个使用bash为主要语言的项目,业界推荐的coding guideline?

1. 使用有意义的变量名:变量名应该具有描述性,以便其他人可以轻松地理解代码。

2. 缩进:使用4个空格作为缩进,而不是制表符。

3. 注释:对代码进行注释,以解释代码的目的和功能。注释应该清晰、简洁,并且易于阅读。

4. 函数:编写短小精悍的函数,每个函数都应该具有一个特定的目的。函数应该使用有意义的名称,并且应该清晰地描述其目的和功能。

5. 错误处理:在代码中包含错误处理,以确保代码在遇到错误时不会崩溃或产生不可预测的结果。

6. 使用双引号:在引用变量时,使用双引号而不是单引号,以确保变量扩展能够正常工作。

7. 使用全局变量:尽量避免使用全局变量,因为它们很难调试和维护。

8. 使用命令替换:使用$()语法而不是反引号 ``来执行命令替换。

9. 使用数组:使用数组来管理相关变量,而不是使用多个单独的变量。

10. 使用“set -u”:使用“set -u”来检查未定义的变量,以避免在引用未定义的变量时产生错误。

这些规范有助于提高 Bash 代码的可读性、可维护性和可靠性。

然后我搜索 "bash script style guideline",最上面的结果是:

即代码规范:https://google.Github.io/styleguide/shellguide.html

我仔细阅读了这份风格指南,对其中的“局部变量”的章节很感兴趣。

文中说:「最好把局部变量的定义与赋值,换行实现,不要写到同一行上」,以免掩盖报错状态码。

原文:https://google.github.io/styleguide/shellguide.html#use-local-variables

Declare function-specific variables with local. Declaration and assignment should be on different lines.
Ensure that local variables are only seen inside a function and its children by using local when declaring them. This avoids polluting the global name space and inadvertently setting variables that may have significance outside the function.
Declaration and assignment must be separate statements when the assignment value is provided by a command substitution; as the local builtin does not propagate the exit code from the command substitution.

我动手验证这个细节,发现果然如此:

然后我开始自查当前的项目,寻找类似于如下风格的代码:

local my_var="$(my_func)"

优化后的预期结果:

local my_var
my_var="$(my_func)"

在 https://regex101.com/ 测试代码的运行。给出范例

regex:
local fn=$(echo $name_ver| tr ':' '-').tar.xz
test string
local fn=$(echo $name_ver| tr ':' '-').tar.xz #普通
local fn=$(echo $name_ver| tr ':' '-').tar.xz # 模拟多个空格
local fn=$(echo $name_ver| tr ':' '-').tar.xz # 模拟tab缩进
local fn="$(echo $name_ver| tr ':' '-').tar.xz" # 模拟带引号的变量声明

测似乎生成的代码

$1local $2n$1$2=$3

生成的代码

$re = '/^(s*)locals+(w+)=("?$(.*)/m';
$str = ' local fn=$(echo $name_ver| tr ':' '-').tar.xzt
local fn=$(echo $name_ver| tr ':' '-').tar.xzt
local fn=$(echo $name_ver| tr ':' '-').tar.xz
local fn="$(echo $name_ver| tr ':' '-').tar.xz"';
$subst = "$1local $2n$1$2=$3";
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;

精简为 perl_oneliner:

perl -pe 's/^(s*)locals+(w+)=("?$(.*)/$1local $2n$1$2=$3/g' -i file.txt

测试的场景:

搜索代码

pcregrep -lr '^(s*)locals+(w+)=("?$(.*)' *

批量修正:

perl -pi -e 's#^(s*)locals+(w+)=("?$(.*)#$1local $2n$1$2=$3#' $(pcregrep -l -r '^(s*)locals+(w+)=("?$(.*)' * )

修正之后,仔细阅读diff,检验效果,发现符合预期。

后续:增加git hook检测代码

为了让以后新增的代码,也都符合上述规范,我增加了这样一个 pre-commit脚本。这样,每次提交之前,它都会帮我确保代码合规。

同时,我在编辑器里,设置了shfmt、shellcheck之类的规范,并设置为format on save,即保存时自动格式化,来自动处理格式问题。

# test code
if ! grep -wq 'Code violates rules' .git/hooks/pre-commit; then
cat >> .git/hooks/pre-commit <<'GIT_PRE_COMMIT_EOF'
#!/usr/bin/env bash
if find . -name '*.sh'| xargs pcregrep '^s+locals+w+="?(`|$()'; then
echo "Error: Code violates rules"
echo 'use: local var'
echo 'var="$(...")'
echo 'instead of local var=``'
echo 'or local var="$(...)"'
echo 'as of explAIned in https://google.github.io/styleguide/shellguide.html'
exit 1
fi
GIT_PRE_COMMIT_EOF
chmod +x .git/hooks/pre-commit
fi

总结:

  • 寻找业界规范
  • 遵循规范
  • 修改过去不合规范的代码
  • 新增代码确保合规
  • 将代码的规范检查,加入到日常的流程里。(goimport check)
  • 越早做,历史包袱越少。越晚做,历史包袱越沉重。
  • related PR: https://git.yunion.io/projects/CLOUD/repos/yunion-build/pull-requests/1355/diff#main.sh

links

  • Checks · koalaman/shellcheck Wiki:https://github.com/koalaman/shellcheck/wiki/Checks
  • ShellCheck - A shell script static analysis tool:https://chromium.googlesource.com/chromiumos/third_party/shellcheck/+/HEAD/README.md
  • styleguide | Style guides for Google-originated open-source projects*:https://google.github.io/styleguide/shellguide.html
  • regex101: build, test, and debug regex:https://regex101.com/

以上是文章的主要内容,作为融合云/多云管理/私有云/FinOps 厂商,云联壹云会持续关注这些领域的动态,分享相关的信息和技术,可以通过的官网(https://www.yunion.cn/)或关注的公众号(云联壹云)来获取最新的信息,感谢大家的时间。

原文地址:https://www.yunion.cn/article/html/20230524.html



Tags:coding guideline   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
团队写代码,为什么要遵循coding guideline?
最近我在思考这样一个问题,顺便看一下gpt对这个问题的解释。搜索发现:团队写代码,为什么要遵循coding guideline?1. 一致性:编码准则确保整个团队的代码风格和格式是一致的,这使得...【详细内容】
2023-05-25  Search: coding guideline  点击:(289)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(6)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(13)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(9)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(11)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(9)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条