Flutter 入门学习(三)— Dart语言详解

本文深入探讨Dart语言,涵盖变量、内置类型如num、int、double、String、bool、List、Map、Set,以及函数、类、泛型、异常处理、库、异步编程和生成器。通过实例代码,适合初学者快速上手和运行实践。

本文的所有内容均是官方文档的简单翻译和理解。
主要介绍Dart语言[变量、内置类型、函数、类、泛型、异常、库、生成器、元数据(注解)]
本人以实际代码案例为主,可以直接复制Android studio运行学习。

变量

变量的声明

  • var
  • dynamic
  • Object

变量的默认值

  • 没有初始化的变量自动获取一个默认值为null
  • 一切皆对象,对象的默认值为null

final和const

  • 共同点:
    • 1.声明的类型可省略
    • 2.初始化后不能再赋值
    • 3.不能和var同时使用
  • 不同点(需要注意的地方)
    • 1.类级别常量,使用static const
    • 2.const可使用其他const 常量的值来初始化其值
    • 3.使用const赋值声明,const可省略
    • 4.可以更改非final、非const变量的值,即使曾经具有const值
    • 5.const导致的不可变性是可传递的
    • 6.相同的const常量不会在内存中重复创建
    • 7.const需要是编译时常量

内置类型

num, int, double

  • int : 整数值
  • double : 64-bit双精度浮点数
  • int和double是num的子类

String

  • Dart 字符串是 UTF-16 编码的字符序列,可以使用单引号或者双引号来创建字符串
  • 可以使用三个单引号或者双引号创建多行字符串对象
  • 可以使用 r 前缀创建”原始raw”字符串
  • 可以在字符串中使用表达式: ${expression},如果表达式是一个标识符,可以省略 {},如果表达式的结果为一个对象,则 Dart 会调用对象的 toString() 函数来获取一个字符串

bool

  • bool对象未初始化的默认值是null

List

  • Dart中可以直接打印list包括list的元素,List也是对象。java中直接打印list结果是地址值
  • Dart中List的下标索引和java一样从0开始
  • 和java一样支持泛型
  • 有增删改查,支持倒序,自带排序、洗牌,可使用+将两个List合并

Map

  • 跟java类似,不做详解

Set

  • set1.difference(set2):返回set1集合里有但set2里没有的元素集合
  • set1.intersection(set2):返回set1和set2的交集
  • set1.union(set2):返回set1和set2的并集
  • set1.retainAll():set1只保留某些元素(要保留的元素要在原set中存在)

Runes路由

Main(){
   
   
  Runes runes = new Runes('\u{
   
   1f605} \u6211‘);
  var str1 = String.fromCharCodes(runes);  
  print(str1);
}

Symbol

  • Symbol标识符,主要是反射用,现在mirrors模块已经被移除

函数

  • 可在函数内定义
  • 定义函数时可省略类型
  • 定义函数时可省略类型

可选参数

  • 可选命名参数
  • 可选位置参数
  • 默认参数值

匿名函数

  • 可赋值给变量,通过变量调用
  • 可在其他函数中直接调用或传递给其他函数

闭包

Function makeAddFunc(int x) {
   
   
  x++;
  return (int y) => x + y;
}

main() {
   
   
  var addFunc2 = makeAddFunc(2);
  var addFunc4 = makeAddFunc(4);
  print(addFunc2(3));
  print(addFunc4(3));
}

函数别名

typedef Fun1(int a, int b);
typedef Fun2<T, K>(T a, K b);
int add(int a, int b) {
   
   
  print('a + b');
  return a + b;
}
class Demo1 {
   
   
  Demo1(int f(int a, int b), int x, int y) {
   
   
    var sum = f(x, y);
    print("sum1 = $sum");
  }
}
class Demo2 {
   
   
  Demo2(Fun1 f, int x, int y) {
   
   
    var sum = f(x, y);
    print("sum2 = $sum");
  }
}
class Demo3 {
   
   
  Demo3(Fun2<int, int> f, int x, int y) {
   
   
    var sum = f(x, y);
    print("sum3 = $sum");
  }
}

操作符
在这里插入图片描述

流程控制语句

  • if else
  • for, forEach, for-in
  • while , do-while
  • break ,continue
  • switch case

异常

Exception类型
在这里插入图片描述

Error类型
在这里插入图片描述

异常抛出

// 抛出Exception 对象
 throw new FormatException(‘格式异常');

// 抛出Error 对象
 throw new OutOfMemoryError();

// 抛出任意非null对象
 throw '这是一个异常';

异常捕获

try {
   
   
  throw new OutOfMemoryError();
} on OutOfMemoryError {
   
   
  print('没有内存了');
} on Error catch(e) {
   
   
  print('Unknown error: $e');
} catch (e, s) {
   
   
  print('Exception details: $e');
  print('Stack Trace: $s');
} finally {
   
   
  print('end');
} 

构造函数

  • Java中写法
class Point {
   
   
  double x;
  double y;

  Point(int x, int y) {
   
   
    this.x = x;
    this.y = y;
  }
}
  • Dart建议写法
class Point {
   
   
  num x;
  num y;
  Point(this.x, this.y);
}

命名构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值