Dart基础语法

admin5个月前 (05-25)it知识352

Dart是一种面向对象的编程语言,广泛应用于Flutter跨平台开发。

本文将详细介绍Dart的基础语法,包括变量声明、数据类型、函数、类、控制流、空安全、异步编程等核心概念。

变量声明与数据类型

Dart提供了多种变量声明方式:

  1. 显式类型声明‌:明确指定变量类型

String name = 'Alice';int age = 25;

       类型推断(var)‌:由编译器推断变量类型

var city = 'London'; // 推断为Stringvar price = 9.99;    // 推断为double

‌       动态类型(dynamic)‌:可赋值为任意类型

dynamic value = 'Hello';value = 100; // 合法

       常量声明‌:

final PI = 3.14;     // 运行时常量const gravity = 9.8; // 编译时常量

Dart的基本数据类型包括:

  • int:整数

  • double:浮点数

  • bool:布尔值(true/false)

  • String:字符串

  • List:列表/数组

  • Map:键值对集合

类型检查与转换:

var value = '123';print(value is String); // trueint numValue = int.parse(value);String strValue = numValue.toString();


函数定义与使用

Dart中的函数定义方式:

  1. 基本函数‌:

int add(int a, int b) {  return a + b;}

      箭头函数‌(单表达式函数):

bool isAdult(int age) => age >= 18;

      可选参数‌:

void printInfo(String name, [int? age]) {  print('Name: $name, Age: ${age ?? 'unknown'}');}

     命名参数‌:

void greet({String name = 'Guest', int times = 1}) {  for (int i = 0; i < times; i++) {    print('Hello, $name!');  }}

     匿名函数‌:

var list = [1, 2, 3];list.forEach((item) => print(item));


类与对象

Dart是面向对象语言,所有类都继承自Object:

