dart学习笔记

代码一定要运行在main(){}中

定义变量可以二种方法

var a =100;

也可以 num d1 = 100

忽略制表符,原标输出:

String str = r"xxxxxxx \n xxxxxxx"

print(str )

格式转换,字符转数字

var  one = int.parse('1');

assert(one == 1)

var onep = double.parse("1,2");

格式化转换数字转字符

Srting str1 = 1.toSrting()

带小数转换

Srting srt8 = 1.2223.toSrtingAsFixed(2)  //保留二位

打印变量类型:

var a = "rr";
print('${a.runtimeType}');

 

 

  【】例表:

assert([1,2,3,4] [1]==2);

assert([1,2,3,4].length == 3);

assert([].isEmpty == true);

assert([1].isEmpty == false);

 

list支持多种元素比如变量 list  布尔,数字,例:

var a = "5";
var b = true;
var c = [1,2,3,3];
var alist=[1,"aa",a,b,c];

打印运行内存时的变量类型:
var a = [1,2,3,4,5];
print('a[0] = ${a[0].runtimeType}');

列表循环列表方法:
var list =[1,2,3];
list.forEach((i){
print(i);
});

传参也可以是一个函数,比如下面代码!
var list = [1,2,3];
list.forEach(printList);
}
printList(name){
print(name);



——————————————————————————————————————————————————————————————


max类型  类同于js的对象,py的字典
var colos2 = new Map();
colors2['first']= "red";
colors2[second]="green";

也可以直接定义:

var color1 = {
  'first':'xxx',
  'third':'blue',
}
 访问字典方法:
print(colors2['second'])  // 返回某一项
print(${colors2.length}); //返回总长度




dart中的函数 函数前第一个是返回类型 ,可以用默认,参数中,可以指定数据类型 ,也可以用默认,第一个例子是标准写法:

Srting Hello(Srting name){
  return 'hello $name';
}
简要写法:
hello(name){
  return 'hello $name';
}

箭头函数写法:
  不能复杂的语句,比如if 什么判断,只能写简半单的单条语句,几乎只能用表达式,var hello(name)=>a1+1 ,支持无名函名。

var foo=()=>'xxx';
print(foo());

闭包
——————————————————————————————————————————————————————————————————————————
当函数返回一个函数,而返回的函数又用到了上级函数的变量,形成一个相互引用的环,就这叫闭包,在内存中永远不被销毁、简单示例:
main(){
Function make(addby){
addby ++;
return (i)=>addby+i;
}
var add1 = make(2);
var add2 = make(5);
print(add1(3)); //返回6
print(add2(5)); //返回11
}
函数传参:fun(a,b,c)  本函数有三人个参数,用的时候少传多传都会报错

【】中括号代表位置参数
fun(a,[b,c,d]) [] 代表位置参数,不传参的话默认为null

func(a,[a=5,c="foo"])给位置参数传默认参数

以下例子:传参时只能了二个参数,实际调用时值为第三个有默认值 ,第四个没有值为null,所以结果为:1,2,3,null
funb(a,[b,c=3,d]){
print('$a,$b,$c,$d');
}
funb(1,2); // 1,2,3,null

    {}代表命名参数,可有可无 用:冒号给默认值

func(a,{a:3,b:"ww"})


条件分支语句:条件分支语我句和别的语言几没有区别,只是功能更强大,支持指定跳转,类似于goto标记,不像python 只用一次方法解决,实现起来比较灵活
例:
int a = 0;
while(a>5){
a++;
  print('$a');
}

例:
int b = 0;
do{
  b++;
  print('hello b = $b');
}while(b<0);


continue //退出本次
break //退出这段代码
————————————————————————————————————————————————————————————————

switch 例子:
switch("flutter"){
case 'jimmy':
print("no");
break;
case "flutter":
print("ok");
} //中间不加break会报错,不像其它语言会继椟往下走,纯报语法错误 !!!
————————————————————————————————————————————————————————————————————————————————————————
在使用枚举做值时,多少个值就要写多个case ,否则会报错,如果不想写完,可以定义其中一项为defalut
示例:
 1 main() {
 2  switch(color){
 3   case Color.red:
 4   print("red");
 5   break;
 6   default:
 7  }
 8 }
 9 enum Color{
10  red,green,blue
11 }
12 Color color = Color.red;

 dart  支持goto 之类的跳转标志,以下代码示例:

 1 main() {
 2  xsy();
 3 }
 4 enum Color{      //定义枚举
 5  red,green,blue
 6 }
 7 Color color = Color.red;  //初始化枚举值
 8 xsy() {
 9  switch (color) {
10   case Color.red:
11    print("Color.red");
12    continue goBlue;    //定义跳转目录
13 //      break;
14   case Color.green:
15    break;
16   goBlue:  // 跳转标志
17   case Color.blue:
18    print('Color.blue');
19    break;  
20   default:
21  }
22 }

 异常捕获

main() {
goThrow();
}
void goThrow(){
try{
print("0");
getName();
}on Exception catch(e){
print('exception');
}
on NullThrownError catch(e){ // 接到了异常 catch 可以二个参数,一个行号,一个类型e
print("nuerror");
}
}
getName(){
if(true){
throw new NullThrownError(); // 定义抛出类型
}
}



_________________________________________________________________________________________

oop编程之 class 类


main() {
point p1 = new point(1, 2);
point p2 = new point.fromjson({});
print('p2.x=${p2.x}');
}
class point{ //自定义一个类
num x;
num y;

point(num x,num y){ //构造方法
this.x = x;
this.y = y;
} // 可简写成(print(this.x,this.y))

point.fromjson(Map json){ //命名函数实现重载
this.x = 5;
}
}
以上代码解释:
有时候需要多种初始化方法比如 同时出现void a(){...}, void a(int a){....},void a(int a,int b){......}
因为有时候需要传一个参,有些需要传二个参
dart不支持 重载,可以用命名构造函数来解决 point.fromjson(Map,json);类.名字,名字随意

//重定向构造函数:
有时候只想传一个参,但是又想用别的构造函数的方法可以使用重定向方法,重定向的不能使用括号{},不能写逻辑
//point.alongxAxis(num x) : this.fromjson(1,2,3);

父类构构函数 附继承方法:
class person{

  person(int a){} //假设这儿有一个只传一个参的构造
  person.fromjson(int a){}
}

class pointA extends person{
  num x;
  num y;
  num z;
  point2(this.x,this.y):super(x); 冒号能继承父类的构造
  points.fromjson(int a, int b, int c){this.x =a; this.y = b};
}
//point.alongxAxis(num x) : this.fromjson(1,2,3);

//初始化例表:

class point3{

final num x;
final num y;
final num z;
point3(x,y):this.x=x;y=y,z=x+y;
}
dart中的异步
————————————————————————————————————————————————————————
dart 运行时分为一个主进程,一个微程,一个事件进程,主进程先运行扫描一次,然后运行微进程 ,然后监听事件,又然后扫描微进程,在微进程和
事件进程中切换 当使用了async await 就表则自动注册了事件进程,本函数返回数返回值为Futuer类型,也就是往事件队列加入一个列表,
可以显示申明本函数类型和隐式申明
显示:
FuturegetName()async{
await getxxxx();
 print('xxxxxxxxxxxxxxx')
return 123; // 返回一个数值,不一定要这样做
}
隐式:
getName()async{
await getxxxx();
print("xxxxxxxxxxxxxxxxxxx");
}
事件队列排序
getfoo1().then(()=>getfoo3()).then(()=>getfoo2());
回调方法事件排序:
getfoo3().whenComplete((){
getfoo2.whenComplete((){
getfoo1();
})
})
数组列表方式:
Futuer.wait([foo(),fxx(),fzz()]).then(List list){
list.forEach((i)=print(i))
}
异步事件异常
在事件队列中抛出异常:
void goThrow(){
new Future(()=>print('start')).then((_)=>new Future.error('xxxxx'));
.catchError((e)=>print(e))
}

用whenComplete()方法例子:
void goThrow(){
new Future(()=>print('start')).then((_)=>new Future.error('xxxxx'));
.whenComplete(()=>print("finally"));
.then(()=>print("don\t"));//这句代码由于上句出错了,所以这句是运行不了的,代码也经出错
.catchError((e)=>print(e));
}
混合类型异常(同步和异步都有的代码怎么捕异常)
main(){
  func3().catchError((e)){
    print('e = $e');
});
}

fun1(){
  throw 'func1 is error';
}
fun2(){
  throw "xxxxxxxxxxxxxx";
}
加了Future 就是异步 以下代码运行不 了,,必须要加sync 关健字才能捕
Future fun3(){
  fun1();
  return new Future((){
  fun2();
});
} //错误 代码

正确方法之一:

Future fun3(){
return new Future.sync((){
  fun1();
  return new Future((){ //本代码因为上面出错,这儿运行不了的,
  fun2();  
})
})
}
正确方法之二:

Future func3() async{
  fun1()
  return new Futurn((){
  fun2();
})
}



 

转载于:https://www.cnblogs.com/fgxwan/p/10034403.html

你可能感兴趣的:(dart学习笔记)