Flutter的敲门砖Dart基础语法学习笔记

133 阅读2分钟

一、入口函数

与Java相似,都需要一个main函数作为应用入口

void main(){

}

二、常用基础数据类型

  num //数字类型
  String //字符串类型
  bool //布尔类型
  List //列表类型
  Map //键值对类型
  dynamic //动态类型

三、变量与常量

  var name; //用var声明一个变量
  print(name); //未被赋值时,默认为null
  name = "MrZhang"; //赋值为字符串
  print(name);
  name = 18; //赋值为数字
  print(name);
  print("-------------------------------------------------------------------");
  final age = 10; //使用final声明的变量只能被赋值一次
  //age = 20;// 'age', a final variable, can only be set once
  const like = "西瓜"; //使用const声明的属于常量只能被赋值一次
  //like = "香蕉";//error: Constant variables can't be assigned a value.
  print("打印数据:${like + age.toString()}"); //

输出

null
MrZhang
18
-------------------------------------------------------------------
打印数据:西瓜10

四、运算符与表达式

大部分与java一致,在此略过。

  String a = "123";
  String b = "123";
  print(a == b); //与Java不同,这里==对比的不是引用
  int c;
  c ??= 10; //如果c为null,则会被赋值
  print(c);
  int d = 0;
  String e = d == 1 ? "Ros" : "Jack"; //三目运算符与java一致
  print(e);
  int f;
  int g = 66;
  int h = f ?? g; //如果??前为null将会使用后面的值
  print(h);

输出

true
10
Jack
66

五、方法

void main() {
  print(a(5, 10));
  print(b(2, 3));
  print(c(6, 7));
  d("小李");
  d("小李", sex: 1);
  d("小李", age: 18, sex: 1);
  var fun = (String name) => {print("姓名:$name")}; //方法对象
  var fun2 = a; //方法对象
  fun("小陈");
  fun2(6, 4);
  e("小李", 11);
  e("小李", 11, 0);
}

/**
 * 普通方法
 */
int a(int a, int b) {
  return a + b;
}

/**
 * 省略返回值类型以及参数类型
 */
b(a, b) {
  return a + b;
}

/**
 * 使用箭头语法替代表达式
 */
int c(a, b) => a + b;

/**
 * 可选参数
 */
d(String name, {int age = 6, int sex}) {
  print("姓名:$name,年龄:$age,性别:$sex");
}

/**
 * 基于位置的可选参数
 */
e(String name, [int age = 6, int sex]) {
  print("姓名:$name,年龄:$age,性别:$sex");
}

输出

15
5
13
姓名:小李,年龄:6,性别:null
姓名:小李,年龄:6,性别:1
姓名:小李,年龄:18,性别:1
姓名:小陈
姓名:小李,年龄:11,性别:null
姓名:小李,年龄:11,性别:0

六、类

main() {
  var person = Person(); //Dart中new关键字可以省略
  print(person.name);
  person.age = 18; //Dart类默认会生成get以及set方法
  print(person.age);
  print(person.sex); //final属性没有set,只有get
  person.toPrint();
  person(); //调用call方法
  var person2 = Person.instance("老谢");
  person2.toPrint(); //条件运算符,不为空才执行
  person2
    ..name = "老李"
    ..age = 48
    ..toPrint(); //级联操作
  Animal life = APerson.instance("命名构造。。。");
  life.eat();
}

class Person {
  String name;
  int age;
  final int sex = 0;

  /**
   * 默认构造
   */
  Person() {}

  /**
   * 命名构造方法
   */
  Person.instance(String name) {
    this.name = name;
  }

  /**
   * 命名构造方法
   */
  Person._instances(this.name) : age = 16 {}

  /**
   * Dart中方法是不能重载的
   */
  toPrint() {
    print("$name-$age-$sex");
  }

  call() {
    print("Call:$name-$age-$sex");
  }
}

abstract class Animal {
  void eat() {
    print("eat");
  }
}

abstract class Life {
  Life(String alias) {
    print(alias);
  }

  void eat() {
    print("eat");
  }
}

class APerson extends Person with Animal {
  APerson() {}

  APerson.instance(String alias) : super.instance(alias) {
    print("APerson" + alias);
  }

  @override
  void eat() {
    super.eat();
  }

  @override
  toPrint() {
    return super.toPrint();
  }
}

/**
 * implements需要实现方法及变量
 */
class BPerson implements Person, Life {
  @override
  int age;
  @override
  String name;

  @override
  call() {
    return null;
  }

  @override
  void eat() {}

  @override
  int get sex => null;

  @override
  toPrint() {
    return null;
  }
}

输出

null
18
0
null-18-0
Call:null-18-0
老谢-null-0
老李-48-0
APerson命名构造。。。
eat