当前位置: 首页 > news >正文

华为官方文档及OpenHarmony社区实践整理,涵盖ArkTS/TS代码风格、命名、注释、工程化检查等核心内容

一、通用原则

  1. 代码清晰优先:直白简单的逻辑比注释更有效。不要为了快速开发牺牲健壮性和可读性。

  2. 工具自动化:使用IDE自带格式化(Ctrl+Alt+L),保持空格、换行一致。

  3. 消灭魔鬼数字/字符串:所有业务含义的值(如状态码、银行代码)必须定义为常量:

    typescript

    // 不规范 if (transactionStatus == 1) { showMessage("交易成功"); } // 规范 const TRANSACTION_SUCCESS = 1; if (transactionStatus == TRANSACTION_SUCCESS) { showMessage("交易成功"); }
  4. 复用原则:代码复制三次以上,必须抽取为公共函数或组件。

  5. 分号规范:除build()函数外,所有语句必须以分号;结束。

二、命名规范

类型风格示例要求
类/接口/枚举/命名空间大驼峰 (UpperCamelCase)BankAccountManagerUserTypeBase64Utils类名是名词,避免DataInfo等模糊词;接口可用形容词+able
变量/方法/参数小驼峰 (lowerCamelCase)userNamecalculateInterest()isTransactionValid()方法名用动词/动词短语;布尔方法用is/has/can前缀
常量/枚举值全大写下划线 (CONSTANT_CASE)MAX_TRANSACTION_AMOUNT表达完整语义
文件命名.ets/.ts:大驼峰
.js:小驼峰
Index.etsEntryAbility.etsindex.js资源文件可用小驼峰或snake_case

关键禁忌:避免拼音、无意义缩写(如accaccount);禁止使用系统关键字(如onClickpadding)作为变量名;避免否定布尔变量(如isNoErrorisError)。

三、格式规范

  1. 缩进:只用空格,推荐2个空格缩进,禁用Tab键。

  2. 行宽:不超过120个字符。

  3. 大括号ifforwhile等语句即使只有一行也必须使用大括号。

    typescript

    // 不规范 if (condition) console.log('success'); // 规范 if (condition) { console.log('success'); }
  4. 空格规则

    • 关键字(if/for)与括号间加空格;函数名与括号间不加空格。

    • 二元操作符前后加空格;逗号后加空格。

    • else与前面}之间加空格。

  5. 变量声明:每行只声明一个变量,禁止let a=1, b=2;

四、注释规范

  1. 好代码自解释:不言自明的方法/变量不需要注释,不要翻译命名。

  2. 复杂逻辑必加:说明"为什么"而非"是什么"(如复利计算的特殊公式)。

  3. JSDoc/ArkTSDoc:使用/** */格式为类、函数、参数添加说明,配合IDE生成智能提示。

    typescript

    /** * 计算理财产品利息(复利方式,节假日不计息) * @param principal 本金 * @param dailyRate 日利率 * @returns 总利息 */ function calculateInterest(principal: number, dailyRate: number): number { ... }

五、代码结构限制

指标限制处理方式
函数行数≤80行超过则拆分多个子函数
嵌套深度≤4层使用提前返回(Guard Clauses)减少嵌套
重复代码3行×3次 或 5行×2次必须抽取复用

示例:减少嵌套(提前返回)

typescript

// 不规范:5层嵌套 function check(transaction) { if (transaction.isValid) { if (transaction.amount > 0) { if (transaction.targetAccount?.isActive) { return true; } } } return false; } // 规范:提前返回 function check(transaction) { if (!transaction.isValid) return false; if (transaction.amount <= 0) return false; if (!transaction.targetAccount?.isActive) return false; return true; }

六、Lint工具落地

"没有Lint的规范只是建议,有了Lint的规范才是规则。"

在项目中配置ESLint自动检查,核心配置项包括:

javascript

