String say(String from, String msg, [String device]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
return result;
}
assert(say('Bob', 'Howdy') == 'Bob says Howdy');
assert(say('Bob', 'Howdy', 'smoke signal') ==
'Bob says Howdy with a smoke signal');
/// Sets the [bold] and [hidden] flags ...
void enableFlags({bool bold = false, bool hidden = false}) {...}
// bold will be true; hidden will be false.
enableFlags(bold: true);
String say(String from, String msg,
[String device = 'carrier pigeon', String mood]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
if (mood != null) {
result = '$result (in a $mood mood)';
}
return result;
}
assert(say('Bob', 'Howdy') ==
'Bob says Howdy with a carrier pigeon');
/// 함수의 인수에 [addBy]를 더하는 함수를 반환한다.
Function makeAdder(num addBy) {
return (num i) => addBy + i;
}
void main() {
// 2를 더하는 함수를 만든다.
var add2 = makeAdder(2);
// 4를 더하는 함수를 만든다.
var add4 = makeAdder(4);
assert(add2(3) == 5);
assert(add4(3) == 7);
}
void foo() {} // 최상위 함수
class A {
static void bar() {} // 정적 메서드
void baz() {} // 인스턴스 메서드
}
void main() {
var x;
// 최상위 함수 비교
x = foo;
assert(foo == x);
// 정적 메서드 비교.
x = A.bar;
assert(A.bar == x);
// 인스턴스 메서드 비교
var v = A(); // Instance #1 of A
var w = A(); // Instance #2 of A
var y = w;
x = w.baz;
// 이러한 클로저는 동일한 인스턴스 (#2)를 참조하므로 동일한다.
assert(y.baz == x);
// 이러한 클로저는 서로 다른 인스턴스를 참조하므로 동일하지 않는다.
assert(v.baz != w.baz);
}