前言

最近在看 dart 了,本着 “纸上得来终觉浅,绝知此事 markdown” 的原则,准备边学边写,写一个系列,这是第一篇。学习过程中主要是参考 A Tour of the Dart LanguageA Tour of the Dart Libraries, 外加自己的一些理解。内容上侧重于基础以及比较 dart 和 js 的异同。

安装 sdk

工欲善其事,必先利其器,我们先来安装一下,dart 的 sdk,只有这样,我们写的 dart 代码才能跑起来。安装 sdk 可以参考搬砖老程的 这篇博客,写的可以说是很详细了。

安装完成之后,在命令行终端输入 dart,如果输出 dart 相关命令的解释,那就表示我们的环境安装成功。接下来我们先记住一个命令 dart xxx.dart 就可以执行 dart 文件了。以下面这段 dart 代码为例:


// Define a function.
printInteger(int aNumber) {
print('The number is $aNumber.'); // Print to console.
} // This is where the app starts executing.
main() {
var number = 42; // Declare and initialize a variable.
printInteger(number); // Call a function.
}

将上面的这段代码保存为 main.dart,在终端输入 dart main.dart,我们就将第一个 dart 程序跑了起来。

dart 中的一些重要的概念

以下部分翻译自 https://www.dartlang.org/guides/language/language-tour#important-concepts

当您在了解 Dart 语言时,请记住以下事实和概念:

可以在变量中引用的所有内容都是一个对象,每个对象都是一个类的实例。number,函数和 null 都是对象。所有对象都从 Object 类继承。

尽管 Dart 是强类型的,但类型声明是可选的,因为 Dart 可以推断类型。在上面的代码中,数字被推断为 int 类型。如果要明确说明不需要任何类型,请使用特殊类型 dynamic。

Dart 支持泛型类型,如 List (整数列表)或 List (任何类型的对象列表)。

Dart 支持顶级函数(例如 main()),以及绑定到类或对象的函数(分别是静态和实例方法)。您还可以在函数内创建函数(嵌套函数或本地函数)。

类似地,Dart 支持顶级变量,以及绑定到类或对象的变量(静态和实例变量)。实例下的变量有时称为字段或属性。

与 Java 不同,Dart 没有关键字 public,protected 和 private。如果标识符以下划线(_)开头,则它对其库是私有的。

标识符可以以字母或下划线(_)开头,后跟这些字符加数字的任意组合。

Dart 有表达式(执行时会产生值)和语句(执行时不会产生值)。例如,条件表达式条件? expr1:expr2 的值为 expr1 或 expr2。将其与 if-else 语句进行比较,该语句没有产生任何值。语句通常包含一个或多个表达式,但表达式不能直接包含语句。

Dart 工具可以报告两种问题:警告和错误。警告只是表明您的代码可能无法正常工作,但它们不会阻止您的程序执行。错误可以是编译时或运行时。编译时错误会阻止代码执行; 运行时错误导致代码执行时引发异常。

变量

在 dart 中,可以使用 var, dynamic, const, final 来声明变量 / 常量。为了找出它们之间的不同,首先来看一个关于 var 和 dynamic 差别的例子。


main(List<String> args) {
// var
var d = "111";
// String d ='111'; 等价于显式声明 d 的类型并赋值
// d = 2; // 不能再赋不同类型的值
print(d); // dynamic
dynamic c = 'sss';
c = 3; // 可以赋值不同类型的值
print(c);
}

从上面的例子可以看出,dart 具有类型推断机制,当使用 var 声明一个变量时,这个变量自动被定义成所赋值的类型,之后重新赋值时,只能对这个变量赋 ** 同类型 ** 的值。

而 dynamic 在重新赋值的时候可以赋不同类型的值。

接下来再谈谈 finalconst,final 和 const 都只能被赋值一次,但是两者还是有如下区别:

  • 1️⃣const 可以作用在值上, 当 const 作用在值上时,值不可修改,如果对应的变量没有用 const 或者 final 声明,变量可以重新赋值
  • 2️⃣使用 const 声明的对象,之后不能再进行操作 (unmodifiable), 而 final 声明的是可以的。参考下面的代码:

