Dart基础语法

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

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知识

相关文章

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

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

享受工作:找到事业与生活的平衡点

工作是我们日常生活中不可或缺的一部分。我们花费大量的时间和精力在工作中,因此,如何享受工作并找到事业与生活的平衡点就显得尤为重要。在这篇文章中,我们将探讨如何享受工作,让事业和生活愉快并行。首先,了解...

关于夏天

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

夏天的台风

夏天,是一个充满活力和生命力的季节,但同时也伴随着台风的出现。每年的这个时期,台风如同一股强大的自然力量,给人们的生命和财产带来了一定的威胁。在台风的肆虐中,可以看到大自然的威力与无情。台风带来的强风...

炎热的夏天

夏天是一个充满活力和热情的季节,炎热的的气息让人感到无力和疲惫。但是,这个季节也有着许多美好的回忆和乐趣,让我们一起来看看夏天的美好与炎热吧。首先,夏天的天气非常炎热,太阳高照,蓝天白云,气温高达30...

敏捷开发

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

发表评论

访客

看不清,换一张

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