Leo 语言开发规范总结

一、代码布局规范

1. 缩进要求

  • 每级缩进使用 4 个空格。

  • 不推荐使用制表符(Tab)。

2. 空行使用规则

  • 顶层声明之间(如 transitionfunctionstructrecordmapping)需要用单个空行分隔。

  • import 语句之间可以选择性地使用单个空行分隔。

  • 文件顶部的最后一个 import 语句后应该跟一个空行。

3. 文件结构顺序

按照以下顺序组织文件内容:

  1. 导入语句(Imports)

  2. 程序声明(Program declaration)

  3. 映射(Mappings)

  4. 记录和结构体(Records + Structs)

  5. 函数和转换(Functions + Transitions)

二、命名规范

各类型命名方式如下:

  • 包名:使用 snake_case(推荐使用单个词)。

  • 结构体和记录:使用 CamelCase

  • 结构体和记录成员:使用 snake_case

  • 函数名:使用 snake_case

  • 函数参数:使用 snake_case

  • 变量名:使用 snake_case

  • 输入参数:使用 snake_case

三、语法规范

1. 大括号使用

  • 开括号总是与声明在同一行,不要将开括号放在新行。

2. 分号使用

  • 每个语句(包括 return 语句)都必须以分号结束,保持语句结束的一致性。

3. 逗号使用

  • 当结束定界符出现在单独一行时,应包含尾随逗号,以提高代码的可维护性和可读性。

四、条件分支处理

推荐做法

  • 使用三元表达式而不是 if-else 语句,可以更好地控制电路大小和效率。

原因解释

  • Leo 编译器会将 transitions 中的 if-else 语句重写为三元表达式序列,因为底层电路构造不支持分支操作。

  • 三元表达式是最经济的条件形式,可以在评估条件之前解析第一个和第二个表达式的值。

性能影响

  • 使用 if-else 会导致电路创建分支,每个分支都需要完整评估,条件内的每个计算成本都会翻倍。这会显著增加约束数量并降低电路效率。

代码示例

  • 不推荐

    if (condition) {
        return a;
    } else {
        return b;
    }
    
  • 推荐

    return condition ? a : b;
    

五、最佳实践建议

1. 代码组织

  • 保持代码结构清晰,遵循文件元素的标准顺序,使用一致的命名约定。

2. 性能优化

  • 优先使用三元表达式,避免不必要的条件分支,注意控制电路大小。

3. 可维护性

  • 保持代码格式的一致性,适当使用空行增加可读性,遵循标准的命名规范。


这些规范和最佳实践可以帮助开发者编写更高效、更易维护的 Leo 代码,同时确保生成的电路具有最佳性能。