美文网首页Flutter
Dart 基础语法

Dart 基础语法

作者: 晨曦的简书 | 来源:发表于2021-10-28 14:19 被阅读0次

var、final 和 const

var 关键字

void main() {
  var a;
  print(a);
  a = 'hello world';
  print(a);
  a = 10;
  print(a + 20);

  var b = 10;
  print(b);
}
  • 使用 var 声明一个变量,可以赋值为不同的类型。
  • var 声明的变量如果没有初始化,那么变量的值为 nil

final 关键字


  • 使用 final 声明的变量只能被赋值一次,再次赋值的话会报错,它是最终变量。
  • 使用 final 声明的变量在使用前必须有值,不然也会报错。

const 关键字


  • 使用 const 声明的常量初始化的时候必须被赋值。
  • 使用 const 声明的常量不能被修改。

Dart 的数据类型之 num

相对于 OC 来说 Dart 的数据类型会少很多,数值型 num 分为两种 intdouble

如图,num 类型的变量如果被使用的话必须要有值,double 类型的变量可以被重新赋值为 int 型数据,但是 int 型变量不能被重新赋值为 double 类型。

void main() {
  int a = 10;
  print(a.isEven); // 判断是否是偶数
  print(a.isOdd); // 判断是否是奇数

  // 运算符 + - * / % (取模)  ~/ (取整数)
  int b = a + 10;
  int c = a - 5;
  int d = a * 3;
  double e = a / 2;
  int f = a % 6;
  int g = a ~/ 8; // 这个结果为 1,相当于 a 除 8 的结果取整

  // 转换类型
  int h = 10.3.toInt(); // double 类型转换为 int
  double i = 5.toDouble(); // int 类型转换为 double
}

Dart 的数据类型之 String

void main() {
  // 用单引号或者双引号修饰都可以
  var a = 'hello';
  var b = "world";
  String c = a + b;

  // 用 3 个引号修饰,字符串可以换行
  String d = '''hello
  world''';

  // 获取字符串 a 中的第 0 个字符跟第 1 个字符,这里可以看到会非常方法,可以用下标的方式去取
  print(a[0]);
  print(a[1]);

  String e = a * 2; // 这个结果等于 hellohello,就是把 a 的值再复制一份

  int f = 10;
  int g = 20;
  int h = f + g;
  print('a + b = ${a + b}'); // 输出结果为 a + b = 30,在字符串里面拼接运算表达式
  print('a + b = $h'); // 这个结果跟上面输出结果是一样的

  String str = "hello\nworld";
  print(str); // 这个输出的结果就是 hello 换行之后是 world

  String str1 = r"hello\nworld";
  print(str1); // 这个输出的结果就是 hello\nworld, \n 没起作用

  print(str1.length); // 打印字符串长度
}

更多的字符串使用方法,大家也可以点进去到 String 里面去看,光标移到 String 上面,按住 command 并点击鼠标。

Dart 的数据类型之 List & Map

Llist

Dart 中的 list 就相当于 oc 中的数组,但是稍微不同的是 list 中可以存储不同类型的元素,下面是 list 的一些用法。

void main() {
  // 不可变 list,数据先去加 const 修饰
  var list = const ['one', 'two', 'three', 1];

  // 可变 list
  var list1 = ['one', 'two', 'three', 1];
  // 根据下标打印元素
  print(list1[1]);
  // 修改下标为 1 的元素
  list1[1] = 3;
  // 打印 list 元素数量
  print(list1.length);
  // 追加一个元素
  list1.add(5);
  // 在 下边为 1 的位置插入一个元素
  list1.insert(1, '33');
  // 删除某个元素
  list1.remove('one');
  // 清空 list
  list1.clear();

  var list2 = [1, 3, 2];
  // 对 list 进行排序,得到的结果就是 [1, 2, 3]
  list2.sort();
  // 获取 list 下标 1 到 3 之间的元素
  list2.sublist(1, 3);
}

Map

Dart 中的 Map 相当于 OC 中的字典,以键值对的形式存储。其中 List 也可以转换为 Map,以下标为 key,对应的元素为 value

void main() {
  // 不可变 map
  var map1 = const {'key1' : 'one','key2' : 'two'};

  // 可变 map
  var map2 = {'key1' : 'one','key2' : 'two'};
  // 获取 key 对应的值
  print(map2['key1']);
  // 修改 key 对应的值
  map2['key1'] = 'hello';
  // 打印 map 的长度
  print(map2.length);
  // 获取 map 中所有的 value
  print(map2.values);
  // 获取 map 中所有的 key
  print(map2.keys);

  // 将 list 转为 map,结果就是 {0: one, 1: two, 2: three}
  var list = ['one', 'two', 'three'];
  var map3 = list.asMap();
}

Dart 中的运算符

