美文网首页
Dart语言30分钟快速入门

Dart语言30分钟快速入门

作者: 微笑面对start | 来源:发表于2019-07-29 16:31 被阅读0次

Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准 [1] 。它被用于web、服务器、移动应用 [2] 和物联网等领域的开发。它是宽松开源许可证(修改的BSD证书)下的开源软件。

Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、具体化泛型(reified generics)、可选类型(optional typing)和sound type system

1.注释

//单行文本 (灰色)
///单行文本  (彩色)
/**
* 多行文本
*/

2.导包

 
       1.在 import口语句后面需要接上库文件的路径 import 'dart:io’;
       2.对 Dart 语言提供的库文件使用 dart:xx 格式 import 'dart:core';
       3.第三方的库文件使用 package:xx格式  import 'package:flutter/material.dart';;
       4.当引用的库拥有相互冲突的名字,可 以 为其中一个或 几个 指定不一样的前缀 。 这与命 名 空 间的概念比较接近,示例代码如下:
        import 'package:libl/ libl.dart’;
        import ’package:lib2/lib2.dart’ as lib2;
        Element element!= new Element(); // 使用 libl 中的 Element lib2.Element element2 = new lib2.Element();// 使用 lib2 中的 Element
        libl/libI.dart及 lib2/lib2.dart里都有 Element类,如果直接引用就不知道具体引用哪 个 Element类,
        所以代码中把 lib2/lib2.dart指定成 lib2,这样使用 lib2.Elem巳nt就不会发生 冲突。

        5.引用库的一部分
        如果只需要使用库的一部分内容,可以有选择地引用,有如下关键字:
        show关键宇:只引用一点。
         hide 关键字:除此之外都引用 。
        示例代码如下 :
        // 导入foo
        import ’ package:libl/libl.dart ’
        // 除了 foo 导入其他所有内容
        import 'package:lib2 / lib2.dart ’
        show foo;
        hi de foo;
        代码中的第一行只引用 libI.dart下的 foo部分,第二行代码引用 lib2.dart下的所有内容 除了 foo。
    

3.数据类型。在看代码前我们要了解一点

Dart中字符串打印可以用{value}输出结果,如"打印字符串{text}"

    //-----------整数-----------
    int n01 = 1;
    var n02 = 2;
    print("整数类型 n01:${n01}  n02:${n02}");

    //-----------小数-----------
    double d01 = 1.0;
    var d02 = 1.1;
    print("小数类型 d01:${d01} d01:${d02}");

    //-----------boolean-----------
    bool f01 = false;
    var f02 = true;
    print("布尔表达 f01:${f01} f02:${f02}");

    //-----------字符串-----------
    String s1 = "s1";
    String s2 = "s2";
    String s3 = s1 + " : " + s2; //注意字符串连接只可在方法体内使用,在全局声明必须是静态的,否则会报错
    var s4 = "s4";
    var s5 = "s5";
    var s6 = s4 + s5;
    print("字符串 s3:${s3} s6:${s6}");

    //if判断
    var sex = "boy";
    if (sex == "boy") {
      print("sex 里面的if 判断:" + sex);
    }

4.list、map和set 使用和声明

    //-----------list -----------
    //list整数
    var list01 = [1, 2, 3, 4, 5, 6];
    for (int i = 0; i < list01.length; i++) {
      print("list and for循环之list01 :${list01[i]} list01长度:${list01.length} ");
    }
    //list字符串
    var list02 = ["第一名", "第二名", "第三名", "第四名", "第五名"];
    for (int i = 0; i < list02.length; i++) {
      print("list and for循环之list02 : ${list02[i]}");
    }
    //list 直接声明
    var list03 = new List<String>();
    list03.add("0");
    list03.add("1");
    list03.add("2");
    print("list03 :${list03[0]} ${list03[1]} ${list03[2]}");

    List list04 = new List<String>();
    list04.add("3");
    list04.add("4");
    list04.add("5");
    print("list04 : ${list04[0]} ${list04[1]} ${list04[2]}");

    //-----------set-----------
    var set01 = new Set();
    set01.add("set01");
    set01.add("set02");
    set01.add("set03");
    for (int i = 0; i < set01.length; i++) {
      print("set 01 data  :${set01.elementAt(i)} ");
    }

    //-----------map-----------
    var map01 = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5};
    //转换为set
    Set map01Setkey = map01.keys.toSet();
    Set map01SetValue = map01.values.toSet(); //value
    //for循环获取key 和value
    for (int i = 0; i < map01SetValue.length; i++) {
      print(
          "map 01 整数 key:${map01Setkey.elementAt(i)} value:${map01SetValue.elementAt(i)}");
    }

    var map02 = {
      "a01": "str0",
      "a02": "str1",
      "a03": "str2",
      "a04": "str3",
      "a05": "str4"
    };
    //迭代map
    Iterable keys = map02.keys;
    //foreach
    for (String key in keys) {
      print("迭代map : ${map02[key]}");
    }

