美文网首页
Dart 基础知识(一)

Dart 基础知识(一)

作者: _1633_ | 来源:发表于2021-11-25 22:51 被阅读0次

    文档地址

    什么是 Dart 

        Dart 是一种 易于学习、 易于扩展、并且可以部署到 任何地方(跨平台) 的 应用 编程 语言。我们用 Dart 来 开发 flutter;

    为什么 Dart 

       因为 flutter 选择 Dart 作为 其 开发的 语言,所以 为了开发 flutter  就必须学习 Dart;

    搭建开发环境

       获取Dart

       Dart SDK下载地址


    前置概念

        在学习 Dart 的时候,请牢记下面一些 事实和 概念:

        1. 所有能够使用变量引用的都是 对象, 每个对象都是一个类 的实例。在 Dart 中 甚至连 数字、方法和 null 都是对象。所有的对象都继承于 Object 类;

        2. 使用静态类型可以更清晰的表明你的意图,并且可以让静态分析工具来分析你的代码,然后进行类型推断,声明变量时候指定类型 并不是牵制性的(在调试代码的时候你可能注意到 没有指定类型的变量的类型为 dynamic);

        3. Dart 在运行之前会先解析你的代码。你可以通过使用 类型或者编译时常量来帮助 Dart 去捕获异常以及 让代码运行的更高效;

        4. Dart 支持顶级方法 (例如 main()),同时还支持在类中定义函数(静态函数和实例函数) 你还可以在方法中定义方法 (嵌套方法或者局部方法);

        5. 同样,Dart 还支持顶级变量,以及 在类中定义变量(静态变量和实例变量)。 实例变量有时候被称之为 (Fields)或者属性(Properties);

        6. 和 Java 不同的是,Dart 没有 public、 protected、 和 private 关键字。如果一个标识符以 _开头,则该标识符 在库内是 私有 的;

        7. 标识符 可以以字母或者 _ 下划线开头,后面可以是 其他字符和数字的组合;

        8. 有时候 表达式 expression  语句 statement 是有区别的,所以这种情况我们会分别指明每种情况;

        9. Dart 工具可以指出两种问题:警告和错误。 警告只是说你的代码可能有问题, 但是并不会阻止你的代码执行。 错误可以是编译时错误也可以是运行时错误。遇到编译时错误时,代码将 无法执行;运行时错误将会在运行代码的时候导致一个异常。

        另外:

            main 方法是固定写法,他是程序的入口。 JS 中没有预定的入口函数,但是在 Dart 中, 每个 程序都 必须 有一个顶级的 main() 函数作为应用程序的入口点。

    main

    变量

        使用 var 声明变量, 可赋予不同类型的值;

        变量未初始化时,默认值为 null;

        如果你以后 不打算修改一个变量,使用 final 或者 const。 一个 final 变量只能赋值一次;一个 const 变量是编译时常量(const 变量同时也是 final 变量)。 顶级的 final 变量或者类中的 final 变量在 第一次使用的时候初始化

        使用 final 声明一个只能 赋值一次 的变量;

        var name = 'lily';   // 创建一个变量并初始化

        Object name0 = 'lilei'; // 一个对象的引用不局限于单一的类型,可以将其指定为 Object(或 dynamic)类型。

        String name1 = 'lucy'; // 指定类型   

        final name = 'Bob';

        name = 'Alice'; // Error: a final variable can only be set once.

        // dynamic 声明动态类型   

       dynamic a = 20;   

       a = ' sssss'


    常量

        使用 const 声明常量;

        使用 const 声明的必须是 编译期常量, 常量不能修改, 跟 js 一样;


    数据类型

        Dart 的内置数据类型

            Numbers (int, double)

            Strings (String)

            Booleans (bool)

            Lists (也被称为 arrays)

            Sets (Set)

            Maps (Map)

            Runes (常用于在 Characters API 中进行字符替换)

            Symbols (Symbol)

            The value null (Null)


    数值类型

        关键字 num 分为:整型 int   、浮点型 double

        有具体类型,就可以不用 var 声明,使用具体的类型

    数值类型

    数值型操作

        运算符 : +、-、*、/、~/ (这两个货在一起叫取整)、%( 取余)

        常用属性: isNAN,isEven, isOdd等(返回布尔值)

        常用方法:abs()、round()、floor(), ceil()、toInt()、toDouble()  看文档

    数值型操作

    字符串

        关键字 String

            使用 单引号 或者 双引号 创建字符串

            使用三个 引号 或者 双引号 创建多行字符串(跟python不一样、python是注释)

    多行字符串 保留中间的空格

        使用 r 创建原始 raw字符串

             加上 r  打印的时候就会把 \n 打印出来, 不会进行它具体含义的表达(即不会被做任何处理(比如转义)的字符串);

        字符串操作

            运算符 : +  、 * 、==、 [ ]

            str [下标 ]

            在字符串中,请以 ${ 表达式 }  的形式使用表达式,如果表达式是一个标识符,可以省略掉 {}

            插值表达式: ${ expression }

    插值表达式

        常用属性: length , isEmpty

        常用方法: contains(), subString(), startsWith(), endsWith(), indexOf(), lastIndexOf()

        toLowerCase(), toUpperCase(), trim(), trimLeft(), trimRight(), split(), replace() 太多了,自己查 api


     布尔型

        当 Dart 需要一个布尔值的时候,只有 true 对象才被认为是 true 所有其他的值都是 flase。这点和 JavaScript 不一样, 像 1、 "aString"、 以及 someObject 等值都被认为是 false。

        关键字 bool

        bool a = true;   bool b = false;

        Dart 的类型安全 不允许 你使用类似 if (nonbooleanValue或者 assert (nonbooleanValue这样的代码检查布尔值。相反,你应该总是 显示地检查布尔值,比如像下面的代码这样:

    显示地检查布尔值

    列表List (数组)

         创建方式:

            1 var list = [1,2,3];

            2 创建 不可变 list :var list = const [1,2,3];

            3 构造创建: var list = new List();

            Dart 在 2.3 引入了 扩展操作符(...)和 空感知扩展操作符(...?)

    扩展操作符

            如果扩展操作符 右边 可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常:

     空感知扩展操作符

            Dart 还同时引入了 集合中的 if 和 集合中的 for 操作,在构建集合时,可以使用条件判断 (if) 和循环 (for);

    集合中的 if 和 集合中的 for 

            常用操作

              length ,  add(), insert(下标要插入的内容), remove(要移出的内容), clear(), 返回下标indexOf(要查找的内容), lastIndexOf(), sort(),sublist(), shuffle(),asMap(), forEach()

            list.asMap() 将 list 转换为 map,key 就是下标


    Map

        Map 是用来关联 keys 和 values 的对象。其中键和值都可以是任何类型的对象,每个 键 只能出现一次但是 值 可以重复出现多次(基本和 JS 的操作相同);

        创建方式:

        1. var map = { key: value, key: value }

        2. 创建 不可变Map

             var map = const  { key: value, key: value }

        3. 构造创建: var map = new Map()

        检索的 Key 不存在于 Map 中则会返回一个 null;

     编译时常量

        常用操作

            length, isEmpty(), isNotEmpty(), keys, values, containsKey(), containsValue(),remove(),

    forEach()

        print(map.keys) 打印所有的 key

        Map 可以像 List 一样支持使用扩展操作符(... 和 ...?)以及集合的 if 和 for 操作。


    Set

        在 Dart 中,set 是一组特定元素的无序集合。 Dart 支持的集合由集合的字面量( Set 字面量literals 是在 Dart 2.2 中才加入的 ) 和 Set 类 提供;

        Set 还是 map?  Map 字面量语法相似于 Set 字面量语法。因为先有的 Map 字面量语法,所以 {} 默认是 Map 类型。如果忘记在 {} 上注释类型或赋值到一个未声明类型的变量上,那么 Dart 会创建一个类型为 Map<dynamic, dynamic> 的对象。

        从 Dart 2.3 开始,Set 可以像 List 一样支持使用扩展操作符(... 和 ...?)以及 Collection if 和 for 操作。

        添加元素 add addAll

        获取元素的数量  .length 

    set 常用操作

        Set 变量前添加 const 关键字创建一个 Set 编译时常量:

     编译时常量

    函数

        函数 也是对象,并且有具体类型 Function

        方法定义

            返回类型 方法名( 参数1,参数2,.......) {

                    // 函数体..... 

                    return 返回值;

           }

           返回值类型、参数类型都可省略;

            方法都有返回值,如果没有指定,默认 return null

        箭头函数

            语法 => 表达式 是 { return 表达式;} 的简写

      箭头函数

        可选参数

            函数可以有两种形式的参数:必要参数 和 可选参数;

            必要参数 定义在 参数列表前面可选参数 则定义在 必要参数后面;

            可选参数的两种形式 命名的 或 位置的

                命名参数

                    使用 { } 将一系列参数包裹起来作为 命名参数:

                    命名参数默认为可选参数,当你调用函数时,可以使用 参数名参数值 的形式来指定命名参数;

     命名参数

               位置参数

                    使用 [ ] 将一系列参数包裹起来作为位置参数, 

                    当你调用函数时,就不用key, value 形式了,但是 一定要按顺序 来,不能像上述 命名参数 那样 位置随便;

     位置参数

        默认参数

            使用 = 在可选参数指定默认值, 默认值只能是编译期常量,没有指定默认值的情况下默认值为 null,跟JS一样;

    默认参数

        匿名函数

            可以创建一个没有名字的方法,称之为 匿名函数、 Lambda 表达式 或 Closure 闭包;

                ([ [类型参数[, …] ]) {

                  //函数体;

                };

    匿名函数 箭头函数的形式

       词法作用域

            Dart 是词法有作用域语言,变量的作用域在写代码的时候就确定了,大括号内定义的变量只能在大括号内访问,与 Java 类似;

            函数内部能访问到包括顶层变量在内的所有的变量, 同 JS 一样;

       闭包

            闭包 即一个函数对象,即使函数对象的调用在它原始作用域之外,依然能够访问在它词法作用域内的变量。

            函数可以封闭定义到它作用域内的变量。

      闭包

    返回值

        所有的函数都有返回值。没有显示返回语句的函数最后一行默认为执行 return null;。

    main() 函数

        每个 Dart 程序都 必须 有一个 main() 顶级函数作为程序的入口, main() 函数返回值为 void 并且有一个 List<String> 类型的可选参数。

    main() 函数

    相关文章

      网友评论

          本文标题:Dart 基础知识(一)

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