Dart 基础知识(一)

文档地址

什么是 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() 函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • Dart重要的概念 所有的东西都是对象,无论是变量、数字、函数都是对象。所有的对象都是类的实例。所有的对象都继承自...
    JeromeWang阅读 1,023评论 1 1
  • Dart 简介Flutter应用程序使用Dart语言开发,Dart是面向对象编程语言,由Google于2011年推...
    搬运工iOS橙阅读 433评论 0 0
  • 程序入口 控制台输出 变量 检查null或零 Functions 异步编程Futuresasync和await 程...
    风吹裤裤的海量阅读 446评论 0 0
  • 一、程序入口 在Dart中,每个app都必须有一个顶级的main()函数作为应用 程序的入口点 二、变量声明 da...
    嗯o哼阅读 359评论 0 0
  • 小伙伴,大家新年好,这是我2021年开始写的文章啦!前一段时间不是过年嘛,就懒惰了一段时间,但是最近公司这边也开始...
    jeffrey12138阅读 434评论 0 1