美文网首页
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