语法问答
Dart语法输出调试信息的方法叫?
print
Dart语言里定义抽象类的关键字是?
abstract
Dart语言里String转Int的方法是?
int.parse
Dart语言的数据类型String是首字母大写,而int是首字母小写?
受c/c++和java的影响,区分简单类型和引用类型,字符串是引用类型,是一个类的实例(类的命名规范是大写开头);int是简单类型。
知识要点
- 基本数据类型
- 类型判断,类型转换,级联操作
- 集合类型
- List
- Set
- Map
- 函数的定义
- 可选参数
- 命名参数
- 箭头函数
- 异步async,await,Future类型
- 类
- 构造函数
- 内部,外部定义,静态
- extends,implement,with
- 外部库,内置库
- 库的重命名,部分导入
基本语法
Dart的特点
Dart非常注重语义化
Dart使用严格的分号
Dart的基本数据类型
数据类型:int、double、num
字符串:String
布尔:bool
数组:List
字典:Map
Dart的常量类型,自动类型推断
var:可以有多次赋值
const: 只能在定义的时候赋值
final:有且只有一次赋值机会的常量类型
Dart的相关符号使用
int.parse || double.parse:类型转换
+:字符串拼接
${} || $:定义字符串的表达式
“”" “”":定义多行字符串
is:类型判断
.runtimeType:类型获取(获取运行时的类型)
Dart的List常用方法
.add():只能添加一个元素
.addAll():基于一个iterable类,两个数组合并,类似JavaScript的数组.concat方法
.first:取第一个元素
.lastt:取最后一个元素
.shuffle():打乱原数组
.retainWhere(()=>{}):根据条件保留
.removeWhere(()=>{}):根据条件移除
.removeRange(start,end):范围移除
.remove():移除某个元素
.removeAt():移除某个下标的元素
.removeLast():移除末尾元素
.fillRange(start,end,value):从start到end每个元素用value替换
.insert(index,value):在某个下标插入一个元素
.inser(index,list):在某个下标插入一个数组
.setAll(index,list):从inde开发,逐个替换list中的元素
.toList(growable:false):生成一个新数组,growable未false是一个固定长度,默认为true
.join():所有元素连接成一个字符串
.split():使用指定的分隔符字符串将一个String对象分割成子字符串数组
.map():遍历现有的List的每个元素,并做处理,返回一个新得Iterable
.reversed:获取反向的Iterable
.take(count):从0开始取count个元素,并返回结果
.takeWhile((e)=>(bool)):从0开始取,直至第一个不符合函数的元素,将其前面的元素都返回
clear():清除所有值
Dart的判断方法
.contains():是否包含元素,包含为true,不包含为false
.where(()=>{}):返回全部符合条件的元素
.any((()=>{})):只要符合条件就返回true
.every((()=>{})):只要不符合条件就返回false
Dart的查找方法
.forEach(()=>{}):遍历所有元素
.firstWhere(()=>{}):返回第一个满足条件的元素(不是元素的inde)
.laseWhere(()=>{}):从后往前找,返回第一个满足条件的元素(不是元素的inde)
.indexWhere(()=>{}):返回第一个满足条件的元素的index
.laseIndexWhere(()=>{}):从后往前找,返回第一个满足条件的元素的index
Dart的类型转换
.toSet():转为Set
.asMap():转为Map
.toList():转为List
.toString():转为String
int.parse():转为int
double.parse():转为double
Dart的Map的常用属性和方法
注意:Map的key默认是字符串
常用属性:
keys:获取所有的key的值
values:获取所有的value的值
isEmpty:判断字典是否为空
isNotEmpty:判断字典是否不为空
常用方法:
remove(key):删除指定key的数据
addAll({…}):合并映射,给映射内增加属性
containsValue:查看映射内的值,返回true/false
update(key,()=>{}):根据指定的key对应的value做出修改,同时Map本身也会被修改
updateAll(()=>{}):根据参数内的函数修改Map
forEach:遍历Map,遍历时不可add或者remove
map:遍历每个键值对,根据参数函数对key,value做出修改,转换成其他泛型Map
// eg Map<String,int> mapOne = {'a':1,'b':2}; Map<int,String> mapTwo = mapOne.map((key,value){ return MapEntry(value,key); })
clear():清除所有键值对
.where(()=>{}):返回全部符合条件的元素
.any((()=>{})):只要符合条件就返回true
.every((()=>{})):只要不符合条件就返回false
Dart的函数定义
1)参数
// 1.参数 func(name) // 2.强制类型 func(String name) // 3.默认值 func(String name = "name") // 4.可选参数 func(name,[age,gender]) // 5.命名参数 func(name,{age,gender})
2)箭头函数:和JavaScript不一样,Dart的箭头函数只能写一“行”(严谨说法:只能写一个表达式)
3)自执行方法:((){})();
4)异步:async,await(Future类型)
bar() async{ return "hello"; } // 1.形式1 foo1() async{ String value = await bar(); print(value); } // 2.形式2 foo2() { return Future(bar).then((value)=>print(value)); }
Dart的类(class)
1)默认成员是public,加_变为私有(同一个文件可以访问,不同文件不可以访问)
2)构造函数,初始化构造
3)静态方法和静态属性
非静态方法可以访问静态或非静态成员
静态方法只可以访问静态成员
4)…:连缀操作
Person p = new Person(); // 加分号即为结束 p..name="name" ..age=12;
5)抽象abstract
抽象类通过abstract关键字来定义
抽象类中不实现的方法体就叫抽象方法
抽象类不能被new(实例化),只有继承或实现它的子类可以实例
用法:
复用抽象类的方法,并且希望用抽象方法约束子类实现,那就用extends
只是把抽象类当标准,那就用implements
注意先后顺序:extends->mixins->implements
6)继承extends
继承抽象类,则必须实现抽象类中的抽象方法
7)混入with(mixins)
作为混入的类只能继承自Object
没有构造函数
可以混入多个,如果有相同方法,后者会替换前者
8)实现implements
实现抽象类,则必须实现抽象类的所有属性和方法
Dart的文件引入
show:部分导入
hide:部分不导入
Dart的库
内置库
import "package:flutter/material.dart"; import "dart/math";
外部库
https://pub.dev/packages https://pub.dartlang.org/flutter
自定义库
实践
题目:实现⼀个抽象类Vehicle,定义数值⻋轮wheels,定义抽象⽅法 getWheelsNum。实现⼀个汽⻋类继承⾃Vehicle。新建汽⻋实例调 ⽤getWheelsNum打印⽇志wheels数值。
abstract class Vehicle { int wheels = 0; getWheelsNum(); } class Car extends Vehicle { getWheelsNum() { print(wheels); } } main() { Car car = new Car(); car.getWheelsNum(); }