I would know if we can declare a static var in a function, as we can do in JavaScript.
When I callback my function, my variable keep her last affectation.
Or can I only use global variable (it's not sexy...) ?
You can't use static in a function.
Global variables in Dart are no code smell because they are only library global.
Global variables in JavaScript are ugly because they can conflict with global variables from 3rd-party libraries.
This doesn't happen in Dart.
As you can make a library in Dart as small as you want (for example only one variable) and you have something similar to a namespace for a library when you import it like
import 'my_globals.dart' as gl;
and then use it like
print(gl.myGlobalValue);
this is no code smell.
You could also create a class to simulate a namespace like
class MyGlobals {
static myVal = 12345;
}
But library global variables are preferred in Dart instead of classes which contain only static variables or functions.
You can use a function object to maintain state:
library test;
class Test implements Function {
var status = 0;
static var static_status = 10;
call() {
print('Status: $status');
print('Static status: $static_status');
status++;
static_status++;
}
}
void main() {
var fun = new Test();
fun();
fun();
fun();
var fun2 = new Test();
fun2();
fun2();
fun2();
}
Output:
Status: 0
Static status: 10
Status: 1
Static status: 11
Status: 2
Static status: 12
Status: 0
Static status: 13
Status: 1
Static status: 14
Status: 2
Static status: 15
You can use only global variables.
Also you may solve this via private variables with "mangling" names.
void main() {
myFunction();
myFunction();
myFunction();
}
int _myFunction$count = 0;
void myFunction() {
print(_myFunction$count++);
}
This does not helps a lot but you can consider that variable with name "_myFunction$count" is a local static variable "count" in function "myFunction".
The same as this pseudo code.
void myFunction() {
static int count = 0;
print(count++);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With