每级缩进使用 4 个空格。
不推荐使用制表符(Tab)。
顶层声明之间(如
transition、function、struct、record和mapping)需要用单个空行分隔。import语句之间可以选择性地使用单个空行分隔。文件顶部的最后一个
import语句后应该跟一个空行。
按照以下顺序组织文件内容:
导入语句(Imports)
程序声明(Program declaration)
映射(Mappings)
记录和结构体(Records + Structs)
函数和转换(Functions + Transitions)
各类型命名方式如下:
包名:使用
snake_case(推荐使用单个词)。结构体和记录:使用
CamelCase。结构体和记录成员:使用
snake_case。函数名:使用
snake_case。函数参数:使用
snake_case。变量名:使用
snake_case。输入参数:使用
snake_case。
开括号总是与声明在同一行,不要将开括号放在新行。
每个语句(包括
return语句)都必须以分号结束,保持语句结束的一致性。
当结束定界符出现在单独一行时,应包含尾随逗号,以提高代码的可维护性和可读性。
使用三元表达式而不是
if-else语句,可以更好地控制电路大小和效率。
Leo 编译器会将
transitions中的if-else语句重写为三元表达式序列,因为底层电路构造不支持分支操作。三元表达式是最经济的条件形式,可以在评估条件之前解析第一个和第二个表达式的值。
使用
if-else会导致电路创建分支,每个分支都需要完整评估,条件内的每个计算成本都会翻倍。这会显著增加约束数量并降低电路效率。
不推荐:
if (condition) { return a; } else { return b; }推荐:
return condition ? a : b;
保持代码结构清晰,遵循文件元素的标准顺序,使用一致的命名约定。
优先使用三元表达式,避免不必要的条件分支,注意控制电路大小。
保持代码格式的一致性,适当使用空行增加可读性,遵循标准的命名规范。
这些规范和最佳实践可以帮助开发者编写更高效、更易维护的 Leo 代码,同时确保生成的电路具有最佳性能。
