zoukankan      html  css  js  c++  java
  • Flutter中Dart语言概述

    Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧

    一、Dart语言之初体验

    Dart可以在编译器(Android Studio)、命令行(前提是安装了Dart SDK)及网页repl.it中调试编译,由于本次内容比较简单,我们直接在网页中调试编译即可。

    我们定义一个输出当前时间的函数,并输出当前时间

    //输出当前时间
    void nowTime() {
      int year = DateTime.now().year;
      int month = DateTime.now().month;
      int day = DateTime.now().day;
      int hour = DateTime.now().hour;
      int minute = DateTime.now().minute;
      int second = DateTime.now().second;
      String str = 'Hello World, This is $year-$month-$day $hour:$minute:$second';
      print(str);
    }
    

    和绝大多数其他语言一样,Dart要求以main函数作为执行的入口,我们再定义main函数,并将输出当时时间的函数放入main函数中

    void main() {
    	nowTime();
    }
    

    点击“run”按钮,命令就会输出

    Hello World, This is 2019-8-11 10:45:46
    

    我们已经可以简单的运行Dart代码了,我们接下来再看一下Dart的基本变量类型

    二、Dart的变量与类型

    在Dart中,所有的变量都可以用var来申明,当然,也可以指定具体的类型来申明一个变量。当使用var申明变量时,表示类型是交由编译器推断决定的。虽然Dart支持用var来申明变量,但我还是建议使用具体的类型来申明变量,这样编辑器和编译器就能使用这些具体的类型,向你提供代码补全或编译告警的提示了。

    注意:在默认情况下,所有未初始化的变量值都是null,因此,我们判断变量是否初始化时只用和null比较即可。

    Dart是类型安全的语言,并且所有类型都是对象类型,都继承自顶层类型Object,因此一切变量的值都是累的实例(即对象),其中包括数字、布尔值、函数和null也都是继承自Object对象。

    Dart内置了一些基本类型,如num、bool、String、List及Map。

    num、bool及String

    num、bool及String基本上是编程语言中最常用的类型

    Dart的数值类型num只有两种子类:int(整数类型)和double(浮点类型)

    void numVerb() {
      int x = 100;
      double y = 5.2;
      double xy=x*y;
      int roundY = xy.round();
      print('x = $x, y = $y, xy = $xy, roundY = $roundY');
    }
    
    x = 100, y = 5.2, xy = 520.0, roundY = 520
    

    除了常见的基本运算符(比如:+、-、*、/,以及位运算符)外,还能使用继承自num的abs()、round()等方法来实现求绝对值、取整等功能。

    Dart的布尔类型bool也只有两种取值:true和false,他们都是编译时常量。 Dart是类型安全的,因此我们需要显示的检查值

    void checkValue() {
      bool isTrue = true;
      assert(isTrue == true);
      //assert(isTrue);//错误
    }
    

    Dart的String由UTF-16de字符串组成,定义字符串时我们既能使用单引号也能使用双引号,并且还能在字符串中嵌入变量或表达式(可以使用${express}把一个表达式的值放进字符串,而如果是一个标识符,则可以省略{})。

    /**
     * 将一个字符串中的字母全部转换为大写
     */
    void upperCase() {
      String str = 'toUpperCase';
      String str2 = "toUpperCase";
      String str3 = 'str = $str, str2 = $str2, str to upperCase: ${str.toUpperCase()}';
      print(str3);
    }
    
    str = toUpperCase, str2 = toUpperCase, str to upperCase: TOUPPERCASE
    

    为了获得内嵌对象的字符串,Dart会调用对象的toString()方法,而常见字符串的拼接,Dart则通过内置运算符“+”实现。

    void stringVerb() {
      int year = DateTime.now().year;
      int month = DateTime.now().month;
      int day = DateTime.now().day;
      int hour = DateTime.now().hour;
      int minute = DateTime.now().minute;
      int second = DateTime.now().second;
      String str = 'Hello World, This is ' +
          year.toString() +
          '-' +
          month.toString() +
          '-' +
          day.toString() +
          ' ' +
          hour.toString() +
          ':' +
          minute.toString() +
          ':' +
          second.toString();
      print(str);
    }
    
    Hello World, This is 2019-8-11 12:19:31
    

    对于多行字符串对的构建,你可以通过三个单引号或三个双引号的方式申明

    void stringVerb() {
      int year = DateTime.now().year;
      int month = DateTime.now().month;
      int day = DateTime.now().day;
      int hour = DateTime.now().hour;
      int minute = DateTime.now().minute;
      int second = DateTime.now().second;
      String str = """Hello World, This is
      $year-$month-$day $hour:$minute:$second""";
      print(str);
    
      String str2 = '''Hello World, This is
      $year-$month-$day $hour:$minute:$second''';
      print(str2);
    }
    
    Hello World, This is
      2019-8-11 12:32:5
    Hello World, This is
      2019-8-11 12:32:5

    广州品牌设计公司https://www.houdianzi.com PPT模板下载大全https://redbox.wode007.com

    List和Map

    List和Map分别对应其他编程语言中的数组和字典类型,统称为集合类型

    void listTest() {
      List<String> arr1 = ['name', 'age', 'sex'];
      for (var value in arr1) {
        print(value);
      }
      List<int> aar2 = List.of([1, 2, 3]);
      aar2.add(4);
      for (var value2 in aar2) {
        print(value2);
      }
      List<num> nums = new List<num>();
      nums.add(1);
      nums.add(1.1);
      nums.add(3);
      nums.add(5.20);
      for (var value3 in nums) {
        print(value3);
      }
    }
    
    name
    age
    sex
    1
    2
    3
    4
    1
    1.1
    3
    5.2
    

    如上代码所示,我们申明并初始化了三个List变量,并调用其各自的迭代方法依次打印出其内部元素

    void mapTest() {
      Map<String, String> map = {'name': 'Jack', 'age': '18', 'sex': '男'};
      map['name'] = 'Tom';
      map['age'] = '20';
      map['sex'] = '男';
      map.forEach((k, v) => print('$k:$v'));
    
      Map map2=new Map<String,String>();
      map2['name']='Dart';
      map2['age']='2';
      map2.forEach((k,v)=>print('$k:$v'));
    }
    
    name:Tom
    age:20
    sex:男
    name:Dart
    age:2
    

    如上代码所示,我们申明并初始化了两个Map变量,同样调用其各自的迭代方法依次打印出其内部的元素

    定义常量

    如果你想定义不可变的变量,则需要在定义前加上final或const关键字

    const:表示变量在编译期间既能确定的值

    final:表示变量可以在运行时确定值,但一旦确定后就不可改变

    const与final区别:在定义const常量时,必须直接赋值,且只能是一个固定值,不能为一个变量或公式;在定义final常量时,可以赋值也可以不赋值,赋值时可以赋值为一个固定值,也可以赋值为一个变量或公式,但一旦赋值后就不能再改变

  • 相关阅读:
    个人7天冲刺计划
    团队项目开发个人周计划
    满足NABC的软件创意
    关于二维数组相邻元素和的最大值问题的探讨
    敏捷软件开发综述
    关于开发方法的综述
    二维数组的子数组求最大值问题
    电梯调度实施
    小组作业提交报告
    模拟卷链接
  • 原文地址:https://www.cnblogs.com/qianxiaox/p/14119982.html
Copyright © 2011-2022 走看看