美文网首页
快速上手Dart语言

快速上手Dart语言

作者: 刘铁崧 | 来源:发表于2020-10-22 21:27 被阅读0次

1. 变量与常量

变量声明:

// 制定类型声明
String name = "cy";
// 类型推导方式声明
var age = 18;

常量声明:

// final方式
final job = "doctor";
// const 方式
const adress = "北京";

区别:

  • const必须赋值常量值,编译期间必须给一个确定值(编译时)
  • final可以通过计算/函数获取值(运行时)

通过使用const声明方式减少堆内存开销:
这种声明方式,user1和user2两个对象内容指向同一内存空间,user3开辟新空间

const user1 = User("cy");
const user2 = User("cy");
const user3 = User("cat");
class User{
  final String name;
  const User(this,name);
}

2. 基本类型

Bool

var isTrue = true;

dart没有非零即真非空即真,必须置顶true或false

字符串

三种定义方式:

var st1 = 'asd';
var st2 = "asd";
var st3 = '''
  a
  s
  d
''';//可以换行

字符串和表达式拼接

var name = "cy";
var job = "flutter";
var language = "dart";
var message = "user:${name},job:${job},useLanguage:${language}";

集合类型
list

var names = ["a","v","c"];
List<int> numbers = [1,2,3,4];

set

var letters = {"a","v","b"};
Set<int> = {1,2,3,4};

map

var data = {
  "user":"cy",
  "age":18
}
Map<String,Object> data = {
  "user":"cy",
  "age":18
}

集合的常见操作

/__________________list和set类型_______________________/
//获取长度
letters.length;
/// 添加、删除、  判断是否包含元素
list.add(2);
set.add(2);
list.remove(2);
list.removeAt(1);//根据下标删除元素
set.remove(2);
list.contains(2);
set.contains(2);
print($list $set);
/__________________类型_______________________/
// 根据key获取value
map['name'];
// 获取所有元素
print('${map.entries} ${map.entries.runtimeType}');
// 获取所有key
print('${map.keys} ${map.entries.runtimeType}');
// 获取所有value
print('${map.values} ${map.entries.runtimeType}');
// 判断是否包含某个key或value
print('{$map.containsKey('age')} ${map.containsValue(10)}');
// 根据key删除元素
map.remove('key');

使用set过滤list中重复数据

var numbers = [1,2,3,3,2,3,2,4,5,6];
numbers = Set.from(numbers).toList(); 

3.函数

*注意:dart中没有函数重载,不允许定义相同方法名

int add(int number1,int number2){
  return number1 + number2;
}

函数中的可选参数有两种:
1.位置可选参数

void test1(String name,[int age,String job]){
}
调用时后面参数可根据选择传递,但是如果传递参数必须与位置一一对应
test1("test");
test1("cy",18,"flutter");

2.命名可选参数

void test2(String name.{int age,String job}){
}
命名可选参数必须要写参数名,没有顺序要求
test2("cy",age:18);

函数中的参数默认值
只有可选参数才能设置默认值

void test1(String name,[int age = 0,String job]){
}

匿名函数 && 函数可以作为另一个函数的参数

typedef AddFunc = int Function(int number1,int number2);
void test(AddFunc add){
  add(1,2);
}
调用:
test((number1,number2){//匿名函数方式调用
  return number1 + number2;
});

函数作为返回值调用

Calculate divide(){
  return (number1,number2){  
    return number1 / number2;
  }
}
var divideFunc = devide();
print(divideFunction(4,2));//=>2

4.运算符

赋值运算符

var name = "cy";
name ??== "hello";// 当原来变量有值,则当前操作不执行(原变量为空则赋值hello)
var another = name ?? "haha";//判断name是否为空,如果为空则赋值为haha

*级联运算符
-------- 支持链式调用

class Test{
  String name;
  void func1(){print("func1调用");}
  void func2(){print("func2调用");}
}

调用:
var test = Test()
               ..name = "cy"
               ..func1()
               ..func2();

5. 循环

for(var i = 0,i<10;i++){
}
for(var value in list){
 }

6.枚举

enum Fruit{
  apple,
  orange,
  lemon,
  waterlemon
}
final fruit = Fruit.apple;
switch(fruit){
  case Fruit.apple:
    print("苹果");
    break;
  case Fruit.orange:
    print("橘子");
    break;
  case Fruit.lemon:
    print("柠檬");
    break;
  case Fruit.waterlemon:
    print("西瓜");
    break;
}
获取没居中所有value的列表
List innerValues = Fruit.values;
获取对应value所在索引
print(Fruit.orange.index);

相关文章

网友评论

      本文标题:快速上手Dart语言

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