// .eslintrc.arkts.js 核心规则示例 module.exports = { parser: '@typescript-eslint/parser', extends: ['@typescript-eslint/recommended'], rules: { 'indent': ['error', 2], // 2空格缩进 'semi': ['error', 'always'], // 必须分号 'max-len': ['warn', { code: 120 }], // 行宽120 'max-depth': ['warn', { max: 4 }], // 嵌套≤4层 'complexity': ['warn', { max: 15 }], // 圈复杂度≤15 '@typescript-eslint/no-explicit-any': 'error', // 禁用any '@typescript-eslint/prefer-optional-chain': 'error', // 使用可选链 }, };

具体配置可参考@hw-stylistic规则集,以及@typescript-eslint推荐配置。

七、异常处理规范

场景规范示例
API参考示例不加异常处理,保持简洁直接调用API,不添加.catch()try-catch
开发指南/实际应用必须加异常处理使用try-catch捕获同步异常,.catch()捕获Promise异常,并导入BusinessError获取错误码

开发指南示例

typescript

import { BusinessError } from '@kit.BasicServicesKit'; // 异步场景 doSthAsync().catch((err: BusinessError) => { console.error(`Failed. Code: ${err.code}, message: ${err.message}`); }); // 同步场景 try { doSthSync(); } catch (error) { const err: BusinessError = error as BusinessError; console.error(`Failed. Code: ${err.code}`); }

八、补充要点

  1. UI组件属性:宽高、字号等数字属性不加单位(vp/fp/px),系统自动处理:.width(100)而非.width('100vp')

  2. 导入别名:依赖包的别名应与包名空间一致,避免自定义缩写。

  3. 参考来源:官方完整规范见[OpenHarmony ArkTS编程规范]、[示例代码风格指南]以及[各语言编程规范]。

http://www.jsqmd.com/news/1185172/

相关文章:

  • 【AI智能问数】技术全景:从NL2SQL到五引擎混合的十年演进
  • FModel实战指南:UE5游戏资源解包与逆向工程全流程解析
  • C++访问控制:public、private、protected的封装艺术与工程实践
  • linux系统rocky的安装+显卡驱动的安装
  • 每秒百万条日志入库:十亿级用户行为实时数据分析平台架构落地
  • 源代码论文分享|车辆管理系统设计与实现!
  • Unity网络通信实战:SocketIOUnity集成、多线程处理与移动端优化指南
  • 从NOIP P1199三国游戏解析博弈论贪心策略与图论建模
  • 遗传算法工程化实战:收敛性、编码与适应度设计核心陷阱
  • Unity Addressable系统配置实战:从Profile到CCD的完整避坑指南
  • 线性回归实战:用价格弹性与销售建模驱动业务决策
  • 边缘计算中实现每秒超50万次量子安全密钥生成的核心架构与优化实践
  • SVN安装
  • 用Plotly做国际象棋数据交互式分析
  • Unity资源依赖分析与GUID工具开发实战
  • 【服装AI质检】离线抽检 vs 在线全检,如何选择?
  • 24位ΔΣ ADC与STM32的高精度数据采集系统设计
  • 三方IM聊天软件定制开发,助力企业打造专属通讯平台#灰鲸IM #极光鸟IM
  • 3D高斯泼溅网页查看器:照片级真实感渲染技术解析
  • Meta CTO 自爆Llama 4掉队真相:为了让Llama 3强行出头,我们亲手“废了”自己的后路
  • Playwright精准截图实战:从原理到企业级自动化方案
  • C++对象内存实时监控:构建非侵入式内存分析工具
  • TPS61170与PIC18F46K20构建数字可调高压电源方案
  • 游戏道具制作全流程:从Blender建模到Unity集成的实战指南
  • CBAM注意力模块实战:从论文解读到PyTorch代码复现与性能分析
  • HarmonyOS7 限制长度输入框:用 maxLength 把输入限制做得更顺手
  • 亲身到店探访上海宝珀官方售后服务中心|最新网点地址与24小时售后热线(2026年7月最新) - 宝珀官方售后服务中心
  • AI视频生成Prompt工程:从能看走向能用的关键技巧
  • 基于置信度校准与增量推理的任务专用多模态问答智能体(QANTA 2026竞赛方案)
  • Go 函数:多返回值、错误处理与一等公民