Dart构造函数的简写方式说明

2025-02-10  本文已影响0人  嗷大喵

在 Dart 中,构造函数可以使用简写方式,使代码更加简洁易读。下面是几种常见的构造函数简写方式:


1. 普通构造函数的简写

通常,我们需要手动给类的字段赋值,但可以用 this. 关键字简写。

🔹 传统方式

class Person {
  String name;
  int age;

  // 传统写法:在构造函数中手动赋值
  Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

✅ 简写方式

class Person {
  String name;
  int age;

  // 直接在参数列表中使用 this 关键字,省去手动赋值
  Person(this.name, this.age);
}

📌 作用:


2. 可选参数的简写

🔹 传统写法

class Person {
  String name;
  int age;

  Person(String name, [int age = 18]) {
    this.name = name;
    this.age = age;
  }
}

✅ 简写方式

class Person {
  String name;
  int age;

  // 使用 [] 使 age 变成可选参数
  Person(this.name, [this.age = 18]);
}

📌 作用:


3. 命名参数的简写

🔹 传统写法

class Person {
  String name;
  int age;

  Person({String name = "Unknown", int age = 18}) {
    this.name = name;
    this.age = age;
  }
}

✅ 简写方式

class Person {
  String name;
  int age;

  // 直接在参数列表中使用 this
  Person({this.name = "Unknown", this.age = 18});
}

📌 作用:

📌 调用方式

void main() {
  var p1 = Person(); 
  var p2 = Person(name: "Alice");
  var p3 = Person(age: 25);
  var p4 = Person(name: "Bob", age: 30);
}

4. required 关键字的简写

适用于:强制要求某些参数必须传递

🔹 传统写法

class Person {
  String name;
  int age;

  Person({required String name, required int age}) {
    this.name = name;
    this.age = age;
  }
}

✅ 简写方式

class Person {
  String name;
  int age;

  // 直接在构造函数参数中使用 this 和 required
  Person({required this.name, required this.age});
}

📌 作用:

📌 调用方式

void main() {
  var p = Person(name: "Alice", age: 25); // ✅ 正常
  // var p2 = Person(name: "Bob"); // ❌ 报错,age 必填
}

5. const 构造函数的简写

适用于:不可变对象

🔹 传统写法

class Person {
  final String name;
  final int age;

  const Person({required String name, required int age})
      : name = name,
        age = age;
}

✅ 简写方式

class Person {
  final String name;
  final int age;

  const Person({required this.name, required this.age});
}

📌 作用:

📌 调用方式

void main() {
  const p1 = Person(name: "Alice", age: 25);
  const p2 = Person(name: "Alice", age: 25);

  print(identical(p1, p2)); // true,两者指向同一个对象
}

6. 工厂构造函数的简写

适用于:

🔹 传统写法

class Singleton {
  static final Singleton _instance = Singleton._internal();

  Singleton._internal(); // 私有构造函数

  factory Singleton() {
    return _instance;
  }
}

✅ 简写方式

class Singleton {
  static final Singleton _instance = Singleton._();

  Singleton._(); // 私有构造函数

  factory Singleton() => _instance;
}

📌 作用:

📌 调用方式

void main() {
  var s1 = Singleton();
  var s2 = Singleton();

  print(identical(s1, s2)); // true,两个实例是相同的
}

7. late 变量的简写

适用于:

🔹 传统写法

class Person {
  late String name;
  int age;

  Person({required String name, this.age = 18}) {
    this.name = name; // 必须在构造方法中赋值
  }
}

✅ 简写方式

class Person {
  late String name;
  int age;

  Person({required this.name, this.age = 18});
}

📌 作用:


总结

简写方式 作用
this. 赋值 省去手动赋值
[] 位置可选参数 让参数可选,并提供默认值
{} 命名参数 让参数更具可读性
required 关键字 强制要求必须传递参数
const 构造函数 让对象成为编译时常量
factory 构造函数 允许返回缓存对象或自定义实例化逻辑
late 变量 允许稍后赋值,避免 null 检查

这样,你可以根据不同场景选择最适合的构造函数简写方式,使代码更加清晰和易读! 🚀

上一篇 下一篇

猜你喜欢

热点阅读