入门 Dart 编程:为 Flutter 开发应用打下基础 审核中
Dart 是一门现代化的、多用途的编程语言,最为广泛应用于移动应用开发中的 Flutter 框架。本篇博客旨在为初学者提供 Dart 编程的基础概念,为进一步探索 Flutter 开发打下坚实基础。
DartPad 演示 🎯
首先,让我们熟悉 DartPad,这是一个在线沙盒,用于测试 Dart 代码。你可以在 [dartpad.dev](https://dartpad.dev) 上尝试各种 Dart 代码片段。
变量 📊
Dart 使用变量来存储值,支持整数(int)、字符串(String)、布尔(bool)和动态类型(dynamic) 。静态类型语言的特性使得一旦给变量指定类型,就不能更改类型。
1 // Integer variable 2 int age = 30; 3 print(age); 4 5 // String variable 6 String name = 'Chun-Li'; 7 print(name); 8 9 // Boolean variable 10 bool isNight = false; 11 print(isNight); 12 13 // Dynamic variable 14 dynamic dynamicVar = 'Chun-Li'; 15 print(dynamicVar); 16 17 dynamicVar = 30; // Dynamic allows type change 18 print(dynamicVar);
函数 📝
主函数 `void main()` 是 Dart 程序的入口点。使用 `void` 关键字表示函数不返回任何值。箭头函数适用于单行返回的情况。
1 // Void function 2 void printHello() { 3 print('Hello!'); 4 } 5 6 // Function with return type 7 String greeting() { 8 return 'Hello, Dart!'; 9 } 10 11 // Arrow function 12 String greetingArrow() => 'Hello, Dart! (Arrow)';
列表 📜
列表在 Dart 中类似于 JavaScript 中的数组,使用方括号表示。在声明列表时指定元素类型的重要性,以确保一致性。接下来我将实例如何创建、添加和删除列表中的元素。
1 // List declaration 2 List<String> names = ['Chun-Li', 'Yoshi', 'Miriao']; 3 4 // Print names 5 print(names); 6 7 // Add to the list 8 names.add('Luigi'); 9 print(names); 10 11 // Remove from the list 12 names.remove('Yoshi'); 13 print(names);
动态类型 🔄
动态类型允许在不同类型之间切换。`dynamic` 类型允许在运行时更改变量类型,但不推荐,因为可能导致代码错误。
1 // List declaration 2 List<String> names = ['Chun-Li', 'Yoshi', 'Miriao']; 3 4 // Print names 5 print(names); 6 7 // Add to the list 8 names.add('Luigi'); 9 print(names); 10 11 // Remove from the list 12 names.remove('Yoshi'); 13 print(names);
类和继承 🏗️
类的概念
类是编程语言中的概念,类似于对象的蓝图,用于描述对象的属性和方法。
通过创建类,可以定义对象的结构,例如用户对象,以便存储相关信息。
实例化类
要创建实际的对象,需要实例化类。通过调用类名称并传递参数来实例化对象。
构造函数
构造函数是实例化类时运行的特殊函数,用于设置对象的初始状态。可以接受参数,使每个实例的属性值不同。
1 class User { 2 String username; 3 int age; 4 5 User(String username, int age) { 6 this.username = username; 7 this.age = age; 8 } 9 10 void login() { 11 print('User logged in'); 12 } 13 }
继承
继承是一种机制,允许一个类继承另一个类的属性和方法。使用 `extends` 关键字实现继承。
子类(派生类)继承父类(基类)的属性和方法,同时可以添加自己的属性和方法。
1 class SuperUser extends User { 2 void publish() { 3 print('Published update'); 4 } 5 } 6 7 SuperUser user3 = SuperUser('Yoshi', 20); 8 user3.publish();
Maps 🗺️
Maps 是键值对的集合,类似于 JavaScript 中的对象字面量或 Python 中的字典。在 Dart 中,使用冒号 `:` 分隔键和值。
注意!在Dart 中,Map 的键值对是使用冒号 : 进行赋值的,而不是等号 =。
1 //创建Map: 2 Map<String, dynamic> student = {'name': 'Sean Lee', 'age': 25}; 3 //访问Map的值: 4 print(student['name']);
空安全语法 🚧
Dart 引入了空安全语法,使用 `?.` 操作符简化对可能为 `null` 的对象的成员访问,以避免因为访问 null 对象的属性或方法而导致的运行时异常。这使得代码更简洁、安全,避免了大量的空值检查代码。
1.访问对象属性:
1 // Before null safety 2 if (user != null) { 3 print(user.name); 4 } 5 6 // After null safety 7 print(user?.name);
如果 user 不为 null,则会打印 user.name 的值,否则不会引发异常,而是返回 null。
2.调用对象方法:
1 // 在空安全前 2 if (userManager != null) { 3 userManager.getUser()?.refresh(); 4 } 5 6 // 空安全后 7 userManager?.getUser()?.refresh();
如果 userManager 不为 null 且 getUser() 返回的对象不为 null,则调用 refresh() 方法。如果其中任何一个为 null,则整个表达式的结果为 null。
3.使用链式操作:
1 // 在空安全前 2 if (user != null && user.address != null && user.address.city != null) { 3 print(user.address.city); 4 } 5 6 // 空安全后 7 print(user?.address?.city);
如果 user、user.address 和 user.address.city 中任何一个为 null,则整个表达式的结果为 null。
4.配合赋值操作:
1 // 在空安全前 2 if (user != null) { 3 user.name = 'John Doe'; 4 } 5 6 // 空安全后 7 user?.name = 'John Doe';
如果 user 不为 null,则为 user.name 赋值;否则什么也不做。
const 构造函数 🏗️
在 Dart 中,`const` 构造函数用于创建编译时常量。使用 `const` 关键字构造函数时,构造函数及其使用的所有成员都必须是可编译时常量。这对于某些数据类型和对象是有限制的,因为不是所有的构造函数都可以用于创建编译时常量。
1 class MyObject { 2 final int value; 3 4 // 这是一个 const 构造函数 5 const MyObject(this.value); 6 } 7 8 void main() { 9 // 正确:在 const 上下文中使用 const 构造函数 10 const myInstance = MyObject(42); 11 }
这是一个简单的 Dart 入门指南,涵盖了语言的基础概念。希望这能够帮助初学者开始你们的 Dart 编程之旅,为进一步探索 Flutter 开发奠定基础。要深入了解 Dart 和 Flutter,请查阅官方文档和教程,并勇敢地开始你的移动应用开发之旅!
后续我也将会持续更新有关Flutter的学习笔记,如果这篇文章对你有帮助的话,请多多点赞、转发、收藏吧~
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战