Flutter基础:Dart 基础语法

·  阅读 352

打开Android Studio创建一个新工程,将main.dart中多余代码清理一下

image.png

一、var、final 和 const

1.1 var

  • dart 中使用var声明一个变量,可以赋值不同的类型;
  • var 声明的变量如果没有初始化,那么他的值为null
void main() {
    var a;
    print(a);
    a = 'hello world';
    print(a);
    a = 10;
    print(a);
}

执行结果:
flutter: null
flutter: hello world
flutter: 10
复制代码

1.2 final

  • 使用 final 声明一个只能赋值一次变量
  • 没有赋值的 final 变量是不能使用的,会报错;
  • 他是最终变量。
void main() {
    final c;
    c = 10;
    print(c);
}

执行结果:
flutter: 10
复制代码

1.3 const

  • const 是常量,必须有初始值
  • 不可修改。
void main() {
    const d = 20;
    print(d);
}

执行结果:
flutter: 20
复制代码

二、Dart 的数据类型之 num

2.1 num

示例:

void numDemo() {
  // 数值型 num : int & double
  num a = 10;
  print(a);
  a = 1.5;
  print(a);
}

执行结果:
flutter: 10
flutter: 1.5
复制代码

2.2 int 、double

int 和 double 都是继承自 num:

abstract class int extends num {
    ...
}
abstract class double extends num {
    ...
}
复制代码

示例:

void numDemo() {
    int b = 10;
    double c = 1.5;
    print(b);
    print(c);
}

执行结果:
flutter: 10
flutter: 1.5
复制代码

2.3 算术运算符

dart 中除了+ - * / %等这些常见的算术运算符,还有个特有的运算符~/(取整)。

void numDemo() {
    double b = 10.0;
    int c = 8;
    
    // 取整
    print(b ~/ c);
    
    // 转换类型
    print(b.toInt().isEven); // 偶数
    print(c.toDouble());
    print('a + b = ${a + b}');
}

执行结果:
flutter: 1
flutter: true
flutter: 8.0
flutter: a + b = 11.5
复制代码

三、Dart 的数据类型 String

  • Dart 中的字符串使用单引号双引号创建;
  • 三个引号双引号 创建多行字符串;
void stringDmeo() {
    var a = 'aa';
    var b = "bb";
    print(a + b);

    String c = "11\n"
    "22\n"
    "33\n";
    print(c);

    String d = '''44
    55
    66''';
    print(d);

    print(a[0]);
    print(a + "_____");
    print(a * 2);

    String str3 = "str3\nstr3";   // 需要转译
    String str4 = r"str3 \nstr3"; // 不需要转译
    print(str3);
    print(str4);
    print(str3.length);
}

执行结果:
flutter: aabb
flutter: 11
22
33
flutter: 44
  55
  66
flutter: a
flutter: aa_____
flutter: aaaa
flutter: str3
str3
flutter: str3 \nstr3
flutter: 9
复制代码

四、Dart 的数据类型 list

  • Dart 中的列表,可以存放不同的数据类型的;
  • 创建可变list var list1 = [1,2,3];
  • 创建不可变list var list2 = const [1,2,3]。
void listDemo() {
  var list1 = const [1, 2, 3, 'aaa'];
  var list3 = ['bbb', 'ccc'];
  print(list3.length);
  list3.add('ddd'); // 添加
  print(list3);
  list3.insert(1, 'eee'); // 插入
  print(list3);
  list3.remove('bbb'); // 删除
  print(list3);
  list3.clear(); // 清除
  print(list3);

  var list4 = [1, 3, 5, 2, 4, 9, 8, 6];
  list4.sort();
  print(list4);
  print(list4.sublist(4, 7)); // 截取
}

执行结果:
flutter: 2
flutter: [bbb, ccc, ddd]
flutter: [bbb, eee, ccc, ddd]
flutter: [eee, ccc, ddd]
flutter: []
flutter: [1, 2, 3, 4, 5, 6, 8, 9]
flutter: [5, 6, 8]
复制代码