4.Dart函数具有以下特点

.所有的函数都会有返回值 。
.如果没有指定函数返回值, 则默认的返回值是null。
..没有返回值的函数,系统会在最后添加隐式的 return语句。
.main 函数, 的代码表示应用要启动 MyApp 类:和其他语言一样作为程序的人口函数
void showText01() {
  print("showText01 无参函数");
}

//带参无返回值函数
void showText02(int a, int b) {
  int c = a + b;
  print("showText02 无返回值 函数:${c}");
}

//带参返回值函数
bool showText03(int a, int b) {
  if (a == b) {
    return true;
  }
  return false;
}

// **** 可选参数 [] 中括号括起来,必须在最后****
void showText04(int a, [String from, String str]) {
  print("showText04 ${a} 可选参数长度:${from}  ");
}

使用方法跟其它一样,要注意可选参数的使用

    showText01();
    showText02(1, 2);
    print("showText03 返回值函数:${showText03(3, 3)}");
    showText04(3, "只填写一个"); //可选参数,也可以不填

5.运算符

image.png
.算术运算符
算术运算符.png
   //算术运算
    var a = 5;
    a++; //6
    var b = 5;
    b--; //4
    var c = a + b; //10
    var d = c; //10
    var e = 10 * 10; //100
    var f = 100 / 10; //10
    var g = 10 % 3; //1
    print("a++:${a} b--:${b} c=a+b:${c} d=c:${d} e:${e} f:${f} g:${g}");
.关系运算符
image.png
    //逻辑关系运算
    var h = g == 1 ? 5 : 3; //5
    print("三元运算 :${h}");
    //==  >=  <= !=  >  <
    var equalA = 1;
    //等等于==
    if (equalA == 1) {
      print("等等于 :");
    }
    if (equalA != 2) {
      print("不等于 :");
    }
.as类型转换 is对象相当类型时返回true(是否属于) is! 当对象不是相当类型时返回true(不属于)
    User userChild = new User();
   
    if (userChild is User) {
      print("userChild is 属于 _User");
    }
    if (userChild is FUser) {
      print("userChild is 属于 _FUser 因为是user的父类");
    }
    if (userChild is! Manager) {
      print("userChild is 不属于 Manager");
    }
    //类型转换
    userChild.name = "My is user";
    User userText01 = userChild as User; //正确表示
    FUser userText02 = userChild as FUser; //正确表达,子类属于父类
    User userText03 = userText02 as FUser; //正确表达,父类转子类,因为上面是有
    print("userText01 as _User - userText.name:${userText01.name} \n userText03.name:${userText03.name}");

使用到的类:

//用户表父类
class FUser {
  String type;
}

//继承类,多继承后面讲
class User extends FUser {
  String name;
  int age;
}

class Manager {
  String text;
}
.赋值运算符,dart有个级联操作符使用非常方便,使用表达..
    //赋值操作符
    var assign01 = 5;
    var assign02 = assign01; //赋值给assign02
    String assign03 = "??=赋值操作";
    String assign04 = null;
    String assign05 = "不为空不赋值";
    assign04 ??= assign03; //赋值
    assign05 ??= assign03; //不赋值,保持原来的值
    print("赋值操作符 - assign02:${assign02} assign03:${assign03} assign04:${assign04} assign05:${assign05}");

    //级联操作用两个点(..)表示,可对同一对象执行一系列操作。 类似于 Java语言里点点 点处理或 JavaScript 里的 Promise 的 then 处理
    User user01 = new User()
      ..name = "级联操作"
      ..age = 82;
    print("级联操作user01 name:${user01.name} age:${user01.age}");

级联操作符使用到的类:

class User  {
  String name;
  int age;
}

6.流程控制语句

控制语句包含if else ... switch ...for ...while 等

.条件判断if else ... switch case
    //条件判断 if else  ... switch case
    var condition01 = 5;
    if (condition01 == 5) {
      print("condition01 = 5 否和条件执行 if");
    }
    switch (condition01) {
      case 3: //不否和
        print("condition01 = 3 不否和条件不执行");
        break;
      case 4:
        print("condition01 = 4 不否和条件不执行");
        break;
      case 5:
        print("condition01 = 5 否和条件执行 switch");
        break;
    }
