Skip to content
Dart

空安全

用 ? 和 ! 运算符实现健全的空安全。

#null-safety#nullable

Code

dart
// Non-nullable (default)
String name = 'Alice';
// name = null;  // compile error!

// Nullable
String? maybeName;
maybeName = null;  // OK

// Null assertion (!) — crashes if null
int len = maybeName!.length;  // unsafe

// Null-aware access (?.) — returns null if null
int? safeLen = maybeName?.length;

// Null-coalescing (??) — default if null
int lenOrDefault = maybeName?.length ?? 0;

// Late (initialized later, but non-nullable)
class Service {
  late final Config config;  // set before first use
  void init(Config c) { config = c; }
}

// Required (named params, non-null)
void greet({required String name}) => print('Hi $name');

// Promotion (smart casts)
String? getName() => DateTime.now().second % 2 == 0 ? 'Bob' : null;
void main() {
  var n = getName();
  if (n != null) {
    print(n.length);  // safe — Dart promotes
  }
}