按键精灵官方吧 关注:200贴子:633
  • 3回复贴,共1

[神梦]【分享】按键精灵代码风格与规范大纲

只看楼主收藏回复

《前言》
为了让不太编码习惯的开发者更好的协助配合,并形成良好的基础编码规范与风格,整理了工作中常见的不规范操作,最终形成此按键精灵编码规范与风格。
【必须】:用户必须采用
【推荐】:用户理应采用,但如有特殊情况,可以不采用
【可选】:用户可参考,自行决定是否采用


IP属地:广东来自Android客户端1楼2022-09-25 22:03回复
    《一、编码风格》
    1. 缩进
      【必须】对于每级缩进,统一要求使用 [Tab] 键
      【必须】续行,要求使用括号等定限界符,并且需要垂直对齐
      【推荐】如果包含定界符(括号、中括号、大括号)的表达式跨越多行,那么定界符的括回符,可以放置与最后一行的非空字符对齐或者与构造多行的开始第一个字对齐。
      【推荐】对于会经常改动的函数参数、列表、字典定义,建议每一行一个元素,并且每行增加一个逗号
      【可选】对于 “if” 判断,同一行一般来说尽量不要放过多的判断条件。换行时增加一个 [Tab] 键
    2. 每行最大长度
      【必须】每行最多不超过 “120” 个字符,每行代码最大长度限制的根本原因是过长的行会导致阅读障碍,使得缩进失效。(注释中包含的URL除外)
    3. 空白符
      【必须】在表达式的赋值符号、操作符左右至少有一个空格
      【必须】禁止行尾空白。行尾空白虽然不会造成功能性异常,但是这些空白字符会被源码管理系统标记出来显示为差异,对开发人员造成困扰
    4. 操作符
      【推荐】按键精灵没有三目操作符,对于二目操作符来说,操作符允许在换行符之后出现。
    5. 括号
      【推荐】对于优先级高的判断条件用括号括起来,看起来更直观
    6. 空行
      【必须】模块中的一级函数和类定义之间,需要 “空两行”
      【必须】类中函数定义之间,“空一行”
      【必须】源文件须使用且仅使用 “一个换行符” 作为结尾
      【必须】通常每个语句应该独占一行
      【必须】可以在代码片段中 “空一行” 来区分不同业务逻辑块
    8. 模块引用(import)
      【必须】必须每个导入都独占一行
      【必须】导入应该放在文件顶部,位于模块注释之后,模块全局变量和常量之前
      【推荐】导入应该按照从最通用到最不通用的顺序分组,每个分组之间需 “空一行”:
          官方模块导入
          第三方模块导入
          自写模块导入
      【必须】禁止导入了模块却不使用它
    9. 注释
    > 有效的注释有助于帮助开发者更快地理解代码,模块,函数,子程序,以及行内注释的都有各自的风格。
      【必须】所有 “//” 开头的注释,必须与所在的代码块同级,并置放在代码之上
      【必须】所有 “'” 开头的注释,必须与代码同行,置放在代码尾部
      【必须】注释的每一行都应该以 “//” 或 “'” 加 “一个空格” 开头
      【必须】行内注释 “'” 与代码离开至少2个空格
      【必须】块注释 “/* */” :对于复杂的操作,可以放在代码之前写若干行注释;对于简单的代码,可以放在行内,与代码离开至少2个空格
      【必须】TODO 注释需要加上名字。TODO注释应该在所有开头处包含 “TODO” 字符串,紧跟着是用括号括起来的你的名字,email地址或者其他标识符,然后是一个可选的冒号,接着必须有一行注释,解释要做什么。
    10. 文档字符串(DocString)
      【推荐】需对外发布的 public 模块、函数、类、子程序等需要包含文档字符串。内部使用的方法,函数等,要求使用简单的注释描述功能。一个函数或子程序,如果可以直接被其他开发者使用,需要提供文档明确其含义,需要指出输入、输出、以及异常内容
      【必须】第一行应为文档名,空一行后,输入文档描述
      【推荐】在使用文档字符串时,推荐使用 reStructuredText 风格类型
    11. 类型注解
      【必须】按键精灵是动态语言,在运行时无需指定变量类型,虽然运行时不会执行函数与变量类型注解,但类型注解有助于阅读代码、重构。
      【必须】模块级变量、类和实例变量以及局部变量可以加个后缀 `[类型]` 来进行注解,类型:Bool、Int、Str、Cur、Date、Array、Object、Bytes
    12. 字符串
      【推荐】使用 “&” 进行字符串连接,避免用 “+” 进行字符串连接,可能会因类型不同导致出错
      【推荐】避免在循环中用 “&” 来累加字符串,由于字符串是不可变的,这样做会创建不必要的临时对象,并且导致指数级运行时间。作为代替方案,可以将每个字串加入数组,然后循环结束后用 “Join” 命令连接数组中的每个字串
    13. 命名
    > 模块名:module_name
    > 类名:ClassName
    > 函数名:function_name
    > 子程序名:sub_name
    > 全局变量名:GLOBAL_VAR_NAME
    > 局部变量名:instance_var_name
    > 函数参数名:function_parameter_name
      【推荐】避免使用单字符名称,计数器和迭代器除外
      【推荐】内部变量仅模块内部可用,或者,类内是保护或私有的,不能暴露在外部
      【推荐】用双下划线 “__” 开头的实例变量或方法表示类内私有
      【推荐】将相关的类和顶级函数放在同一个模块里
      【推荐】对类名使用大写字母开头的单词(ClassName)


    IP属地:广东2楼2022-09-25 22:04
    回复
      《二、编码规范》
      1. 三目运算符
        【必须】三目操作符判断,按键精灵不支持三目运算符,但是可使用如下方式,禁止使用复杂难懂的逻辑判断
      2. 条件表达式
        【推荐】函数或者子程序在没有返回时要明确返回 “Empty”
        【推荐】对于未知的条件分支或者不应该进入的分支,建议抛出异常,而不是返回一个值
        【可选】“if” 与 “else” 尽量一起出现,而不是全部都是 “if” 子句
      3. True/False 布尔运算
        【必须】不要用 “=” 与 “True”、“False” 进行布尔运算
      4. 变量
        【必须】禁止定义了变量却不使用它。即使没有使用,但是定义了变量仍然需要消耗资源


      IP属地:广东3楼2022-09-25 22:05
      回复
        《按键论坛原帖》
        http://bbs.anjian.com/showtopic-702325-1.aspx


        IP属地:广东4楼2022-09-25 22:05
        回复