.循环 for .. while .. do while .. foreach
    for (int i = 5; i < 5; i++) {
      print("for循环执行次数:${i}");
    }
    int while01 = 5;
    while (while01 > 0) {
      while01--;
      print("while 循环次数:${while01}");
    }
    while01 = 5;
    do {
      while01++;
      print("do while循环即使不否和条件也会执行一次 : ${while01}");
    } while (while01 <= 5);

    //continue 和 break 高级用法
    for (int i = 0; i < 5; i++) {
      if (i == 1) {
        print("循环中continue 是结束本次循环,开始下一次循环,也就是continue后的代码在本次循环中后面的代码不执行");
        continue;
      }
      if (i == 3) {
        print("循环中break 是结束循环,即使否和条件也不在执行");
        break;
      }
      print("循环中continue 和 break 高级用法:${i}");
    }

7.异常处理

//--------------异常处理-----------
    try {
      assert( 1 == 5); //不否和会终止抛异常
//        throw new NullThrownError();//创造一个异常
    } on Exception catch (e) {
      //在这里可以捕捉异常
      print("捕捉到了异常");
    } finally {
      print("无论有没有异常都会执行");
    }

8.类、构造函数

Dart构造函数,有多种样式,例如声明带参数,声明直接赋值,命名构造函数,
函数列表等。Dart的get和set都是隐士的。用对象.变量可以直接赋值和取值

class StructureTest {
  String only;
  String method;

//  final String max;
//  final String min;
  //第一种 声明带参数
//  StructureTest(String only,String method){
//    this.only = only;
//    this.method = method;
//  }
  //第二种 直接赋值
  StructureTest(this.only, this.method);

  //第三种 命名构造函数
  StructureTest.fromMap(Map map) {
    only = map["only"];
    method = map["method"];
  }

//第四种 构造函数列表
//  StructureTest(max,min) : max = max,min = min;

}

使用:

    var structureTest = new StructureTest("only ", "method ");
    print("构造函数:${structureTest.only}  ${structureTest.method}");

    var structureMap = new Map<String, String>();
    structureMap["only"] = "mapOnly";
    structureMap["method"] = "mapMethod";
    var structureTest2 = StructureTest.fromMap(structureMap);
    print("构造函数  命名构造函数: ${structureTest2.only} ${structureTest2.method}");

    StructureList structureList = new StructureList("list name", "list age");
    print("构造函数  函数列表: ${structureList.name}  ${structureList.age}");

9.抽象类abstract关键字修饰

声明一个抽象类

abstract class MyAbs {
  void add();

  void less();
}

继承抽象类

//继承抽象类
class MyAbsChild extends MyAbs {
  @override
  void add() {
    // TODO: implement add
    print("实现了抽象类add方法");
  }

  @override
  void less() {
    // TODO: implement less
    print("实现了抽象类less方法");
  }
}
那如果是多个类继承怎么办呢?Dart提供了with关键字

声明多个类:

class MyAbsTest01 {
  void test01() {
    print("my abs test01 method");
  }
}

class MyAbsTest02 {
  void test02() {
    print("my abs test02 method");
  }
}

class MyAbsTest03 {
  void test03() {
    print("my abs test03 method");
  }
}

多个类继承

//实现多继承 with
class MyAbsWith extends MyAbsTest01 with MyAbsTest02, MyAbsTest03 {
  void inputTest() {
    test01();
    test02();
    test03();
  }
}

使用:

MyAbsWith myAbsWith = new MyAbsWith();
myAbsWith.inputTest();

10.枚举 enum修饰

enum MyColor {
  red, blue 
}

使用:

    var eValues = MyColor.values; //获取所有颜色
    MyColor eColor = MyColor.blue;
    switch (eColor) {
      case MyColor.red:
        print("枚举执行的 red");
        break;
      case MyColor.blue:
        print("枚举执行的 blue");
        break;
    }

11.泛型

//泛型可以包含所有数据类型,int 、string、bool、类对象等
class MyT<T> {
  void generic(T t) {
    print("执行了泛型:${t}");
  }
}

使用:

    MyT<String> myT = new MyT<String>();
    myT.generic("泛型 string类型");

    MyT<int> myT02 = new MyT<int>();
    myT02.generic(999999);

12.异步处理

用 async修饰的为异步方法。await使用一定要在async修饰的方法内使用。

//异步 async关键字
int asyncAwait(){
  return 8;
}
void asyncHandler() async{
//  await关键字必须在async函数内部使用
  int str = await asyncAwait();
  print("执行 asyncHandler:${str}");
}

相关文章

网友评论

      本文标题:Dart语言30分钟快速入门

      本文链接:https://www.haomeiwen.com/subject/yxpykctx.html