Dart
主函数
//main 函数
void main() {
print("Hello world2");
}
变量
⚠️:强类型!!但可var
void main() {
String s = "字符串";
print(s);
int num = 1223;
print(num);
var test = 993; //强类型 但能推断
print(test);
}
常量
const PI = 3.14159;
print(PI); //🉑️
final PI = 3.14159;
PI = 333;
print(PI); //❌
final a = new DateTime.now();
print(a); //🉑️
const a = new DateTime.now(); //❌
⚠️: 看const 和final的区别在于初始化
链表
var lst = ['aaa', 'ss'];
print(lst);
List lst2 = new List<String>();
lst2.add('zhangsan');
lst2.add('www');
lst2.add('zhangzzzsan');
lst2.sort();
print(lst2[1]);
Map
var person = {'name': 'zz', 'age': 11};
print(person['name']);
var p = new Map();
p['name'] = "lisi";
p['work'] = "grammer";
print(p);
is 判断类型
print(p is Map);
print(p is String);
??= 如果为空 赋值
int b;
b ??= 2; //如果为空 赋值
print(b);
三目运算算法
print(true ? "true" : "false");
?? 为空 就等于??后面的值
var aa;
print(aa ?? 100); //a 为空 就赋值??后面的值
类型转换
String num = "122";
print(int.parse(num));
String.isEmpty && int.isNaN
bool a = num.isEmpty;
print(a);
var b = 0 / 0; //不会报错
if (b.isNaN) {
print("isNaN");
}
定义可选参数
String printUserInfo(String name, [int age]) {
return ("name:${name}---age:${age}");
}
定义命名参数
String printUserInfo(String name, {int age, String sex = '男'}) {
if (age != null) {
return "${name}---${age}---${sex}";
} else {
return "${name}----noage----${sex}";
}
}
把方法当作参数的方法
fn1() {
print("fn1");
}
fn2(fn) {
fn();
}
//调用
fn2(fn1);
List 操作(筛选+赋值)
Iterable<T> map<T>(T f(E e)) => MappedIterable<E, T>(this, f);
(){}的方法
List lst = [1, 2, 3, 4, 5, 6];
var newList = lst.map((value) {
if (value % 2 == 0) {
return value * 2;
} else {
return value;
}
}).toList();
()=> 的方法
newList = lst.map((value) => value % 2 == 0 ? value * 2 : value).toList();
常驻内存
fnTest() {
int a = 0; //不会污染全局 常驻内存
return () {
a++;
print(a);
};
}
⚠️:调用:
//不会+1
fnTest()();
fnTest()();
fnTest()();
//+1 版本
var bb = fnTest();
bb();
bb();
bb();
bb();
类 构造函数
Person(this.name, this.age); //默认构造函数
Person.now(String name) {
this.name = name;
print("命名构造函数");
}
get set
get nameAddId {
return this.name +(this.age).toString();
}
静态方法
static String name = "ddddddsss";
int age;
Person(this.age); //默认构造函数
Person.now(String name) {
print("命名构造函数");
}
get nameAddId {
return name + (this.age).toString();
}
static getUserInfo() {
print(name);
}
? is as …连级操作
p?.printinfo();
p as Person
p is Person
Person p1 = new Person(11);
p1
..age = 112
..birth = 2233;
继承 + super
class Person {
String name;
int age;
Person(this.name, this.age);
void printInfo() {
print("${name}---age:${age}");
}
}
class Web extends Person {
Web() : super("kdjkd", 333) {}
}
复写父类方法
class Web extends Person {
Web() : super("kdjkd", 333) {}
@override
void printInfo() {
print("姓名:${name}");
}
}
⚠️:建议加上 @override
利用super实现对父类函数调用
class Web extends Person {
Web() : super("kdjkd", 333) {}
@override
void printInfo() {
print("姓名:${name}");
}
void run() {
this.printInfo();
super.printInfo();
}
}
抽象函数
abstract class Animal {
void eat(); //抽象方法
void printInfo() {
print("抽象类的普通方法");
}
}
class Dog extends Animal {
@override
void eat() {
print("小狗 在吃");
}
}
多态
⚠️:无非就是多实现个Cat的eat的方法 不同于Dog
接口
⚠️:接口还是abstract 这里没用interface
⚠️:实现的时候还是implement
abstract class Db {
String uri;
void add();
void save();
}
class MySql implements Db {
@override
String uri;
@override
void add() {
// TODO: implement add
}
@override
void save() {
// TODO: implement save
}
}
mixins
class A {
void printA() {
print("this is A");
}
}
class B {
void printB() {
print("this is B");
}
}
class C with A, B {
//mixins 只能继承object 的不是能是其他类
//不能有构造函数
}
泛型
- 简单使用
T getData<T>(T value) { return value; } void main() { print(getData<int>(222)); }
- 泛型类
abstract class Cache<T> { getBeyKey(String key); void setByKey(String key, T value); } class FileCahe<T> implements Cache<T> { @override getBeyKey(String key) { // TODO: implement getBeyKey throw UnimplementedError(); } @override void setByKey(String key, T value) { print("key${key}---Vlaue${value}"); } } void main() { var fileCache = new FileCahe<int>(); fileCache.setByKey("kdjkdj", 343); }
async await 异步
testAsync() async {
return "Hello world";
}
void main() async {
var result = await testAsync();
print(result);
}