dart學習筆記

代碼必定要運行在main(){}中python

定義變量能夠二種方法編程

var a =100;json

也能夠 num d1 = 100數組

忽略製表符,原標輸出:閉包

String str = r"xxxxxxx \n xxxxxxx"異步

print(str )async

格式轉換,字符轉數字函數

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

assert(one == 1)this

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類型,也就是往事件隊列加入一個列表,
能夠顯示申明本函數類型和隱式申明
顯示:
Future<int>getName()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();})}
相關文章
相關標籤/搜索