美文网首页Flutter学习笔记
Dart值得注意的知识点(一)

Dart值得注意的知识点(一)

作者: WinJayQ | 来源:发表于2020-04-12 22:03 被阅读0次

1. dynamic的使用

  • 在开发中, 通常情况下不使用dynamic, 因为类型的变量会带来潜在的危险
  dynamic name = 'WinJayQ';
  print(name.runtimeType);//String

  name = 18;
  print(name.runtimeType);//int

2.final&const的使用

  • final和const都是用于定义常量的, 也就是定义之后值都不可以修改

2.1 final和const有什么区别呢?

  • const在赋值时, 赋值的内容必须是在编译期间就确定下来的
  • final在赋值时, 可以动态获取, 比如赋值一个函数
String getName() {
  return 'WinJayQ';
}

main(List<String> args) {
  const name = getName(); // 错误的做法, 因为要执行函数才能获取到值
  final name2 = getName(); // 正确的做法
}

2.2 const放在赋值语句的右边,可以共享对象,提高性能

class Person {
  const Person();
}

main(List<String> args) {
  final a = const Person();
  final b = const Person();
  print(identical(a, b)); // true

  final m = Person();
  final n = Person();
  print(identical(m, n)); // false
}

3.布尔类型

  • 注意: Dart中不能判断非0即真, 或者非空即真
var message = 'Hello Dart';
  // 错误的写法
 //Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
  if (message) { 
    print(message)
  }

4.字符串类型

Dart字符串是UTF-16编码单元的序列。您可以使用单引号或双引号创建一个字符串,可以使用三个单引号或者双引号表示多行字符串:

// 2.表示多行字符串的方式
var message1 = '''
哈哈哈
呵呵呵
嘿嘿嘿''';

5.函数

如果函数中只有一个表达式, 那么可以使用箭头语法(arrow syntax)

  • 注意, 这里面只能是一个表达式, 不能是一个语句
sum(num1, num2) => num1 + num2;

5.1函数的参数问题

函数的参数可以分成两类: 必须参数和可选参数

可选参数可以分为 命名可选参数 和 位置可选参数
定义方式:

命名可选参数: {param1, param2, ...}
位置可选参数: [param1, param2, ...]
  • 5.1.1 命名可选参数的演示:
// 命名可选参数
printInfo1(String name, {int age, double height}) {
  print('name=$name age=$age height=$height');
}

// 调用printInfo1函数
printInfo1('win'); // name=win age=null height=null
printInfo1('win', age: 18); // name=win age=18 height=null
printInfo1('why', age: 18, height: 1.88); // name=win age=18 height=1.88
printInfo1('why', height: 1.88); // name=win age=null height=1.88
  • 5.1.2 位置可选参数的演示:
// 定义位置可选参数
printInfo2(String name, [int age, double height]) {
  print('name=$name age=$age height=$height');
}

// 调用printInfo2函数
printInfo2('win'); // name=win age=null height=null
printInfo2('win', 18); // name=win age=18 height=null
printInfo2('win', 18, 1.88); // name=win age=18 height=1.88
  • 5.1.3 命名可选参数, 可以指定某个参数是必传的(使用@required)
  • Required 是在meta 包下面定义的,因此你需要import package:meta/meta.dart 或者,import那些输出meta包的包,如Flutter下的package:flutter/material.dart.
// 命名可选参数的必传
printInfo3(String name, {int age, double height, @required String address}) {
  print('name=$name age=$age height=$height address=$address');
}
  • 5.1.4 参数默认值
    参数可以有默认值, 在不传入的情况下, 使用默认值

  • 注意, 只有可选参数才可以有默认值, 必须参数不能有默认值

// 参数的默认值
printInfo4(String name, {int age = 18, double height=1.88}) {
 print('name=$name age=$age height=$height');
}

6.匿名函数的使用

某些情况下,给函数命名太麻烦了,我们可以使用没有名字的函数,这种函数可以被称之为匿名函数( anonymous function),也可以叫lambda或者closure。


main(List<String> args) {
  // 1.定义数组
  var movies = ['盗梦空间', '星际穿越', '少年派', '大话西游'];

  // 2.使用forEach遍历: 有名字的函数
  printElement(item) {
    print(item);
  }
  movies.forEach(printElement);

  // 3.使用forEach遍历: 匿名函数
  movies.forEach((item) {
    print(item);
  });
  movies.forEach((item) => print(item));
}

学习内容来自Flutter从入门到实战

相关文章

网友评论

    本文标题:Dart值得注意的知识点(一)

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