英文:
In Cadence smart contract programming language, what distinguishes pre/post conditions from assert statements?
问题
预条件和后置条件被视为纯条件,因为它们禁止任何状态的改变操作。同样,断言语句也不允许状态的改变操作。
然而,这两者之间仍然存在一个关键区别。作为开发人员,重要的是要理解在给定函数的情况下,预条件和后置条件何时比断言语句更适合。是否有任何与燃气、可访问性或其他因素相关的影响需要考虑?
英文:
Pre and post-conditions are considered pure conditions, as they prohibit any state mutative operations. Similarly, assert statements also do not allow state mutative operations.
However, there remains a key distinction between the two. As a developer, it is important to understand the circumstances under which pre/post conditions are more suitable than assert statements for a given function. Are there any implications on gas, accessibility, or other factors to consider?
答案1
得分: 3
条件和断言有一些相似之处,但也有一些不同之处:
- 条件和断言都评估一个表达式,并在条件为假时中止执行。
- 目前,条件和断言都可以是不纯的。在即将发布的 Stable Cadence 版本中,条件必须是“视图”(请参阅 https://forum.onflow.org/t/another-update-on-stable-cadence/3715)。
- 条件是声明性的,并允许轻松声明函数期望的内容(前置条件)和函数保证的内容(后置条件)。
- 断言可以出现在函数的任何地方,而条件只能是前置条件或后置条件,即在函数的开始或结束执行。
- 后置条件在函数的每个退出点执行。确保在函数有多个退出点时,在每个退出点执行断言通常会导致代码重复。
- 后置条件可以使用特殊的
before(...)
函数引用函数开始时的表达式值。 - 条件可以出现在接口中!这允许为接口的所有实现建立要求。请参阅 https://en.wikipedia.org/wiki/Design_by_contract。
英文:
Conditions and assertions have some similarities, but also some differences:
- Both conditions and assertions evaluate an expression and abort execution if the condition is false
- Currently, both conditions and assertions may have be impure. In the upcoming Stable Cadence release, conditions have to be "view" (see https://forum.onflow.org/t/another-update-on-stable-cadence/3715)
- Conditions are declarative, and allows the easy declaration of what the function expects (pre-condition) and what the function guarantees (post-condition).
- Assertions may appear at any point in the function, whereas conditions may only be pre or post conditions, i.e. are executed at the beginning or end of the function
- Post conditions are executed at every exit point of a function. Ensuring an assertion is executed at every exit point, when the function has multiple exit points, often leads to code duplication.
- Post conditions may refer to values of expressions at the beginning of the function using the special
before(...)
function - Conditions may appear in interfaces (!). This allows the establishment of requirements for all implementations of the interface. See https://en.wikipedia.org/wiki/Design_by_contract
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论