美文网首页
Dart 变量,类型,异常

Dart 变量,类型,异常

作者: 逍遥德道 | 来源:发表于2021-04-20 11:07 被阅读0次

    void main() {

      //const与final 都不可更改,const是编译器常量,final是运行时常量

      const cc = 100;

      final ff = 100;

      final fff = cc;

      //错误 编译器流程在前,此时ff未赋值

      // const ccc = ff;

      // var

      //1 var 初始化为String ,不能改为int

      var a = "ss";

      // a = 10;

      //2 var 不进行初始化,

      var b;

      b = "ss";

      b = 100;

      //Object 父类,任意改变

      Object c = "ss";

      c = 100;

      //dynamic 写法与Object 一致,但是编译器不会进行检测,Object类型确定编译器会检测

      dynamic d = "ss";

      d = 100;

      //没有改方法编译器不报错

      // d.foo();

      //int 会根据赋值给不同的内存大小,跟java的4个确定字节不一样

      int e = 1;

      // e.bitLength = 1;

      e = 10;

      // e.bitLength = 4;

      //String使用跟kotlin一致

      String f = "ss";

      f = "ss$f";

      f = """

      aaa

      bbb

      ccc

      """;

      //r 原始类型 raw 下面的效果是一样的

      // f = r"\n" == "\\n";

      //bool

      bool g = true;

      //List 数组

      List<int> h = List();

      h = [1, 2, 3];

      h.forEach((element) {

        print(element);

      });

      for (var value in h) {

        print(value);

      }

      for (var i = 0; i < h.length; i++) {

        print(i);

      }

      //数组与const

      const List<int> j = [1, 2, 3];

      //不行

      // j.add(4);

      // j = [1];

      List<int> jj = const [1, 2, 3];

      //不行,报错 const定位的是内存空间已不能修改

      // jj.add(4);

      // jj[2] = 2;

      jj = [1];

      //map 集合 const 与 list 一样

      Map<int, int> map = {1: 1, 2: 2};

      //修改

      map[1] = 2;

      //添加

      map[3] = 3;

      //null

      print(map[4]);

      map.forEach((key, value) {});

      map.keys.forEach((element) {});

      map.values.forEach((element) {});

      //Runes 特殊字符标识类 Unicode32

      var clapping = '\u{8F8F1}';

      ///5个16进制 需要使用{}

      print(clapping); //👏

    //获得 16位代码单元

      print(clapping.codeUnits); //[55357, 56399]

    //获得unicode代码

      print(clapping.runes.toList()); //[128079]

    //fromCharCode 根据字符码创建字符串

      print(String.fromCharCode(128079));

      print(String.fromCharCodes(clapping.runes));

      print(String.fromCharCodes([55357, 56399]));

      print(String.fromCharCode(0x1f44f));

      Runes input = new Runes(

          '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');

      print(String.fromCharCodes(input));

      /**

      * Symbols 标识符

      */

      var aa = #sadsad;

      switch (aa) {

        case #A:

          break;

        case #sadsad:

          break;

      }

      //操作符 as 强转

      num q = 10;

      int w = q as int;

      // is 判断是什么类型 is!

      bool ee = q is! int;

      //赋值 += /= 等

      // ??=

      // k==null 的时候赋值

      var k;

      k ??= "11";

      //三目表达式可以使用 if(true)?true:false

      //条件表达式 k ==null v = 789 否则 v=k

      var v = k ?? "789";

      /**

      * 级联操作符 双点 ..

      */

      Build()

        ..a()

        ..b();

      Build().c().d();

      /**

      * ?. 安全操作符 跟kotlin一样

      */

      String str;

      str?.length;

      //方法 一等对象方法

      //所有的方法都是对象,可以赋值给Function变量 Function不能知道方法的参数,类型,返回等

      Function function = fun;

      //参数不匹配

      //function((int i,int j){});

      //参数为匿名方法,闭包等名字

      fun2((i, j) {});

    }

    void fun(Function f) {

      f();

    }

    //定义F类型

    typedef void F(int i, int j);

    //写起来很麻烦

    void fun1(F f) {

      f(1, 1);

    }

    void fun2(void f(int i, int j)) {

      f(1, 1);

    }

    class Build {

      void a() {}

      void b() {}

      Build c() {

        return this;

      }

      Build d() {

        return this;

      }

    }

    //回调类不用写了,直接使用方法为参数

    typedef void onClick();

    class Button {

      void setOnClickListener(onClick listener) {

        listener();

      }

    }

    //可选位置参数

    void main2() {

      fun3();

      fun3(1);

      fun3(1, 2);

      fun4();

      fun4(i: 1, j: 2);

      fun4(j: 2, i: 4);

    }

    //[] 可选位置参数 ,可以设置默认值,要按顺序传值

    void fun3([int i = 1, int j = 2]) {}

    //{} 可选命名参数,可以设置默认值,可以按名字传值

    void fun4({int i = 1, int j = 2}) {}

    //异常

    void main3() {

      try {

        test();

      } catch (e,s) {

        //可以只有一个 e

        //e,就是抛出的异常对象

        print(e.runtimeType);

        //s,是stacktrace 调用栈信息

        print(s.runtimeType);

      }

      //捕获指定异常 on

      try{

        test();

      }on Exception catch(e){

      }on String catch(e){

      }finally{

      }

    }

    void test() {

      // throw Exception("exception");

      throw "exception";

    }

    相关文章

      网友评论

          本文标题:Dart 变量,类型,异常

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