标签搜索

Dart基础一

cicaba
2019-04-03 / 0 评论 / 5 阅读 / 正在检测是否收录...

一、常量与变量
运算符:~/ 取整
赋值运算符: ??= 无值赋值
常用属性:isNaN(是否是非数字)、isEven(是否是偶数)、isOdd(是否是奇数

常用方法:abs()(取绝对值)、round()(四舍五入)、floor()(大于它的最小整数)、ceil()(小于它的最大整数)、toInt()(变成整型)、toDouble()(变成浮点型)

二、字符串
字符串创建:可以使用三个单引号或者三个双引号创建多行字符串、使用r创建raw原始的字符串.
字符串操作:字符串也可以进行+ * == [],分别为字符串相加,乘以倍数,是否相等,取某个字符.
插值表达式:${expression}常用属性:length、isEmpty、isNotEmpty

常用方法:

三、布尔型表示:bool

四、List
List中的元素可以是有不同的类型
创建List :var list=[1,2,3];
创建不可变得List:var list = const[1,2,3]
构造创建:var list=new List();//在dart2 中已经去掉了new关键字

五、Map
创建map:var user={"name":"zoey","age":18}
创建不可变的map:var user=const {"name":"zoey","age":18}
构造创建var user=new Map();
var map1={"first":"dart",1:true};//key还可以不是字符串??

六、dynamic
可以理解为泛型

七、关系运算符

判断内容是否相同使用==,而在java中==表示的是判断两个引用是否相等,判断内容相当用的是equals

八、可选参数

可选命名参数:{param1,param2,...}
必填的参数不用写参数名,可选的参数必须要写参数名,而且可以跳过一些参数,不按顺序传,只要参数名对得上就可以了,这种方式用得比较多
可选位置参数:[param1,param2,...]
根据参数的位置,默认的进行传参,但不能跳过某个参数
可选参数必须在必选参数后面

八、构造函数

当想在对象上执行多个操作时可以使用级联操作符(..)//链式调用
私有属性使用(_)开头
实例变量: 如果在定义实例变量时设置它的值,而不是在构造函数或其他函数中赋值,则赋值操作发生在构造函数和初始化列表执行之前

如果父类没有无名无参数的默认构造函数,则子类必须手动调用一个父类构造函数。在:后面构造函数体之前指定要调用的父类构造函数

class Person {
  Person.fromJson(Map data) {
    print('in Person');
  }
}

class Employee extends Person {
  // Person 没有默认构造函数
  // 所以必需指定 super.fromJson(data) 构造函数
  Employee.fromJson(Map data) : super.fromJson(data) {
    print('in Employee');
  }
}

重定向构造函数: 有些构造函数只是调用同一个类中的另外一个构造函数

class Point {
  num x;
  num y;

  Point(this.x, this.y);                // 该类的主要构造函数
  Point.alongXAxis(num x) : this(x, 0); // 调用主要构造函数
}

常量构造函数: 如果类生成从来不改变的对象,则可以把这些对象定义为编译器常量。用一个const构造函数赋值为实例变量,并将实例变量设置为final来实现

class ImmutablePoint {
  final num x;
  final num y;
  const ImmutablePoint(this.x, this.y);
  static final ImmutablePoint origin = const ImmutablePoint(0, 0);
}

工厂构造函数: 如果一个构造函数并不总是要创建新的对象(或从缓存中返回实例),可以用factory关键字修饰构造函数

class Logger {
  final String name;
  bool mute = false;

  // _cache is library-private, thanks to the _ in front of its name.
  static final Map<String, Logger> _cache = <String, Logger>{};

  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final logger = new Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) {
      print(msg);
    }
  }
}

九、类型测试操作符
操作符 描述
as Typecase(类型转换)
is 如果对象是该类型,则返回true
is! 如果对象是该类型,则返回false
assert语句只在检测模式下有效,在生产模式下无任何效果
使用assert语句检测执行条件。如果条件是false,则中断执行并抛出异常(AssertionError)

0

评论 (0)

取消