Flutter2-Dart语法

变量

/**
 * Dart中用var生命变量,可以赋值不同类型
 * Type:dynamic
 * 一开始没有初始值的变量可以赋值任意类型,一开始有初始值的变量,只能赋值同类型
 * */
var a;
a = "asd";
print(a);
a = 6;
print(a);
a = [1,2];
print(a);

var b = 66;
print(b);

final变量

/**
 * final:使用final声明的只能赋值一次的变量
 * 可以在命名时赋值,也可以命名不赋值,其他地方赋值,但是只能赋值一次!
 * 没有被赋值过的final变量是不能被使用的
 * 它是最终变量
 * */
final c;
c = 2;
print("c : $c");

常量

/**
 * const:常量只能在声明的时候赋值,而且必须在声明时赋值
 * */
const d = 5;
print("d : $d");

Dart的数据类型

  1. 数值型Number: int & double
  2. 字符串
  3. bool
  4. 列表 - List
  5. 键值对(字典) - Map

  • 数值类型
  /**
   * num:可以是int也可以是double
   * */
  num a = 10;
  a = 1.5;

  int b = 20;
  print(b.isEven); // 偶数
  print(b.isOdd); // 奇数

  double c = 30.0;

  // 算数运算符 + - * / %(取模) ~/(取整)
  print(a ~/ b); // 相当于a/b取整

  // 类型转换
  print(a.toInt().isOdd);
  print(b.toDouble());
  • 字符串
/**
   * Dart中的字符串
   * 使用单引号和双引号创建
   * 三个引号或双引号可以创建多行字符串
   * */

  var a = 'James';
  var b = "Rose";
  print(a+b);

  String str = "Hello";
  String str1 = "World";

  /**
   * Apple
      Orange
      Banana
      Cherry
   * 结果和下面写的一样,前面会带空格
   * */
  String str2 = '''Apple
  Orange
  Banana
  Cherry''';
  print(str2);

  /**
   * 取字符串第n个字符
   * e
   * */
  print(str[1]);

  /**
   * 字符串拼接
   * HelloWorld
   * */
  print(str+str1);

  /**
   * 字符串重复翻倍
   * HelloHelloHelloHelloHello
   * */
  print(str * 5);

  /**
   * 格式化字符串
   * 表达式需要花括号括起来,单个变量直接美元符加变量
   * */
  int aa = 10;
  int bb = 20;
  int cc = aa + bb;
  print("a + b = ${aa + bb}");
  print("a + b = $cc");

  /**
   * 如果不需要字符串中的转义字符,字符串前面加r
   * apple
      orange
   * apple\norange
   * */
  String str3 = "apple\norange";
  String str4 = r"apple\norange";
  print(str3);
  print(str4);

  /**
   * 字符串长度
   * */
  print(str3.length);
  • list - 数组
  /**
   * Dart中的列表,可以存放不同的数据类型
   * 创建可变list  var list = [1, 2, 3];
   * 创建不可变list  var list = const [1, 2, 3];
   * */

  var list1 = [1, 2, 3, 'sj'];
  print(list1);
  print(list1[3]);
  list1[3] = 4;
  print(list1[3]);

  var list2 = const [1, 2];

  /**
   * 获取数组长度
   * */
  var list3 = ["red", 1];
  print(list3.length);

  /**
   * 添加元素
   * 如果数组原来是同类型数据,添加只能是同类型数据
   * 如果原来有不同类型数据,可随便添加什么类型
   * */
  list3.add([1]);
  print(list3);

  /**
   * 插入元素
   * 插入元素类型规则同添加元素
   * */
  list3.insert(1, "yello");
  print(list3);

  /**
   * 删除元素
   * */
  list3.remove("red");
  print(list3);

  list3.removeAt(1);
  print(list3);

  list3.clear();
  print(list3);

  /**
   * 数组排序
   * */
  var list4 = [5, 3, 2, 7, 9, 1];
  list4.sort();
  print(list4);

  /**
   * 数组截取
   * */
  print(list4.sublist(2, 4));
  • map - 字典
/**
   * Dart中的map,键值对
   * 创建可变的Map: var json = {'one' : 'red', 'two' : 'green'};
   * 创建不可变的Map: var json = const {'one' : 'red', 'two' : 'green'};
   * */
  var json1 = {'one' : 1, 2 : 'green'};
  print(json1);
  print(json1[2]);
  json1['three'] = 'yello';
  print(json1);

  /**
   * Map的长度
   * 所有的key
   * 所有的value
   * */
  print(json1.length);
  print(json1.keys);
  print(json1.values);

  /**
   * 数组可以直接简单转Map
   * */
  var list = ['red', 'green', 'blue'];
  print(list.asMap());

Dart的运算符

  1. 赋值运算 ??=
  2. 条件表达式 ??

  /**
   * ??=
   * 如果a=nil 把a赋值
   * 如果a不为nil,则不赋值
   * nil不是0,a=0后续也不赋值
   * */
  var a;
  a ??= 10;
  print(a);
  a ??= 5;
  print(a);

  /**
   * ??
   * 如果a为nil,结果为b
   * 如果a不为nil,结果为a
   * */
  var b = 6;
  print(a ?? b);

Dart的方法

  1. Dart中的方法也是对象
  2. 方法的返回值和参数可以省略
  3. 当方法的执行语句只有一句的时候,可以使用箭头函数 => 表达式
  4. 可选参数:传递参数的时候必须带上形参的名字,可选参数的顺序随便
void function() => print(5);

int sum(int a, int b) {
  return a + b;
}

// 可以写成下面方法,但是不建议这么写
sum1(a, b) {
  return a + b;
}

// 箭头函数是return,可以省去return
int sum2(int a, int b) => a + b;

/// 可选参数不能直接写int,因为报错,int不能为null。
/// 可以使用可选类型int?
/// 可选参数可以传1个,2个,3个....随便几个都可以且前后位置随意
sum3(int a, {int? b, var c}) {
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

/// 可选参数可以设置默认值
sum4(int a, {int b = 5, int c = 0}) {
  return a + b + c;
}

/// 按顺序的可选参数
/// 可选参数必须按顺序,按位置
sum5(int a, [int b = 5, int c = 0]) {
  return a + b + c;
}
  1. 函数作为参数传递
void main() {
  var hello = printHello;
  hello();

  var list = [1, 2, 3, 4];
  // list.forEach(print);

  forEachDemo(list, printElement);
}

int index = 0;
printElement(var a) {
  print('元素$index : $a');
  index++;
}

forEachDemo(List list, void func(var element)) {
  for (var e in list) func(e);
}

  1. 匿名方法:没有方法名的方法
  var func = () {
    print('这是一个匿名方法');
  };
  func();

/// 立即执行方法、函数
  () {
    print('这是个立即执行方法');
  }();

/// 匿名方法作为参数
var i = 0;
  forEachDemo(list, (var a) {
    print('元素$i : $a');
    i++;
  });
  1. 闭包 closure
    定义在函数里面的函数就是闭包,闭包也是对象。
    闭包的作用:可以访问外部函数的局部变量。
void closureDemo() {
  var fun = funA();
  fun();
  fun();
  fun();
  fun();
}

funA() {
  var count = 0;
  return () => print(count++); // 这个匿名函数就是一个闭包
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容