flutter系列2-dart语法

变量定义

两种方式声明变量,var 或者 指明类型关键词声明:

var str = "test";
String str2 = "string2";

常量定义:
使用final 和const定义常量
在这里插入图片描述
final和const区别:final可以开始不赋值,只能赋值一次,final不仅有const编译时常量的特性,最重要的是它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化。

数据类型

字符串类型

**定义: ** 单引号,双引号,三引号都可以定义字符串

  var str1 = 'string';
  var str2 = "string2";
  String str3 = 'string3';
  String str4 = "string 4";
  String str5 = '''string 5
  string6

  string7
  ''';

拼接:


  print("$str1 $str2");
  print(str1 + " " + str2);
数值类型

int必须是整型,double既可以是整形也可以是浮点型

  int ival = 1;
  double dval = 2.3;
  bool bval = true;
数组/集合

list定义

//第一种定义list的方式
  var l1  = ['aa','bb','cc'];
  print(l1);
  print(l1.length);
  print(l1[1]);
//第二种定义list的方式
var l2 = new List();
l2.add('张三');
l2.add('李四');
l2.add('王五');
print(l2);
print(l2[2]);
//定义指定类型list
var l3 = new List<String>();
l3.add('指定类型');

输出结果:

[Running] dart "d:\work\workspace\dart\dartdemo\index.dart"
[aa, bb, cc]
3
bb
[张三, 李四, 王五]
王五
[Done] exited with code=0 in 0.657 seconds

map定义

  // 第一种定义Maps的方式
  var person = {
    "name":"zhangsan",
    "age": 20,
    "work":["程序员","外卖"]
  };
  print(person);
  print(person["name"]);
  print(person["work"]);

  //第二种定义Maps的方式
  var p = new Map();
  p["name"] = "lisi";
  p["age"] = 30;
  p["work"] = ["student", "服务员"];
  print(p);

输出:

{name: zhangsan, age: 20, work: [程序员, 外卖]}
zhangsan
[程序员, 外卖]
{name: lisi, age: 30, work: [student, 服务员]}

is判断类型

var str = "test";
  if(str is String){
    print('string 类型');
  }else{ 
    print("不是string 类型");
  }

运算符

此处只写比较特别的运算符,其他根java等语言类似的不在重复
取整:

  int a= 13;
  int b = 5;
  print(a~/b); //取整

??= 赋值运算符

  // b??=23;表示如果b为空的话, 23赋值给b
  int a = 10;
  a ??= 20;
  print(a);
  
  int b;
  b ??= 23;
  print(b);

输出结果:

[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
10
23

??运算符

  var a;
  var b = a ?? 10;
  print(b);

  var c = 2;
  var d = c ?? 30;
  print(d);

输出结果:

[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
10
2

三目运算符

//三目运算符
  bool flag = true;
  String str = flag? 'ture' : 'false';

函数

定义可选参数的函数


  String getUserInfo(String username, [int age]){
    if(age != null){
     return "姓名:$username-----年龄:$age";
    }
    return "姓名:$username--- 年龄保密";
  }

  print(getUserInfo("张三",30));
  print(getUserInfo("李四"));

输出结果:

[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
姓名:张三-----年龄:30
姓名:李四--- 年龄保密

默认参数

  String getUserInfo(String username, [int age, String sex = '男']){
    if(age != null){
     return "姓名:$username---性别:$sex--年龄:$age";
    }
    return "姓名:$username----性别:$sex---- 年龄保密";
  }

  print(getUserInfo("张三",30));
  print(getUserInfo("李四"));

命名参数

  String getUserInfo(String username, {int age, String sex = '男'}){
    if(age != null){
     return "姓名:$username---性别:$sex--年龄:$age";
    }
    return "姓名:$username----性别:$sex---- 年龄保密";
  }

  print(getUserInfo("张三",age:30));
  print(getUserInfo("李四"));

闭包

‘全局变量常驻内存,会污染全局,局部变量会被垃圾回收机制回收,不会污染全局。
如果想实现 常驻内存,并且不污染全局,这个受可以使用闭包

私有属性,Java中使用private,在dart中直接在变量前面加下划线即可

class Person{
  String _name; //私有属性,对应java中的private
  int age; //公有属性,对应java中的public
}

构造函数运行之前初始化实例变量

class Rect{
  int width;
  int height;
  Rect():width=2,height=10{
  
  }


… 级联操作(连缀)

class Person{
  String name;
  int age;

  Person(this.name,this.age);

  printInfo(){
    print("name=${this.name}-----age = ${this.age}");
  }
}

main(List<String> args) {
  var p1 = new Person("张三",20);
  p1.printInfo();

  p1.name="李四";
  p1.age=30;
  p1.printInfo();

  p1..name="王五"
    ..age=50
    ..printInfo();

}

输出结果:

[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
name=张三-----age = 20
name=李四-----age = 30
name=王五-----age = 50

mixins功能
实现类似类的多继承功能,但不是继承

class A{
  String info = "this is A";
  void printA(){
    print("A");
  }
}

class B{
  void printB(){
    print("B");
  }
}

class C with A,B{

}

void main(List<String> args) {
  var c = new C();
  c.printA();
  c.printB(); 
  print(c.info);
}

输出结果:

[Running] dart "d:\work\workspace\dart\dartdemo\demo01.dart"
A
B
this is A

mixins使用条件:

  1. 作为minxins的类智能集成Object,不能继承其他类,如上述代码中Class A不能集成自定义的类
  2. 作为mixins的类不能有构造函数
  3. 一个类可以mixins多个mixins类
  4. mixins不是继承,也不是接口,耳是dart中全新的一种功能
发布了159 篇原创文章 · 获赞 22 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/ytuglt/article/details/105087360