# Leo 语言开发规范总结

By [Yaakov](https://paragraph.com/@yaakov) · 2024-10-30

---

一、代码布局规范
--------

### 1\. 缩进要求

*   每级缩进使用 4 个空格。
    
*   不推荐使用制表符（Tab）。
    

### 2\. 空行使用规则

*   顶层声明之间（如 `transition`、`function`、`struct`、`record` 和 `mapping`）需要用单个空行分隔。
    
*   `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 代码，同时确保生成的电路具有最佳性能。

*   [Aleo Twitter](https://twitter.com/aleohq)
    
*   [Aleo Discord](https://discord.gg/aleo)
    
*   [Aleo 官网](https://www.aleo.org/)

---

*Originally published on [Yaakov](https://paragraph.com/@yaakov/leo-5)*
