日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

最近我在思考這樣一個(gè)問(wèn)題,順便看一下gpt對(duì)這個(gè)問(wèn)題的解釋。搜索發(fā)現(xiàn):

團(tuán)隊(duì)寫代碼,為什么要遵循coding guideline?

1. 一致性:編碼準(zhǔn)則確保整個(gè)團(tuán)隊(duì)的代碼風(fēng)格和格式是一致的,這使得團(tuán)隊(duì)成員之間更易于交流和協(xié)作。這也使得代碼更容易維護(hù)和更新,因?yàn)槠渌丝梢愿p松地理解代碼。

2. 可讀性:編碼準(zhǔn)則有助于提高代碼的可讀性。通過(guò)對(duì)代碼進(jìn)行格式化和注釋,代碼會(huì)更易于閱讀和理解,從而減少錯(cuò)誤和缺陷,并提高代碼的質(zhì)量。

3. 可維護(hù)性:編碼準(zhǔn)則有助于提高代碼的可維護(hù)性。通過(guò)使用一致的格式和風(fēng)格,團(tuán)隊(duì)成員可以更輕松地理解代碼,并進(jìn)行更快速的故障排除和修復(fù)。

4. 代碼質(zhì)量:編碼準(zhǔn)則有助于提高代碼的質(zhì)量。通過(guò)要求團(tuán)隊(duì)成員編寫可讀性高、可維護(hù)性強(qiáng)的代碼,編碼準(zhǔn)則可以確保代碼更加健壯、可靠和安全。這也有助于減少代碼缺陷和錯(cuò)誤,提高代碼的可靠性和可用性。

5. 代碼重用:編碼準(zhǔn)則有助于提高代碼的重用性。通過(guò)編寫符合標(biāo)準(zhǔn)的代碼,團(tuán)隊(duì)成員可以更容易地將代碼重用在其他項(xiàng)目中,從而提高生產(chǎn)力和效率。

繼續(xù)搜索:

對(duì)于一個(gè)使用bash為主要語(yǔ)言的項(xiàng)目,業(yè)界推薦的coding guideline?

1. 使用有意義的變量名:變量名應(yīng)該具有描述性,以便其他人可以輕松地理解代碼。

2. 縮進(jìn):使用4個(gè)空格作為縮進(jìn),而不是制表符。

3. 注釋:對(duì)代碼進(jìn)行注釋,以解釋代碼的目的和功能。注釋應(yīng)該清晰、簡(jiǎn)潔,并且易于閱讀。

4. 函數(shù):編寫短小精悍的函數(shù),每個(gè)函數(shù)都應(yīng)該具有一個(gè)特定的目的。函數(shù)應(yīng)該使用有意義的名稱,并且應(yīng)該清晰地描述其目的和功能。

5. 錯(cuò)誤處理:在代碼中包含錯(cuò)誤處理,以確保代碼在遇到錯(cuò)誤時(shí)不會(huì)崩潰或產(chǎn)生不可預(yù)測(cè)的結(jié)果。

6. 使用雙引號(hào):在引用變量時(shí),使用雙引號(hào)而不是單引號(hào),以確保變量擴(kuò)展能夠正常工作。

7. 使用全局變量:盡量避免使用全局變量,因?yàn)樗鼈兒茈y調(diào)試和維護(hù)。

8. 使用命令替換:使用$()語(yǔ)法而不是反引號(hào) ``來(lái)執(zhí)行命令替換。

9. 使用數(shù)組:使用數(shù)組來(lái)管理相關(guān)變量,而不是使用多個(gè)單獨(dú)的變量。

10. 使用“set -u”:使用“set -u”來(lái)檢查未定義的變量,以避免在引用未定義的變量時(shí)產(chǎn)生錯(cuò)誤。

這些規(guī)范有助于提高 Bash 代碼的可讀性、可維護(hù)性和可靠性。

然后我搜索 "bash script style guideline",最上面的結(jié)果是:

即代碼規(guī)范:https://google.Github.io/styleguide/shellguide.html

我仔細(xì)閱讀了這份風(fēng)格指南,對(duì)其中的“局部變量”的章節(jié)很感興趣。

文中說(shuō):「最好把局部變量的定義與賦值,換行實(shí)現(xiàn),不要寫到同一行上」,以免掩蓋報(bào)錯(cuò)狀態(tài)碼。

原文: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.

我動(dòng)手驗(yàn)證這個(gè)細(xì)節(jié),發(fā)現(xiàn)果然如此:

然后我開(kāi)始自查當(dāng)前的項(xiàng)目,尋找類似于如下風(fēng)格的代碼:

local my_var="$(my_func)"

優(yōu)化后的預(yù)期結(jié)果:

local my_var
my_var="$(my_func)"

在 https://regex101.com/ 測(cè)試代碼的運(yùn)行。給出范例

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 # 模擬多個(gè)空格
local fn=$(echo $name_ver| tr ':' '-').tar.xz # 模擬tab縮進(jìn)
local fn="$(echo $name_ver| tr ':' '-').tar.xz" # 模擬帶引號(hào)的變量聲明

測(cè)似乎生成的代碼

$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;

精簡(jiǎn)為 perl_oneliner:

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

測(cè)試的場(chǎng)景:

搜索代碼

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

批量修正:

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

修正之后,仔細(xì)閱讀diff,檢驗(yàn)效果,發(fā)現(xiàn)符合預(yù)期。

后續(xù):增加git hook檢測(cè)代碼

為了讓以后新增的代碼,也都符合上述規(guī)范,我增加了這樣一個(gè) pre-commit腳本。這樣,每次提交之前,它都會(huì)幫我確保代碼合規(guī)。

同時(shí),我在編輯器里,設(shè)置了shfmt、shellcheck之類的規(guī)范,并設(shè)置為format on save,即保存時(shí)自動(dòng)格式化,來(lái)自動(dòng)處理格式問(wèn)題。

# 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

總結(jié):

  • 尋找業(yè)界規(guī)范
  • 遵循規(guī)范
  • 修改過(guò)去不合規(guī)范的代碼
  • 新增代碼確保合規(guī)
  • 將代碼的規(guī)范檢查,加入到日常的流程里。(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/

以上是文章的主要內(nèi)容,作為融合云/多云管理/私有云/FinOps 廠商,云聯(lián)壹云會(huì)持續(xù)關(guān)注這些領(lǐng)域的動(dòng)態(tài),分享相關(guān)的信息和技術(shù),可以通過(guò)的官網(wǎng)(https://www.yunion.cn/)或關(guān)注的公眾號(hào)(云聯(lián)壹云)來(lái)獲取最新的信息,感謝大家的時(shí)間。

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

分享到:
標(biāo)簽:coding guideline
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定