入门 Dart 编程:为 Flutter 开发应用打下基础

前言:

Dart 是一门现代化的、多用途的编程语言,最为广泛应用于移动应用开发中的 Flutter 框架。本篇博客旨在为初学者提供 Dart 编程的基础概念,为进一步探索 Flutter 开发打下坚实基础。

DartPad 演示 🎯

首先,让我们熟悉 DartPad,这是一个在线沙盒,用于测试 Dart 代码。你可以在 [dartpad.dev](https://dartpad.dev) 上尝试各种 Dart 代码片段。

变量 📊

Dart 使用变量来存储值,支持整数(int)、字符串(String)、布尔(bool)和动态类型(dynamic) 。静态类型语言的特性使得一旦给变量指定类型,就不能更改类型。

// Integer variable
int age = 30;
print(age);

// String variable
String name = 'Chun-Li';
print(name);

// Boolean variable
bool isNight = false;
print(isNight);

// Dynamic variable
dynamic dynamicVar = 'Chun-Li';
print(dynamicVar);

dynamicVar = 30; // Dynamic allows type change
print(dynamicVar);

函数 📝

主函数 `void main()` 是 Dart 程序的入口点。使用 `void` 关键字表示函数不返回任何值。箭头函数适用于单行返回的情况。

// Void function
void printHello() {
  print('Hello!');
}

// Function with return type
String greeting() {
  return 'Hello, Dart!';
}

// Arrow function
String greetingArrow() => 'Hello, Dart! (Arrow)';

列表 📜

列表在 Dart 中类似于 JavaScript 中的数组,使用方括号表示。在声明列表时指定元素类型的重要性,以确保一致性。接下来我将实例如何创建、添加和删除列表中的元素。

// List declaration
List<String> names = ['Chun-Li', 'Yoshi', 'Miriao'];

// Print names
print(names);

// Add to the list
names.add('Luigi');
print(names);

// Remove from the list
names.remove('Yoshi');
print(names);

动态类型 🔄

动态类型允许在不同类型之间切换。`dynamic` 类型允许在运行时更改变量类型,但不推荐,因为可能导致代码错误。
 

// Dynamic type
dynamic dynamicVar = 'Chun-Li';
print(dynamicVar);

dynamicVar = 30; // Allowed in dynamic type
print(dynamicVar);

类和继承 🏗️

类的概念

类是编程语言中的概念,类似于对象的蓝图,用于描述对象的属性和方法。

通过创建类,可以定义对象的结构,例如用户对象,以便存储相关信息。

实例化类

要创建实际的对象,需要实例化类。通过调用类名称并传递参数来实例化对象。

构造函数

构造函数是实例化类时运行的特殊函数,用于设置对象的初始状态。可以接受参数,使每个实例的属性值不同。

class User {
  String username;
  int age;

  User(String username, int age) {
    this.username = username;
    this.age = age;
  }

  void login() {
    print('User logged in');
  }
}

继承

继承是一种机制,允许一个类继承另一个类的属性和方法。使用 `extends` 关键字实现继承。

子类(派生类)继承父类(基类)的属性和方法,同时可以添加自己的属性和方法。

class SuperUser extends User {
  void publish() {
    print('Published update');
  }
}

SuperUser user3 = SuperUser('Yoshi', 20);
user3.publish();

Maps 🗺️

Maps 是键值对的集合,类似于 JavaScript 中的对象字面量或 Python 中的字典。在 Dart 中,使用冒号 `:` 分隔键和值。

注意!在Dart 中,Map 的键值对是使用冒号 : 进行赋值的,而不是等号 =

//创建Map:
Map<String, dynamic> student = {'name': 'Sean Lee', 'age': 25};
//访问Map的值:
print(student['name']);

空安全语法 🚧

Dart 引入了空安全语法,使用 `?.` 操作符简化对可能为 `null` 的对象的成员访问,以避免因为访问 null 对象的属性或方法而导致的运行时异常。这使得代码更简洁、安全,避免了大量的空值检查代码。

1.访问对象属性:

// Before null safety
if (user != null) {
  print(user.name);
}

// After null safety
print(user?.name);

 如果 user 不为 null,则会打印 user.name 的值,否则不会引发异常,而是返回 null。

2.调用对象方法:

// 在空安全前
if (userManager != null) {
  userManager.getUser()?.refresh();
}

// 空安全后
userManager?.getUser()?.refresh();

如果 userManager 不为 null 且 getUser() 返回的对象不为 null,则调用 refresh() 方法。如果其中任何一个为 null,则整个表达式的结果为 null。

3.使用链式操作:

// 在空安全前
if (user != null && user.address != null && user.address.city != null) {
  print(user.address.city);
}

// 空安全后
print(user?.address?.city);

如果 user、user.address 和 user.address.city 中任何一个为 null,则整个表达式的结果为 null。

4.配合赋值操作:  

// 在空安全前
if (user != null) {
  user.name = 'John Doe';
}

// 空安全后
user?.name = 'John Doe';

如果 user 不为 null,则为 user.name 赋值;否则什么也不做。  

const 构造函数 🏗️

在 Dart 中,`const` 构造函数用于创建编译时常量。使用 `const` 关键字构造函数时,构造函数及其使用的所有成员都必须是可编译时常量。这对于某些数据类型和对象是有限制的,因为不是所有的构造函数都可以用于创建编译时常量。

class MyObject {
  final int value;

  // 这是一个 const 构造函数
  const MyObject(this.value);
}

void main() {
  // 正确:在 const 上下文中使用 const 构造函数
  const myInstance = MyObject(42);
}

这是一个简单的 Dart 入门指南,涵盖了语言的基础概念。希望这能够帮助初学者开始你们的 Dart 编程之旅,为进一步探索 Flutter 开发奠定基础。要深入了解 Dart 和 Flutter,请查阅官方文档和教程,并勇敢地开始你的移动应用开发之旅!

后续我也将会持续更新有关Flutter的学习笔记,如果这篇文章对你有帮助的话,请多多点赞、转发、收藏吧~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值