Flutter for HarmonyOS 前置知识:Dart语言详解(中)

作者:个人主页:ujainu

前言

🚀 Dart 基础语法详解:函数、类与构造函数全面解析

本文带你系统掌握 Dart 中的核心语法 ------ 函数定义、参数类型、匿名函数、箭头函数以及类和构造函数的使用方法。适合 Flutter 开发初学者快速上手!

Dart中的函数定义

在 Dart 中,函数是程序的基本构建块之一。一个完整的函数通常包括:返回类型、函数名、参数列表和函数体。

✅返回值

  • 有返回值:具体类型 函数名称(){}
dart 复制代码
String getName() {
  return "Dart";
}
  • 无返回值:void 函数名称(){}
dart 复制代码
void printHello() {
  print("Hello Dart!");
}
  • 注意:返回值类型可以省略,Dart会知道推断类型为dynamic
dart 复制代码
// 不推荐:类型不明确
getAge() => 25;

实例:

函数中的必传参数和可选位置参数

✅必传参数

  • 特点:必传参数不能为空,必须按顺序传递。
dart 复制代码
void introduce(String name, int age) {
  print("我叫$name,今年$age岁");
}
  • 调用时必须传入所有参数:
dart 复制代码
introduce("张三", 20); // ✅ 正确
// introduce("李四"); ❌ 错误:缺少参数

实例代码:

✅可选位置参数

  • 特点:用方括号 [] 包裹,表示该参数可选,且必须放在必传参数之后。
dart 复制代码
void introduce(String name, [int? age, String? city]) {
  print("我叫$name${age != null ? ',$age岁' : ''}${city != null ? ',来自$city' : ''}");
}
  • 语法:函数名(String a,[String?b,...]),传递时安照顺序传递。
dart 复制代码
introduce("张三");           // 输出:我叫张三
introduce("李四", 25);       // 输出:我叫李四,25岁
introduce("王五", 30, "北京"); // 输出:我叫王五,30岁,来自北京

实例代码:

✅可选命名参数

  • 特点:使用花括号 {} 定义,调用时通过 参数名: 值 的形式传参,无需关心顺序。
dart 复制代码
void introduce(String name, {int? age, String? city}) {
  print("我叫$name${age != null ? ',$age岁' : ''}${city != null ? ',来自$city' : ''}");
}
  • 调用方式(自由指定参数):
dart 复制代码
introduce("张三"); 
introduce("李四", age: 25);
introduce("王五", city: "上海", age: 30); // 参数顺序无关

✅ 优势:代码更具可读性,尤其适用于参数较多的情况。

实例代码:

匿名函数和箭头函数

✅匿名函数(Anonymous Function)

  • 特点:声明一个没有名称的函数赋值给变量,进行调用。
  • 语法:Function变量名 = (){};
  • 注意:函数的类型使用Function来声明。
    没有函数名的函数,常用于回调或赋值给变量。
dart 复制代码
var sayHi = () {
  print("Hello,这是一个匿名函数!");
};

// 调用
sayHi();

也可以带参数:

dart 复制代码
var greet = (String name) {
  print("你好,$name!");
};

greet("Dart");

实例:

✅箭头函数(Arrow Function)

  • 特点:函数体只有一行代码,可以用箭头函数。
  • 语法:函数名()=> 代码逻辑
  • 注意:使用箭头函数可以省略关键字。
dart 复制代码
// 普通函数
void printName() {
  print("张三");
}

// 箭头函数简化版
void printName() => print("张三");

// 带参数的箭头函数
var multiply = (int a, int b) => a * b;
print(multiply(3, 4)); // 输出:12

实例:

Dart 中的类(Class)

class

  • 定义:包含属性和方法来定义对象的行为和状态。
  • 需求:定义一个Person类,包含姓名、年龄、性别,包括学习方法。
  • 语法:class Person{属性,方法}
  • 实例化对象:Person 变量 = Person(); 属性和方法:变量.属性/方法()

✅ 示例:定义一个 Person 类

dart 复制代码
// 简单的Dart类样例
class Person {
  // 属性(成员变量)
  String name;
  int age;
  String? address; // 可选属性,使用?表示可为null
  // 构造函数
  Person(this.name, this.age, {this.address});

  // 方法(成员函数)
  void sayHello() {
    print("你好,我叫$name,今年$age岁。");
    if (address != null) {
      print("我来自$address。");
    }
  }
  // getter方法
  String get info => "$name - $age岁";

  // setter方法
  set updateAge(int newAge) {
    if (newAge > 0) {
      age = newAge;
    }
  }
  // 静态方法
  static void printDefaultMessage() {
    print("这是Person类的静态方法。");
  }
}

✅ 使用类创建对象并调用成员

dart 复制代码
void main() {
  // 创建Person对象
  final person1 = Person("张三", 20, address: "北京");
  final person2 = Person("李四", 25);
  // 调用实例方法
  person1.sayHello();
  person2.sayHello();
  // 使用getter
  print("\nperson1的信息:${person1.info}");
  print("person2的信息:${person2.info}");
  // 使用setter
  person1.updateAge = 21;
  print("\n更新后person1的年龄:${person1.age}");
  // 调用静态方法
  Person.printDefaultMessage();
}

