Flutter二:Dart基础语法

2019-12-11  本文已影响0人  Anwfly

前言: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;
}
上一篇下一篇

猜你喜欢

热点阅读