美文网首页
Dart构造函数的简写方式说明

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

作者: 嗷大喵 | 来源:发表于2025-02-10 17:33 被阅读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);
}

📌 作用:

  • this.name 直接赋值给类的字段 name,不需要在构造体内写 this.name = name

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]);
}

📌 作用:

  • age 变成可选参数,默认值 18
  • 省去 this.age = age; 的赋值操作。

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});
}

📌 作用:

  • nameage 变成命名参数,可以在调用时指定参数名。
  • 省去 this.name = name; 的赋值操作。

📌 调用方式

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});
}

📌 作用:

  • required 确保 nameage 必须传递,否则编译报错。
  • 省去 this.name = name; 赋值操作

📌 调用方式

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});
}

📌 作用:

  • const 让类的对象变成编译时常量,提高性能。
  • 只能用于 final 成员变量。
  • 省去 : name = name, age = 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;
}

📌 作用:

  • factory 让构造函数可以返回已有实例(比如缓存数据)。
  • 省去 return _instance; 代码,提高可读性。

📌 调用方式

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

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

7. late 变量的简写

适用于:

  • 稍后赋值的变量
  • 避免 null 检查

🔹 传统写法

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});
}

📌 作用:

  • late 变量在构造函数中直接赋值,避免手动赋值代码。

总结

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

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

相关文章

  • Dart整理

    Dart构造函数 普通构造函数和命名构造函数 默认构造函数一个类没有声明构造函数,默认会有一个无参构造函数,声明了...

  • 2020-04-11 Flutter学习笔记——Dart构造函数

    Dart构造函数有4种格式: ClassName(...) //类名构造函数Classname.identifi...

  • Dart类(构造函数、单例)

    Dart类(构造函数、单例) 构造函数 构造函数类型 默认构造函数类里面没有显示写构造函数,默认是一个隐式的无参构...

  • Dart---构造函数与命名构造构造函数(初始化)

    构造函数(初始化) 构造函数:构造函数与类名相同,构造函数又叫初始化函数,当类被创建的时候,会自动调用。Dart相...

  • Dart 如何正确使用构造函数?

    前言 Dart 语言的构造函数和其他语言会有些不同,我们列举一下 Dart 中的构造函数的几种形式。 这里比较容易...

  • Dart基础: 构造函数

    Dart基础: 构造函数 Dart的构造函数比较变化多端, 我们可以在不同的场景下合理声明和调用一个class的构...

  • Dart构造函数

    默认构造函数 不声明构造函数,则提供默认的无参构造,和java类似。 普通构造函数 另外一种构造方法写法:(减少代...

  • dart的构造函数

  • flutter单例模式

    注意:Dart中实现单例模式的标准做法就是使用static变量+工厂构造函数的方式,这样就可以保证Manager(...

  • Flutter学习笔记3 -- Dart语法学习扩展

    本文是对Dart语法的一些补充内容 类的特性 1.工厂构造函数普通构造函数会默认返回创建的对象,工厂构造函数需要手...

网友评论

      本文标题:Dart构造函数的简写方式说明

      本文链接:https://www.haomeiwen.com/subject/becfpjtx.html