美文网首页
Flutter之旅:Dart基础语法学习

Flutter之旅:Dart基础语法学习

作者: 彩虹_直至黑白 | 来源:发表于2022-12-14 18:35 被阅读0次

    1. Dart中常见数据类型一览:

    Dart的常见的数据类型有以下8种:

    数据类型.png

    1.1 数字类型

    num、int和double都是Dart中的类,也就是说它是对象级别的,所以他们的默认值为null。这不同于Java的基本数据类型。

    main(){
      num age = 18;//num数据类型
      int height =180;//int整型
      double weight=62.5;//double 浮点型
    
      print(height/weight is double);//true
      print(height*age is double);//false
      print(age/height is double);//true
    }
    

    1.2 布尔类型

    布尔类型作为判断的标识,活跃在各大语言中的逻辑判断中,它只有truefalse两种选择。这里注意关键字是bool,而非Java中的boolean

    bool isMan = true;
    bool isMarried = false;
    

    1.3 字符串类型

    字符串是一种语言不可或缺的部分,Dart也不例外。它支持单引号、双引号、以及三引号。需要注意的是单引号中的单引号需要转义,三引号中的字符内容会原样输出。

      String name = '张哈哈先生';//支持单引号
      String proverbs ="'海的彼岸有我未曾见证的风采'";//支持双引号
      String poem=""" //支持三引号
      石榴酒,葡萄浆。
      兰桂芳,茱萸香。
      愿君驻金鞍,暂此共年芳。
      愿君解罗襦,一醉同匡床。
      文君正新寡,结念在歌倡。
      昨宵绮帐迎韩寿,今朝罗袖引潘郎。
      莫吹羌笛惊邻里,不用琵琶喧洞房。
      且歌新夜曲,莫弄楚明光。
      此曲怨且艳,哀音断人肠。
      """;
      print('${name}\n$proverbs\n$poem');//支持字符串中使用变量
    

    1.4 列表类型

    List作为一个同类多元素的容器,也是每种语言必备。Dart中的List作为一个类存在,可以当做可操作的数组来对待,起始索引为0。其他语言中对于数组的操作,Dart中基本都有相关的API。

     main() {
    
      List<int> list = new List();
      List<int> list1 = List();
      List<int> list2=[1,2,3,4,5];//提示:Dart推断list的类型为List<int> 。如果尝试将非整数对象添加到此List中,则分析器或运行时会引发错误。有关更多信息,可以学习 类型推断。
      print(list2[1]);//获取下标为1的值
    //遍历数组
    //iter for-in 模板
      for (var o in list) {
      }
    
    //itar for-i模板
      for (var i = 0; i < list1.length; ++i) {
        var o = list1[i];
      }
    
    

    1.5 集合类型

    Set作为一个盛放不含重复元素的无序多元素容器,如果添加一个已经存在的元素,是无法添加成功的。所以它没有索引。但有很多方法可以对集合进行操作。

    Set<String> languages = {'Java', 'Dart', 'Python', 'C++', 'Kotlin',"Java"};
    print(languages);//{Java, Dart, Python, C++, Kotlin}
    print(languages.add('Java'));//false
    print(languages.add('JavaScript'));//true
    

    1.6 Map类型

    Map为若干个键值对的容器,想用映射之名。其中一个Map对象中的键不能重复,值是可以重复的。

    Map<int, String> map = {1: 'one', 2: 'two', 3: 'three'};
    print(map[3]);//three
    map[4] = 'four';
    print(map.length);//4
    
    

    2. Dart中的变量与常量

    Dart 作为一名新时代的后起之秀,var自然不能少。Dart语言中对象的类型是可以自动推导的。也就是说,上面的代码在声明变量类型时,都可以用一个var关键字解决。

    2.1 var关键字的使用

    //1.不指定类型
    var age = 18;
    var isMan = true;
    var name = '张哈哈先生';
    var languages1 = ['Java', 'Dart', 'Python', 'C++', 'Kotlin'];
    //2.明确指定类型
    String name = '张哈哈先生';
    

    因为有类型推导,所以两种实现效果一样,官方推荐在函数内的本地变量尽量使用var声明。在变量类型并不明确的情况下,可以使用dynamic关键字

    2.2 var的注意事项

    如果只是用var声明变量,该变量之后是可以修改数据类型的。

    var who;
    who="what";
    print(who is String);//true
    who=10;
    print(who is int);//true
    

    如果声明的同时去赋值,那么该对象的类型就是固定的,不可修改的。

    var who="what";
    print(who is String);//true
    who=10;//此处报错
    print(who is int);//true
    

    下面一幅图可以很好地说明原因:


    2.3 常量的定义

    如果一个变量你以后不打算修改,可以使用 final 或者 const进行修饰,当你试图修改它的值,就会报错。

      final PI = 3.14159265;
      PI=4;// ERROR: 'PI', a final variable, can only be set once.
    
      const Pi  = 3.14159265;
      Pi=4;// ERROR: Constant variables can't be assigned a value.
    

    2.4 const和final的区别

    1、一个 final 变量只能赋值一次: 它的值可以在运行时获取
    2、一个 const 变量是编译时常量:代码还没有运行时我们就知道它声明变量的值
    3、举例,同样是当前时间,final修饰的f对象是正确的,但const修饰的c是错误的,原因是final可以在运行时对变量初始化,但const不行。

    final f = DateTime.now(); // OK
    const c = DateTime.now(); // ERROR Const variables must be initialized with a constant value.
    

    3. Dart中的运算符

    常见运算符.png

    3.1 算术运算符

    四则运算

    print(1 + 2);//3    加
    print(1 - 2);//-1   减
    print(1 * 2);//2    乘
    print(1 / 2);//0.5  除
    print(10 % 3);//1   余
    print(10 ~/ 3);//3  商
    

    自加自减

    ---->[情况1:i++]----
    int i=3;
    var a=i++;//执行赋值后i才自加,故a=3
    print('a=$a,i=$i');//a=3,i=4
    
    ---->[情况2:++i]----
    int i=3;
    var a=++i;//执行赋值前i已经自加,故a=4
    print('a=$a,i=$i');//a=4,i=4
    
    ---->[情况3:i--]----
    int i=3;
    var a=i--;//执行赋值后i才自减,故a=3
    print('a=$a,i=$i');//a=3,i=2
    
    ---->[情况4:--i]----
    int i=3;
    var a=--i;//执行赋值前i已经自减,故a=2
    print('a=$a,i=$i');//a=2,i=2
    

    3.2 关系运算符

    print(1 > 2); //false   大于
    print(1 < 2); //true    小于
    print(1 == 2); //false  等于
    print(1 != 2); //true   不等
    print(10 >= 3); //true  大于等于
    print(10 <= 3); //false 小于等于
    

    3.3 逻辑运算符

    bool enter(int age, int height, bool isMan) {
      return (age > 18 || height > 160) && !isMan;
    }
    
    代码表示:年龄大于18或者身高大于160的女性可以进入。
    

    3.4 条件表达式

    三元运算符:条件? 表达式1: 表达式2
    条件成立执行前者,否则,执行后者

    var height =130;
    var pay = (height>120) ? 200:100;
    print(pay);//200
    

    ??运算符: 表达式1 ?? 表达式2 前表达式值为null则取后者。否则,后表达式不会被执行

    //条件表达式
    var conditionBool = true;
    print(conditionBool? 'true': 'false');
    conditionBool = null;
    print(conditionBool ?? 'This message will show when conditionBool is null')
    
    //运行结果
    true
    This message will show when conditionBool is null
    

    4. Dart中的函数

    Dart中,一个函数的基本组成如下:

    4.1 基本使用

    两个数相加

    double add(double a,double b){
      return a+b;
    }
    
    调用:add(10,20);//30
    

    4.2 可选参数+默认值

    两个数相加,并且可以打个折扣

    double add(double a,double b,[double discount=1.0]){
      return (a+b)*discount;
    }
    
    调用:add(10,20,0.7);//21
    

    4.3 属性型参数

    将参数和一个key对应起来,非常方便和清晰的传参模式

    double add(double a,double b,{double discount=1.0,double c=0,double d =0}){
      return (a+b+c+d)*discount;
    }
    
    调用:add(10, 20,discount: 0.7,c: 100);//91.0
    

    4.4 函数参数

    函数本身也是一个对象,可以作为参数传入。

    double add(double a,double b,deal){
      return deal(a)+deal(b);
    }
    
    var fun = (double i) {
      return i * i;
    };
    
    调用:
    print(add(3, 4, fun));//求两数的平方和
    

    4.5 函数简写

    var fun = (double i) {
      return i * i;
    };
    
    可以简写为:
    var fun = (i) {
      return i * i;
    };
    
    进一步可以简写为:
    var fun = (i)=> i * i;
    
    void main() => runApp(MyApp());
    
    它相当于:
    void main() {
      return runApp(MyApp());
    }
    

    相关文章

      网友评论

          本文标题:Flutter之旅:Dart基础语法学习

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