结果

dart类中的默认和命名构造函数

✅ 1. 默认构造函数(Default Constructor)

  • Dart 会自动生成无参构造函数(如果未定义其他构造函数),但我们通常手动定义带参数的构造函数。
dart 复制代码
Person(this.name, this.age, {this.address});

等价于:

dart 复制代码
Person(String name, int age, {String? address})
    : name = name,
      age = age,
      address = address;

✅ 2. 命名构造函数(Named Constructor)

允许为同一个类定义多个不同用途的构造函数,语法为 ClassName.identifier。

示例:fromJson 和 defaultPerson

dart 复制代码
// 从 JSON 创建对象
Person.fromJson(Map<String, dynamic> json)
    : name = json['name'],
      age = json['age'],
      address = json['address'];

// 创建默认用户
Person.defaultPerson()
    : name = "未知",
      age = 18,
      address = "未知地址";

默认和命名构造函数对比示例:

dart 复制代码
// Dart类构造函数样例

class Person {
  // 属性(成员变量)
  String name;
  int age;
  String? address; // 可选属性,使用?表示可为null

  // 1. 默认构造函数
  // 语法:类名(参数列表)
  Person(this.name, this.age, {this.address});

  // 2. 命名构造函数:从JSON创建对象
  // 语法:类名.构造函数名(参数列表) : 初始化列表
  Person.fromJson(Map<String, dynamic> json) :
    name = json['name'],
    age = json['age'],
    address = json['address'];

  // 3. 命名构造函数:创建默认对象
  Person.defaultPerson() :
    name = "未知",
    age = 18,
    address = "未知地址";

  // 方法(成员函数)
  void sayHello() {
    print("你好,我叫$name,今年$age岁。");
    if (address != null) {
      print("我来自$address。");
    }
  }

  // getter方法
  String get info => "$name - $age岁";

  // setter方法
  set updateAge(int newAge) {
    if (newAge > 0) {
      age = newAge;
    }
  }

  // 静态方法
  static void printDefaultMessage() {
    print("这是Person类的静态方法。");
  }
}

void main() {
  print("=== Dart类构造函数示例 ===\n");
  
  // 1. 使用默认构造函数
  print("1. 使用默认构造函数:");
  final person1 = Person("张三", 20, address: "北京");
  final person2 = Person("李四", 25);
  person1.sayHello();
  person2.sayHello();

  // 2. 使用命名构造函数:fromJson
  print("\n2. 使用命名构造函数fromJson:");
  final personJson = {
    'name': '王五',
    'age': 28,
    'address': '上海'
  };
  final person3 = Person.fromJson(personJson);
  person3.sayHello();
  
  // 3. 使用命名构造函数:defaultPerson
  print("\n3. 使用命名构造函数defaultPerson:");
  final person4 = Person.defaultPerson();
  person4.sayHello();

  // 使用getter
  print("\n4. 使用getter获取信息:");
  print("person1的信息:${person1.info}");
  print("person2的信息:${person2.info}");

  // 使用setter
  print("\n5. 使用setter更新年龄:");
  person1.updateAge = 21;
  print("更新后person1的年龄:${person1.age}");

  // 调用静态方法
  print("\n6. 调用静态方法:");
  Person.printDefaultMessage();
}

运行结果:

📌 结语

Dart 作为 Flutter 的开发语言,其语法简洁而强大。掌握好 函数定义、参数机制、类与构造函数 是迈向 Flutter 高效开发的第一步。

👉 后续我们将深入讲解:继承、混入(mixin)、泛型、异步编程(Future/Stream) 等高级内容,敬请关注!

欢迎加入开源鸿蒙跨平台社区:开源鸿蒙跨平台开发者社区!

相关推荐
2501_944521592 小时前
Flutter for OpenHarmony 微动漫App实战:图片加载实现
android·开发语言·前端·javascript·flutter·php
新镜3 小时前
【Flutter】LTR/RTL 阿拉伯语言/希伯来语言
android·flutter·ios·客户端
夜雨声烦丿7 小时前
Flutter 框架跨平台鸿蒙开发 - 万年历应用开发教程
flutter·华为·harmonyos
别退9 小时前
flutter_gradle_android
android·flutter
2501_944424129 小时前
Flutter for OpenHarmony游戏集合App实战之黑白棋落子翻转
android·开发语言·windows·flutter·游戏·harmonyos
猛扇赵四那边好嘴.9 小时前
Flutter 框架跨平台鸿蒙开发 - 全国公厕查询:智能定位附近公厕
flutter·华为·harmonyos
血色橄榄枝9 小时前
01 Flutter for OpenHarmony
flutter·开源·鸿蒙
2501_944424129 小时前
Flutter for OpenHarmony游戏集合App实战之消消乐下落填充
android·开发语言·flutter·游戏·harmonyos
kirk_wang9 小时前
Flutter艺术探索-BLoC模式实战:业务逻辑组件化设计
flutter·移动开发·flutter教程·移动开发教程