You can access the value of an expression inside a string by using ${expression}
.
var greeting = "Hello";
var person = "Rohan";
print("${greeting}, ${person}!"); // prints "Hello, Rohan!"
If the expression is an identifier, the {}
can be skipped.
print("$greeting, $person");
If the variable inside the {}
isn’t a string, the variable’s toString()
method is called:
int x = 5;
print("There are ${x.toString()} people in this room");
The call to toString()
is unnecessary (although harmless) in this case: toString()
is already defined
for ints and Dart automatically calls toString()
. What this does mean, though, is that it is the user’s
responsibility to define a toString()
method when interpolating user-defined objects.
You can interpolate expressions of arbitrary complexity by placing them inside ${}
:
A ternary if..else
:
int x = 5;
print("There are ${x < 10 ? "a few" : "many"} people in this room");
List and Map operations:
List list = [1, 2, 3, 4, 5];
print("The list is $list, and when squared it is ${list.map((i) {return i * i;})}");
// The list is [1, 2, 3, 4, 5], and when squared it is [1, 4, 9, 16, 25]
Map map = {"ca": "California", "pa": "Pennsylvania"};
print("I live in sunny ${map['ca']}");
// I live in sunny California
Notice above that you can access $list
(an identifier) without using {}
, but the call to list.map
(an expression)
needs to be inside {}
. Similarly, in the example below, $x
works, but {}
are required for -x
:
print("x = $x and -x = ${-x}");
// x = 5 and -x = -5
Expressions inside ${}
can be arbitrarily complex:
List names = ['John', 'Sophena', 'Henrietta'];
print("${
((names) {
return names[(new math.Random()).nextInt(names.length)];
})(names)} is the most valueable member of our team");
The code above defines an anonymous function to pick a random name from a list and then calls that function with
names
as an argument. All of this is done as part of string interpolation.
Creating a function and immediately calling it is useful in a lot of situations (it is a common practice in Javascript); but, watch out: doing this sort of thing can lead to hard to maintain code. An abudance of caution is advised ;)