final name = 5;
final name1 = const 5;
var name2 = const {};
const ax = 6; const x = [];
x.add(6); // Cannot add to an unmodifiable list final y = [];
y.add(9); // ok const x1 = {};
obj['x1'] = 5; //Cannot set value in unmodifiable Map final y1 = {};
obj['y1'] = 5; //ok

新手开车,如有错误还请指出。未完待续

dart之旅(一)的更多相关文章

  1. dart之旅(二)- 内建类型

    目录 number 类型 字符串 布尔类型 像大多数语言一样,dart 也提供了 number,string,boolean 等类型,包括以下几种: numbers strings booleans ...

  2. dart之旅(三)- list

    list, 在 js 中被称为数组, 但是和 js 中的数组还是有不少不同的地方,我们来看一个例子: // 声明一个长度不可变的 list List<int> fixedLengthLis ...

  3. Sky(dart)语言介绍-android学习之旅(十)

    认识dart语言 google于2011年10月10日发布了"dart"语言的"早起预览版",google希望利用这款语言,帮助开发者克服javaScript的 ...

  4. Flutter & Dart 安装在window系统

    一.系统环境 flutter最低要求 1,windows7 SP1 64位版本以上,我的系统就是windows 7 sp1 64bit 2,git for windows ,没有安装的需要到这里下载  ...

  5. [Dart]语法基础

    此页面向您展示如何使用每个主要Dart功能,从变量和运算符到类和库,假设您已经知道如何使用其他语言编程. 要了解有关Dart核心库的更多信息,请参阅 Dart Libraries之旅.无论何时需要有关 ...

  6. dart lang 开发环境

    ========================Dart SDK 下载========================Dart SDK 主页: https://dart.dev/toolsDart S ...

  7. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  8. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  9. 【C#代码实战】群蚁算法理论与实践全攻略——旅行商等路径优化问题的新方法

    若干年前读研的时候,学院有一个教授,专门做群蚁算法的,很厉害,偶尔了解了一点点.感觉也是生物智能的一个体现,和遗传算法.神经网络有异曲同工之妙.只不过当时没有实际需求学习,所以没去研究.最近有一个这样 ...

随机推荐

  1. 机器学习(三)--------多变量线性回归(Linear Regression with Multiple Variables)

    机器学习(三)--------多变量线性回归(Linear Regression with Multiple Variables) 同样是预测房价问题  如果有多个特征值 那么这种情况下  假设h表示 ...

  2. javascript 新建实例对象

    在main js里面new 这样一个实例算怎么回事,如果不这么new, ToolBar里就会报错: Portal.gbl = { constants : new Portal.common.Const ...

  3. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  4. POST application/json 适用于传递多层的json

    本来以为自己写了那么多post请求,ajax已经难不住了呢, 结果现实无比的残酷, 后台换成了java,发多层级的json,后台就取不到了, 虽然到最后还是配置正确了,..记录下来,引以为戒, axi ...

  5. CSS学习总结4:派生选择器学习总结

    派生选择器:通过依据元素在其位置的上下文关系来定义样式,你可以使标记更加简洁.派生选择器中一共分为三种:后代选择器.子元素选择器.相邻兄弟选择器. 1.初识派生选择器 实例:你希望列表中的 stron ...

  6. 解决vs code 内置终端,字体间隔过大问题。(linux centos7成功)

    如图. 去文件-首选项-设置里修改. "terminal.integrated.fontFamily": ""注意此处默认为空白,所以显示的就比较奇怪. 此处我 ...

  7. Linux安装yum

    方法/步骤 1 查看.卸载已安装的yum包 查看已安装的yum包 #rpm –qa|grep yum 卸载软件包 #rpm –e –nodeps yum 2 下载安装依赖包python python- ...

  8. 源码分析MySQL mysql_real_query函数

    目录 目录 1 1. 前言 1 2. 调用路径 2 3. MAX_PACKET_LENGTH宏 2 4. DBUG_RETURN宏 3 5. COM_QUERY枚举值 3 6. mysql_query ...

  9. JSON笔记整理

    JSON简介:     JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML ...

  10. Java变成思想总结

    Java容器 collection一个独立的元素序列,这些元素都服从一条或多条规则.list必须按照插入的顺序保存元素,set不能有重复元素,queue按照排队的顺序确定对象产生的顺序.map一组成对 ...