这里介绍 Dart 中一些特意的运算符,别的都是跟其他语言一样,是一些通用的运算符。

void main() {
  var a;
  // 如果 a 没有值,就进行赋值,如果 a 有值就不会赋值
  a ??= 10;
  
  var b;
  // 如果左边有值就打印左边,如果左边没值就打印右边
  print(a ?? b);
}

Dart 中的方法跟箭头函数

Dart 中方法也是一个对象,返回值跟参数类型可以省略,当方法执行语句只有一句的时候可以使用箭头函数 => 表达式。

void main() {
  print(sum(10, 20));
  print(sum1(10, 20));
  print(sum2(10, 20));
}

// 正常写法
int sum(int a, int b) {
  return a + b;
}

// 省略参数跟返回值
sum1(a, b) {
  return a + b;
}

// 使用箭头函数 => 表达式
sum2(a, b) => a + b;

Dart 方法的可选参数

void main() {
  // 这里方法调用的时候参数可选,但是可选参数必须带上形参的名称
  print(sum(20));
  print(sum(20, b: 10));
  // 这里可以不用按照方法中的顺序传参
  print(sum(20, c:5, b:10));


  // 用 [] 修饰可选参数调用的时候可以不用带参数名称,但是必须按参数的顺序传值
  print(sum3(20, 5, 10));
}

sum(a, {b, c}) {
  b ??= 0;
  c ??= 0;
  return a - b + c;
}

// 参数如果为 int 型,就需要用 int?修饰,告诉编译器参数可以为空
sum1(a, {int? b, int? c}) {
  b ??= 0;
  c ??= 0;
  return a - b + c;
}

// 也可以给参数一个默认值
sum2(a, {int b = 0, int c = 0}) {
  return a - b + c;
}

// 用 [] 修饰可选参数调用的时候可以不用带参数名称,但是必须按参数的顺序传值
sum3(a, [int b = 0, int c = 0]) {
  return a - b + c;
}

Dart 方法作为参数传递

Dart 是纯面向对象语言,方法也是一个对象,可以作为参数用来传递,这点有点类似 OC 中的 block 的作用。下面例子中我们定义一个 helloDemo 方法,可以用变量 hello 来接收并调用。以及参照系统方法定义了 forEachDemo 来遍历打印 list 中的元素,并把 printElement 方法作为参数来传递。

void main() {
  var hello = helloDemo;
  hello();

  var list = [1, 2, 3, 4];
  // list.forEach(print);
  forEachDemo(list, printElement);
}

helloDemo() => print('hello');


forEachDemo(List list, void func(var element)) {
  for (var e in list) func(e);
}

int b = 0;
printElement(var a) {
  b++;
  print('元素$b = $a');
}

Dart 中的匿名函数

void main() {
  // 这里 () {} 部分属于匿名函数,但是需要用一个变量接收,才能被调用,匿名方法也可以作为参数传递
  var func = () {
    print('匿名方法');
  };
  func();

  // 以 (() {}) () 这种形式实现的匿名函数会立即执行,属于立即执行函数
  (() {
    print('立即执行函数');
  })();
}

Dart 中的闭包

闭包: 定义在函数里面的函数就是闭包,闭包也是一个对象。
闭包的作用:可以访问外部函数的局部变量。

理论上 return 之后函数执行完毕,函数中的变量就会被销毁,但是如图可以看到,我们连续执行了 3 次 func(),变量 a 的值会被累加,并没有被销毁。这就是闭包的特点,只要我们拿到 func 这个变量,a 就会一直存在内存中。

相关文章

  • dart入门潜修系列教程

    dart入门潜修基础篇之基本语法和内置类型dart入门潜修基础篇之方法dart入门潜修基础篇之操作符dart入门潜...

  • Flutter笔记--Dart任务调度

    dart异步代码是如何执行的 在Dart基础语法一文中我们了解了dart的一些基础语法,包括异步代码的使用。在da...

  • Flutter学习笔记

    Dart基础语法 一、选择开发工具 首先需要安装Dart SDK(https://www.dart-china.o...

  • Flutter一:Flutter简介、环境配置

    以项目驱动,中间穿插各个组件 第一天:Flutter简介、环境搭建、Dart语法基础一 第二天:Dart语法基础二...

  • Flutter-Dart基础语法入门

    Dart语法基础 Dart语言简介 Dart是Google推出的一门编程语言,最初是希望取代Javascript运...

  • dart语法7-泛型

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法8-库

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法10-生成器

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法9-异步

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

  • dart语法11

    dart语法1dart语法2-内置类型dart语法3-函数dart语法4-操作符dart语法5-异常dart语法6...

网友评论

    本文标题:Dart 基础语法

    本文链接:https://www.haomeiwen.com/subject/seosaltx.html