美文网首页
Flutter -- 1.基础语法

Flutter -- 1.基础语法

作者: MissStitch丶 | 来源:发表于2021-10-29 16:56 被阅读0次

一. 关键字var、final、const

  • var,使用var声明一个变量,可以赋值不同的类型。var声明的变量如果没有初始化,那么他的值为nil
  • final,使用final声明的一个只能赋值一次的变量!。final后面可以跟类型,var后面不能跟类型
  • const,使用const声明一个常量。声明时,必须赋值。
  var a;
  final b;
  const c = 1;
  final String d;
  // var String e; //会报错,var后面不能跟类型
  print(a); // null
  a = 1;
  b = 2;
  print(a); // 1
  print(b); // 2

二. Dart的数据类型

  • 数值型 Number: int & double
  • 字符串 String
  • bool
  • 列表 - List
  • 键值对(字典) - Map

1.Number

  num d;
  d = 1;
  d = 1.1;
  double a;
  a = 10;
  print(a); //10
  int b = 8;
  print(b.isEven); //是否是偶数  true
  print(b.isOdd); //是否是奇数   false

  //算术运算符:+ - * / % ~/(取整)
  print(a ~/ b); //1
  //转换类型
  print(a.toInt().isEven); // true
  print(b.toDouble()); // 8

2.String

  • 使用单引号和双引号创建
  • 三个引号或双引号 创建多行字符串
  var a = 'apple';
  var b = "pear";
  print(a + b); // applepear

  String str = 'apple';
  String str1 = "pear";
  String str2 = "apple\n"
        "pear\n"
        "banana";
  String str3 = '''fruit
  apple
  pear
  apple''';
  print(str2);
  print(str3);
  print(str + " to eat"); //apple to eat
  print(str1 * 2); //pearpear

  int a = 10;
  int b = 20;
  int c = a + b;
  print('a + b = ${a + b}'); //a + b = 30
  print('a + b = $c'); //a + b = 30

  String str4 = "apple\npear";
  String str5 = r"pear\npear";//这里r表示不使用转义字符
  print(str4);
  print(str5); // pear\npear
  print(str4.length); // 10
  print(str5.length); //10

3.List

  • Dart中的列表 可以存放不同的数据类型
  • 创建可变list var list1 = [1,2,3]
  • 创建不可变list var list2 = const [1,2,3]
  var list1 = [1,2,3,'apple'];
  print(list1); //[1, 2, 3, apple]
  print(list1[3]); //apple
  list1[3] = 'pear';
  print(list1); // [1, 2, 3, pear]

  list1.add('banana');
  print(list1); //[1, 2, 3, pear, banana]
  list1.insert(1, 'orange');
  print(list1); //[1, orange, 2, 3, pear, banana]
  list1.remove('orange');
  print(list1); //[1, 2, 3, pear, banana]
  list1.clear();
  print(list1); //[]

  var list2 = [1,3,5,2,4,6,9,8,7];
  list2.sort();
  print(list2); //[1, 2, 3, 4, 5, 6, 7, 8, 9]
  print(list2.sublist(4,7)); //[5, 6, 7]

4.Map

  • Dart中的Map键值对
  • 创建可变的Map var json1 = {'one':'apple','two':'pear'};
  • 创建不可变的Map var json1 = const {'one':'apple','two':'pear'};
  var json1 = {'one':'apple','two':'pear'};
  print(json1['one']); //apple
  json1['one'] = 'banana';
  print(json1); //{one: banana, two: pear}

  var json2 = const {'one':'apple','two':'pear'};
  // json2['one'] = 'banana'; //这里是常量对象,不能对Map中某个元素赋值
  print(json2.length); //2
  print(json2.values); //(apple, pear)
  print(json2.keys); //(one, two)

  var list = ['apple', 'pear', 'pear'];
  print(list.asMap()); //{0: apple, 1: pear, 2: pear} 将list转化为Map,key为数组下标

5.运算符 ?? & ??=

  • x ??:条件表达式,如果x不为nil,返回x。反之回右边值。
  • x ??= :赋值运算,如果x不为nil,不赋值。反之给x赋值右边值。整体返回x(或赋值后x)的值。
  var a;
  print(a ??= 10); // 10, 这里返回的是a赋值后的值。
  a ??= 5; //如果a为nil就赋值,如果有值就直接返回。
  print(a); //10
  
  var b;
  b = 5;
  print(b ?? b); // 5 //如果左边有值返回左边,没有就返回右边!

三. 函数

1.Function&箭头函数

  • 方法格式,返回值 Function(参数类型:形参)
  • 方法可以省略返回值和参数类型,Function(a,b)
  • 可选参数,使用{},使用可选参数时,必须加上形参。Function(int a,{int b, int c})
  • 参数可空, 使用?。Function(int a,{int? b, int c})
  • 方法也是一个对象,也可以作为参数传递, 例如:List中的forEachFunction(int a, void func(int a))
  • 箭头函数,当方法的执行语句只有一句的时候,可以使用箭头函数 => 表达式。
void functionDemo() {
  print(sum(10, 20)); //30
  print(sum1(1, c: 5,b: 3)); //9
  print(sum2(1, c: 5,b: 3)); //9
  print(sum3(1)); //1
  print(sum4(1,2,3)); // 6

  var hello = printHello; //将方法赋值给hello变量,方法也是一个对象
  hello(); //调用hello变量方法

  var list = [1,2,3,4];
  list.forEach(print); //1,2,3,4
  list.forEach(printElement); //元素1 = 1, 元素2 = 2, 元素3 = 3, 元素4 = 4
  forEachDemo(list, print); //1,2,3,4
  forEachDemo(list, printElement); //元素5 = 1, 元素6 = 2, 元素7 = 3, 元素8 = 4
}

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

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

printHello() => print('hello');

sum(a, b) => a + b;

sum1(int a, {var b, var c}) {
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

//nullability, int? 告诉编译器,我处理了后面为空的情况
sum2(int a, {int? b, int? c}) {
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

sum3(int a, {int b = 0, int c = 0}) {
  // b ??= 0;
  // c ??= 0;
  return a + b + c;
}

int sum4(int a, [int b = 0, int c = 0]) {
  return a + b + c;
}

2.匿名函数&立即执行函数

  • 匿名函数,顾名思义就是没有名字的函数,多用于方法作为参数情况。(参数){执行内容}。
  • 立即执行函数,立即执行的函数,基本上都是没有意义的。
  //匿名方法
  var func = () {
    print('匿名方法');
  };
  //立即执行方法、函数
  (() {
    print('立即执行函数');
  })();

  //匿名函数
  int b = 0;
  forEachDemo(list, (var a) {
    b ++;
    print('元素$b = $a'); //元素1 = 1, 元素2 = 2, 元素3 = 3, 元素4 = 4
  });

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

3.闭包

  • 闭包,定义在函数内部的函数就被称为闭包。闭包也是一个对象。
  • 作用,用来访问外部函数的局部变量。被访问的局部变量不会被释放,会持续持有它。闭包释放,局部变量释放。
void closureDemo() {
  var funcA = testClosure();
  funcA(); // 0
  funcA(); // 1
  funcA(); // 2
  //此时,局部变量_count在函数执行完成后,并没有被释放。
  //而是被funcA持续持有。当closure执行完,才会释放funcA,然后_count被释放。
}

testClosure() {
  int _count = 0;
  return ()=>{print(_count++)};
}

相关文章

网友评论

      本文标题:Flutter -- 1.基础语法

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