代碼必定要運行在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();})}