class Person {  // 实例变量  String name;  int age;    // 构造函数  Person(this.name, this.age);    // 命名构造函数  Person.guest() : this('Guest', 18);    // 方法  void introduce() {    print('I am $name, $age years old.');  }}void main() {  var p1 = Person('Alice', 25);  var p2 = Person.guest();  p1.introduce();}

Dart支持‌继承‌和‌混入(Mixin)‌:

mixin Logger {  void log(String message) => print(message);}class User with Logger {  String name;  User(this.name);}void main() {  var user = User('Bob');  user.log('User created'); // 来自Logger mixin}

控制流和循环结构

Dart支持标准的控制流语句:

  1. 条件语句‌:

if (age >= 18) {  print('Adult');} else if (age >= 13) {  print('Teenager');} else {  print('Child');}

      switch语句‌:

switch (grade) {  case 'A':    print('Excellent');    break;  case 'B':    print('Good');    break;  default:    print('Fail');}

     循环结构‌:

// for循环for (int i = 0; i < 5; i++) {  print(i);}// while循环while (condition) {  // ...}// do-while循环do {  // ...} while (condition);// for-in循环var list = [1, 2, 3];for (var item in list) {  print(item);}

空安全机制

Dart 2.12引入的空安全特性:

  1. 可空与不可空类型‌:

String name = 'Dart';  // 不可为空String? nickname = null; // 可为空

      空断言操作符(!)‌:

String? nullableName = getName();String name = nullableName!; // 断言不为null

      late关键字‌:

late String description;void main() {  description = 'Initialized later';  print(description);}

空安全机制将运行时的空指针异常提前到开发阶段检测,提高了代码安全性

异步编程(async/await)

Dart使用Futureasync/await处理异步操作:

  1. Future基本用法‌:

Future<String> fetchData() {  return Future.delayed(Duration(seconds: 2), () => 'Data loaded');}void main() {  fetchData().then((data) {    print(data);  }).catchError((error) {    print('Error: $error');  });}

 ‌    async/await语法‌:

Future<void> main() async {  try {    String data = await fetchData();    print(data);  } catch (e) {    print('Error: $e');  }}

    Stream处理连续事件‌:

Stream<int> countStream(int max) async* {  for (int i = 1; i <= max; i++) {    await Future.delayed(Duration(seconds: 1));    yield i;  }}void main() async {  await for (var num in countStream(5)) {    print(num);  }}

集合类型操作

Dart主要集合类型:

  1. List(列表)‌:

var numbers = [1, 2, 3];numbers.add(4);numbers.insert(0, 0);numbers.remove(3);print(numbers[1]); // 访问元素

      Set(集合)‌:

var ingredients = {'gold', 'titanium', 'xenon'};ingredients.add('silver');ingredients.remove('gold');print(ingredients.contains('titanium'));

‌     Map(映射)‌:

var scores = {'Math': 90, 'English': 85};scores['Science'] = 95;print(scores['Math']);scores.remove('English');

集合操作支持展开运算符:

var list1 = [1, 2];var list2 = [0, ...list1, 3]; // [0, 1, 2, 3]


扩展方法与Mixin

  1. 扩展方法‌:

extension StringExtension on String {  String reverse() {    return split('').reversed.join('');  }}void main() {  print('hello'.reverse()); // olleh}

      Mixin‌:

mixin Musical {  void playMusic() {    print('Playing music');  }}class Performer with Musical {  // ...}

Dart 3.0新特性

  1. 记录类型(Records)‌:

var record = ('first', a: 2, b: true, 'last');print(record.$1); // 'first'print(record.a);  // 2

      模式匹配(Patterns)‌:

var point = (x: 10, y: 20);if (point case (x: var x, y: var y)) {  print('Point: ($x, $y)');}

      switch表达式增强‌:

var number = 1;var result = switch (number) {  0 => 'zero',  1 => 'one',  _ => 'other'};


运算符重载

Dart允许重载运算符:

class Vector {  final int x, y;  Vector(this.x, this.y);    Vector operator +(Vector other) {    return Vector(x + other.x, y + other.y);  }}void main() {  var v1 = Vector(2, 3);  var v2 = Vector(4, 5);  var result = v1 + v2; // Vector(6, 8)}


可重载的运算符包括算术运算符、比较运算符等

异常处理

Dart使用try-catch处理异常:

try {  // 可能抛出异常的代码  var result = 100 ~/ 0;} on IntegerDivisionByZeroException {  // 特定异常处理  print('Cannot divide by zero');} catch (e) {  // 其他所有异常  print('Error: $e');} finally {  // 无论是否发生异常都会执行  print('Done');}

生成器函数

Dart支持同步和异步生成器:

  1. ‌*同步生成器(sync)**‌:


Iterable<int> countTo(int n) sync* {  for (int i = 1; i <= n; i++) {    yield i;  }}

     ‌*异步生成器(async)**‌:


Stream<int> countStream(int n) async* {  for (int i = 1; i <= n; i++) {    await Future.delayed(Duration(seconds: 1));    yield i;  }}


标签: 分享IT知识

相关文章

灵动:生活中的艺术与智慧

在这个充满变化的世界里,灵动是一种独特的魅力,它让我们的生活更加丰富多彩,充满了可能性和创意。灵动不仅是一种艺术,更是一种智慧,它存在于我们的思维、情感和行动中。首先,灵动是一种艺术。在我们的生活中,...

技术与艺术的融合:创造无比魅力的结合

在人类文明的发展史上,技术与艺术如同一对形影不离的伙伴,共同推动了人类社会的进步。随着科技的飞速发展,技术与艺术的融合愈发紧密,为我们揭示了一个全新的视角,让我们重新审视这两股强大的力量。在当今数字化...

优美程序是怎样的

程序优美是一个主观的概念,每个人可能会有不同的看法。然而,以下是一些可能导致程序优美的因素:简洁性:优美的程序应该尽可能地简洁明了。这意味着应该使用尽可能少的数据结构和算法,以及尽可能简单的代码。可读...

关于夏天

在一个炎热的午后,阳光穿过树叶的缝隙,洒在公园的草地上。空气中弥漫着夏日的气息,那是炎热中夹杂着淡淡的花香,还有草地的清新味道。在这个充满活力的季节,夏天以其独特的方式展示着它的魅力。夏天是一个充满色...

湖边

湖边,一片静谧的美好。清晨的阳光洒在湖面上,波光粼粼,让人心旷神怡。湖上的荷叶轻轻摇曳,荷花争奇斗艳,仿佛在向人们展示着它们的美丽。湖边的柳树依依,芦苇丛生,形成了一道道天然的屏障,让人感到一种隐秘的...

个人学习计划

学习计划是一个帮助你提高学习效率和使用时间的有效工具。以下是一个可能的学习计划:目标设定。 在开始学习之前,明确你的学习目标和目的地,这有助于你制定实际可行的计划。分解任务。 将大...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。