美文网首页
Flutter二:Dart基础语法

Flutter二:Dart基础语法

作者: Anwfly | 来源:发表于2019-12-11 08:42 被阅读0次

    前言:Google为什么选择

    1. 基于JIT的快速开发周期
      Flutter在开发阶段采用JIT模式,这样就避免了每次改动都要进行编译,极大的节省了开发时间;
    2. 基于AOT的发布包
      Flutter在发布时可以通过AOT生成高效的ARM代码以保证应用性能。
      为了快速流畅的用户体验需要能够在每个动画帧运行大量的代码,不能有周期性的停顿,否则会造成掉帧。
    3. 单线程:
      不需要锁,不存在数据竞争和变量状态同步,也没有线程上下文切换的性能损耗和锁导致的卡顿。
    4. 垃圾回收
      多生代无锁垃圾回收器,专门为UI框架中常见的大量Widgets对象创建和销毁优化。

    一. 变量和数据类型Dart语言

    1. 常量:
      从未打算更改的一个变量,那么使用 final 或 const,不是var,也不是一个类型。 一个 final 变量只能被设置一次,两者区别在于:const 变量是一个编译时常量,final变量在第一次使用时被初始化。被final或者const修饰的变量,变量类型可以省略
    //可以省略String这个类型声明
    final str = "hi world";
    //final String str = "hi world"; 
    const str1 = "hi world";
    //const String str1 = "hi world";
    
    1. 变量:Dart使用var声明变量,他并不是一个类型,类型会自动识别的,var变量一旦赋值,类型便会确定,则不能再改变其类型
    var t;
    t = "hi world";
    // 下面代码在dart中会报错,因为变量t的类型已经确定为String,
    // 类型一旦确定后则不能再更改其类型。
    t = 1000;
    
    1. 基本数据类型: Number、String、Boolean、List、Map
     //Number:int和double
        int score = 100;
        double per = 3.14;
    
        //string
        String name = "anfly";
    
        //boolean
        bool isValid = true;
    
        //string转义
        String s = 'I\'m anfly';
        String s1 = "I'm anfly";
    
        //string拼接
        //注意:不同类型的数据不能拼接,跟Java有所区别,Java可以强转为string
    //    print("我的成绩是" + score);
        print("我的成绩是:${score}");
    
        //StringBuffer实现字符串拼接,但用的不是append
        StringBuffer sb= StringBuffer();
        sb.write("");
    
        //$变量
        int a = 20;
        int b = 40;
        print("the sum of $a and $b is ${a + b}");
    
        //List类型:具有相同类型的数据,使用方式和数组一样
        var list = [1,2,3];//自动识别类型
        
        //Map 类型
        //方式一:
        var weeks ={'Monday':'星期一','Tuesday':'星期二'};
        //方式二:使用map的构造函数 
        var weeks = new Map();
        weeks["Monday"] = "星期一";
        weeks["Tuesday"] = "星期二";
        //第二种方式可以增加一个值
        weeks["Wednesday"] = "星期三";
        //检查key是否在map中
        assert(week["Monday"]==null)
    
         //list转map,map转list
          list.map()
          map.tolist() 
    
    1. dart分支:if switch
        //if操作符
        double salery = 2000;
        if (salery < 2000) {
          print("$salery 小于2000");
        } else if (salery > 2000) {
          print("$salery 大于2000");
        } else {
          print("$salery 等于2000");
        }
    
        if (a > b) {
          print("$a is salery");
        } else {
          print("$b is salery");
        }
    
        //三元操作符 ?: 表达式
        a > b ? print("$a is salery") : print("$b is salery");
    
        //??表达式,判空,如果为空可默认??后边的内容
        //区分null和""
        String myName = null;
        String newName = myName ?? "anfly";
        print(newName);
    
        //switch,用法和Java中一样的
        String grade = "A";
        switch (grade) {
          case "A":
            print("very good");
            break;
          case "B":
            print("good");
            break;
          case "C":
            print("enough good");
            break;
        }
    
    
    1. 循环
     //for,知道循环次数
        for (int i = 0; i < 4; i++) {
          print(i);
        }
    
        List people = ["a", "b", "c"];
    
        for (int i = 0; i < people.length; i++) {
          print(people[i]);
        }
    
        //for in
        for (String person in people) {
          print(person);
        }
    
        //while,不知道循环次数
        int i = 0;
        while (i < people.length) {
          print(people[i]);
          i++;
        }
    
        //do while
        do {
          print(people[i]);
          i++;
        } while (i < people.length);
    
        //break 停止当前循环
        for (int i = 0; i < 10; i++) {
          if (i == 5) break;
        }
    
        //指定停止的循环
        outterLoop:
        for (int i = 0; i < 10; i++) {
          innerLoop:
          for (int j = 0; j < 10; j++) {
            if (j == 4) {
              break outterLoop;
            }
          }
        }
    
        //continue退出本次循环
        for (int i = 0; i < 10; i++) {
          if (i == 5) continue;
        }
    
    
    1. 函数的9个知识点:
    //1.函数定义
    void sumValue() {
      int a = 1;
      int b = 2;
      int sum = a + b;
      print("a+b=${sum}");
    }
    
    //2.函数传参
    void sumValue(int a, int b) {
      int sum = a + b;
      print("a+b=${sum}");
    }
    
    //3.函数返回值
    int sumValue(int a, int b) {
      int sum = a + b;
      return sum;
    }
    //4.箭头函数(无返回值)
    void sumValue(int a, int b) => print("a+b=${a + b}");
    
    //5.箭头函数(有返回值),不需要加return
    int sumValue(int a, int b) => a + b;
    
    //6.函数参数(可选参数)
    //带有可选参数的函数:
    void printCites(String c1, [String c2, String c3]) =>
        print("城市一:${c1}\n城市二:${c2}\n城市三:${c3}");
    //调用:调用的地方可以不后前两个参数
    printCites("北京");
    
    //7.函数参数 命名,如果形参被花括号包含,调用的时候就要指明形参名称
    //函数
    void printCites(String c1, String c2, {String c3}) =>
        print("城市一:${c1}\n城市二:${c2}\n城市三:${c3}");
    //调用
    printCites("北京", "上海", c3: "天津");
    
    //8.函数默认返回值
    //函数
    int sumValue(int a, int b) {
      int sum = a + b;
    }
    //调用
    print(sumValue(2, 2));
    结果:null
    
    //9.函数参数 赋默认值
    void printCites(String c1, String c2, [String c3 = "深圳"]) =>
        print("城市一:${c1}\n城市二:${c2}\n城市三:${c3}");
    
    //调用的时候可以不赋值,直接用默认的参数值
    printCites("北京", "上海", );    
    

    5.类

    //1.类的基础知识
    //2.构造函数
    //3.自定义构造函数
    class Student {
      String name = "大飞";
      int age = 18;
    
      //构造与
      //空参构造
    //  Student() {
    //    print("构造函数");
    //  }
    
      //实参构造
    //  Student(String name, int age) {
    //    this.name = name;
    //    this.age = age;
    //  }
    
      Student(this.name, this.age); //简写实参构造
    
      //自定义构造函数
      Student.CustomConstructor(this.name, this.age) {
        print("自定义构造函数");
      }
    
      void study() {
        print("${this.name} 正在学习呢");
      }
    }
    
    //调用
    var student = Student("awf", 10);
    //    student.name = "anfly";
    //    student.age = 28;
    //    print("姓名是${student.name} and 年龄是${student.age}");
    //    student.study();
    
        var student2 = Student.CustomConstructor("anfly",12);
        print("姓名是${student.name} and 年龄是${student.age}");
    
    
    1. 继承和重写父类的方法
    //1.自定义setter和getter方法
    //2.类的继承:跟Java一样单继承
    //3.重写父类的方法和属性
    var student = Student();
    student.name = "大飞";//调用默认setter方法
    print(student.name);//调用默认getter方法
    
     student.setName("大飞");//调用自定义的setter方法
      print(student.getName());//调用自定getter方法
    
    class Student {
      String name;
    
      int age;
    
      void setName(String name) => this.name = name
    
      String getName() => return this.name;
    }
    

    相关文章

      网友评论

          本文标题:Flutter二:Dart基础语法

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