docs-v2/content/flux/v0/spec/statements.md

94 lines
2.4 KiB
Markdown

---
title: Statements
description: Statements control execution in the Flux functional data scripting language.
menu:
flux_v0_ref:
parent: Flux specification
name: Statements
weight: 112
aliases:
- /influxdb/v2/reference/flux/language/statements/
- /influxdb/cloud/reference/flux/language/statements/
---
A _statement_ controls execution.
```js
Statement = [ Attributes ] StatementInner .
StatementInner = OptionAssignment
| BuiltinStatement
| VariableAssignment
| ReturnStatement
| ExpressionStatement
| TestcaseStatement .
```
## Return statements
A terminating statement prevents execution of all statements that appear after it in the same block.
A return statement is a terminating statement.
```
ReturnStatement = "return" Expression .
```
## Expression statements
An _expression statement_ is an expression where the computed value is discarded.
```
ExpressionStatement = Expression .
```
##### Examples of expression statements
```js
1 + 1
f()
a
```
#### Testcase statements
A _testcase_ statement defines a test case.
{{% note %}}
Testcase statements only work within the context of a Flux development environment.
{{% /note %}}
```js
TestcaseStatement = "testcase" identifier [ TestcaseExtention ] Block .
TestcaseExtention = "extends" string_lit
```
Test cases are defined as a set of statements with special scoping rules.
Each test case statement in a file is considered to be its own main package.
In effect, all statements in package scope and all statements contained within
the test case statement are flattened into a single main package and executed.
Use the `testing` package from the standard library to control the pass failure
of the test case.
Test extension augments an existing test case with more statements or attributes.
A special function call, `super()`, must be made inside the body of a test case
extension. All statements from the parent test case will be executed in its place.
##### Basic testcase for addition
```js
import "testing"
testcase addition {
testing.assertEqualValues(got: 1 + 1, want: 2)
}
```
##### Example testcase extension to prevent feature regression
```js
@feature({vectorization: true})
testcase vector_addition extends "basics_test.addition" {
super()
}
```
{{< page-nav prev="/flux/v0/spec/packages/" next="/flux/v0/spec/side-effects/" >}}