五、Dart 的数据类型 Map

  • Dart 中的 Map 键值对;
  • 创建可变的Map: var json1 = {'one':'11','two':'22'};
  • 创建不可变的Map:var json1 = const {'one':'11','two':'22'}。
void mapDemo() {
  var json1 = {'one': '11', 'two': '22'};
  print(json1);
  print(json1['one']); //取值
  json1['one'] = '一一';
  print(json1);

  var json2 = const {'one': '11', 'two': '22'};

  print(json2.length);
  print(json2.values);
  print(json2.keys);

  var list = ['11', '22', '33'];
  print(list.asMap());
}

执行结果:
flutter: {one: 11, two: 22}
flutter: 11
flutter: {one: 一一, two: 22}
flutter: 2
flutter: (11, 22)
flutter: (one, two)
flutter: {0: 11, 1: 22, 2: 33}
复制代码

六、Dart 的运算符??= 和 ??

  • Dart中的运算符;
  • 赋值运算??=
  • 条件表达式??
void operatorDemo() {
  var a;
  a ??= 10;
  a ??= 5; //如果a为nil就赋值,如果有值就直接返回。
  print(a);

  var b;
  print(b ?? a); //?? 如果左边有值返回左边,没有就返回 右边!
}

执行结果:
flutter: 10
flutter: 10
复制代码

七、Dart 中的箭头函数

  • Dart 中的方法;
  • 方法也是一个对象;
  • 返回值和参数类型可以省略;
  • 当方法的执行语句只有一句的时候,可以使用箭头函数 => 表达式。
void main() => print(sum(4, 5));

sum (a, b) => a + b; // 不建议这样写,容易懵逼

执行结果:
flutter: 9
复制代码

八、Dart 方法的可选参数

  • 可选参数传递参数的时候必须带上形参的名字;
  • 调用方法时,可选参数的位置可以不按顺序。
void main() => print(sum2(1, c: 3, b: 2,));

sum2(int a, {int? b, int? c}) { // int? 告诉编译器,可以为空,我处理了后面为空的情况
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

执行结果:
flutter: 6
复制代码

还有一种写法是需要按顺序的:

void main() => print(sum3(1, 2, 3);

int sum3(int a, [int b = 0, int c = 0]) {
  return a - b + c;
}

执行结果:
flutter: 6
复制代码

九、Dart 方法作为参数传递

方法也是一个对象:使用场景作为参数传递!!

void functionDemo() {
  var list = [1, 2, 3, 4];
  // list.forEach(print);
  int b = 0;
  //匿名方法作为参数的实战。
  forEachDemo(list, print);
}

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

执行结果:
flutter: 1
flutter: 2
flutter: 3
flutter: 4
复制代码

十、Dart 中的匿名函数

匿名方法:没有方法名称的方法!

void functionDemo() {
  var list = [1, 2, 3, 4];
  // list.forEach(print);
  int b = 0;
  //匿名方法作为参数的实战。
  forEachDemo(list, (var a) {
    b++;
    print('元素$b = $a');
  });

  var func = () {
    print('匿名方法');
  };
  func();

  //立即执行方法、函数
  (() {
    print("立即执行函数");
  })();
}

执行结果:
flutter: 元素1 = 1
flutter: 元素2 = 2
flutter: 元素3 = 3
flutter: 元素4 = 4
flutter: 匿名方法
flutter: 立即执行函数
复制代码

十一、Dart 中的闭包

  • 定义在函数里面的函数就是闭包,闭包也是一个对象;
  • 闭包的作用:可以访问外部函数的局部变量。
void closureDemo() {
  var func = funA();
  func();
  func();
  func();
  func();
  var func2 = funA();
  func2();
  func2();
  func2();
  func2();
}

funA() {
  int count = 0;
  return () => print(count++); //这个匿名函数就是一个闭包
}

执行结果:
flutter: 0
flutter: 1
flutter: 2
flutter: 3
flutter: 0
flutter: 1
flutter: 2
flutter: 3
复制代码
分类:
iOS
标签:
分类:
iOS
标签: