Dart基础语法

admin4个月前 (05-25)it知识269

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

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

变量声明与数据类型

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

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

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

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

var city = 'London'; // 推断为String
var 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); // true
int 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知识

相关文章

优美程序是怎样的

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

敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可...

如何学习 javascript

学习JavaScript需要以下步骤:基础语法:学习JavaScript的基础语法,包括变量、数据类型、函数、循环、条件语句等。DOM 操作:学习如何操作 DOM,例如获取和修改元素、添加和删除事件处...

沟通的模型

7C模型:这是一种在商业沟通中常见的模型,旨在确保信息在传递过程中清晰、简明、准确、一致、可信、可理解和有说服力。沟通的五个W和一个H:何人(Who)何事(What)何地(Where)何时(When)...

暴风雨

暴风雨来临之前,天空中弥漫着一股压抑的气息。乌云密布,仿佛覆盖着一片灰暗的帷幕,将整个天地都笼罩在一片阴沉的氛围中。狂风大作,吹拂着路上的尘土和枝叶,让人感到一阵阵的凉意。突然,一声炸雷打破了寂静,紧...

定量化语言

定量化语言是指在编程中,使用数值型数据类型来存储和处理数据,以便进行数值计算和数据分析。这种语言通常支持各种数学运算符和函数,以及各种数据结构和算法,可以帮助程序员更高效地处理数据。以下是一些关于定量...

发表评论

访客

看不清,换一张

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