前言

本文的所有内容均是官方文档的简单翻译和理解,需要查看原文,请登录  https://www.dartlang.org/guides/language/language-tour  阅读, 让我们愉快地开始编程吧。

再加一句:dart的关键字汇总及详细介绍我就不翻译搬运了,大家直接去上边的网址查看官方文档即可。

第一部分:基础概念

以下9条是直接翻译的,官方说希望你在学习dart时记住这些重要的概念

1.dart将所有的变量都视为一个对象,所有的对象都看作一个类的实例,数字、函数、null也是对象,所有的对象都派生自Object类;
2.dart是强类型的语言,类型注解仍然是可选的,因为dart能够推断类型。当你希望变量类型不被指定时,请使用dynamic类型;
3.dart支持通用类型,如list<int>(整数列表)或list<dynamic>(任何类型的对象列表);
4.dart支持顶级函数(如main())以及绑定到类或对象的函数(分别是静态方法和实例方法)。还可以在函数(嵌套函数或局部函数)中创建函数;
5.dart支持顶级变量,以及绑定到类或对象的变量(静态变量和实例变量)。实例变量有时称为字段或属性
6.dart没有public、private、protect关键字,如果一个变量以下划线(_)开头,通常表示其是库私有的;
7.dart的标识符以字母或下划线开头,后跟任意的字符、数字组合;
8.dart同时具有表达式(具有运行时值)和语句(不具有运行时值),语句通常包含一个或多个表达式,但表达式不能直接包含语句;
9.dart编译工具通常会报告两种问题:警告和错误。

第二部分:变量

(1) var类型

什么叫变量我们就不说了啊,能看到这文章的应该都了解这个。dart认为变量存储的是某个对象的reference(引用,标记),我们举个栗子(非完整代码):

var name = 'Jack';

上边那一行代码,var是一个类型关键字,name是变量名字,'Jack'是变量的值。

var类型的变量,编译器会根据变量值的类型自动为该变量指定类型,例如上边的代码,系统会判定name变量为字符串类型,如果你这样写: var name = 36; 那么编译器就判断name是数字类型。

使用var类型声明一个变量并赋值后,该变量的类型就确定了,不能再更改了,例如这样写代码(非完整代码):

var name = ;
name = 'Jack';
print(name);
则会报错:
Error: A value of type 'String' can't be assigned to a variable of type 'int'.
    Try changing the type of the left hand side, or casting the right hand side to 'int'.
     name = 'Jack';
上边错误的原因是适用var声明变量name,并初始化为36,则编译器就会坚定地认为name是个int类型变量,当再次尝试为name变量赋值为String类型时,编译器就不同意了。
那么这个时候有同学会问了“如果我想在使用的过程中,为某个变量随意赋任何类型的值可怎么办呢?”,不要紧,dart能够满足你,请看下文。

(2) dynamic类型

顾名思义,dynamic类型是允许程序员在使用过程中动态地改变变量类型的类型,我们看例子(非完整代码):

dynamic name = ;
print(name);
name = 'Jack Ma';
print(name);

这个例子很眼熟吧,就是上边那个。因为name被声明为了dynamic类型,因此我们可以对它先赋值int值,再赋值String值,这都没问题的,我们运行一下看看结果:

Amazing! 没有报错,而且准确地打印出了我们的预期值。

(3) 未初始化赋值的变量

以上两个例子中,我们在变量声明的地方都给它初始化了,那么又有同学会问了“如果我声明一个变量,没有对它初始化,那么默认值是什么呢?” 这位同学很爱思考啊,接下来我们一起了解了解未初始化的情况。

dart认为任何类型的变量,如果未初始化,其默认值都为null。 我们看例子(完整代码、可直接编译运行):

main()
{
int a;
if(null == a)
{
print("a is null\n");
}
else
{
print("Test \n");
}
}

我们的运行结果是   a is null

总结

本文主要分享了dart的一些基本概念、思想和两种变量类型,其中:

var类型的变量,系统会根据其初始化值为其确定类型,且确定之后不能再更改;

dynamic类型的变量,在使用中可以随时改变其类型,系统会根据该变量的当前值类型确定其当前时刻的类型;

若声明了某个类型的变量但未对其初始化,则系统认为该变量当前值为null。

[dart学习]第二篇:dart变量介绍 (一)的更多相关文章

  1. Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

    Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图: ​ 从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...

  2. Java泛型学习---第二篇

    泛型学习第一篇 1.泛型之擦拭法 泛型是一种类似"模板代码"的技术,不同语言的泛型实现方式不一定相同. Java语言的泛型实现方式是擦拭法(Type Erasure). 所谓擦拭法 ...

  3. 从.Net到Java学习第二篇——IDEA and start spring boot

    从.Net到Java学习第一篇——开篇 所谓工欲善其事,必先利其器,做java开发也一样,在比较了目前最流行的几个java IDE(eclipse,myeclipse.IDEA)之后,我果断选择IDE ...

  4. [dart学习]第一篇:windows下安装配置dart编译环境,写出helloworld

    前言 博主非科班出身,平时多用C语言,最近想了解学习一门第二语言,看上了可用于移动开发的目前还小众一点dart,准备用一段比较长的时间来慢慢学习.理解. 关于dart语言不再详细介绍了,大家可以访问  ...

  5. nginx基础学习第二篇:nginx内置变量的使用

    ngx_http_core模块提供的内置变量有很多,常见的有 $uri,用来获取当前请求的uri,不含请求参数. $request_uri,用来获取请求最原始的uri,包含请求参数,且未解码. $re ...

  6. Golang学习-第二篇 搭建一个简单的Go Web服务器

    序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...

  7. LINQ查询操作符 LINQ学习第二篇[转]

    一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataCo ...

  8. LINQ查询操作符 LINQ学习第二篇

    一.投影操作符 1. Select Select操作符对单个序列或集合中的值进行投影.下面的示例中使用select从序列中返回Employee表的所有列: using (NorthwindDataCo ...

  9. R语言学习 第一篇:变量和向量

    R是向量化的语言,最突出的特点是对向量的运算不需要显式编写循环语句,它会自动地应用于向量的每一个元素.对象是R中存储数据的数据结构,存储在内存中,通过名称或符号访问.对象的名称由大小写字母.数字0-9 ...

随机推荐

  1. [LeetCode] Binary Trees With Factors 带因子的二叉树

    Given an array of unique integers, each integer is strictly greater than 1. We make a binary tree us ...

  2. spring-boot+mybatisPlus+shiro的集成demo 我用了5天

    spring-boot + mybatis-plus + shiro 的集成demo我用了五天 关于shiro框架,我还是从飞机哪里听来的,就连小贱都知道,可我母鸡啊.简单百度了下,结论很好上手,比s ...

  3. 关于select的id以及value传给后台的问题

    下面解释下后端为什么让传id的时候我们要怎末办? 定义一个空对象将他的值给select的值,option遍历的时候:value="item",这里的item是一个对象,也就是如果你 ...

  4. Nginx基本安装

    Windows安装Nginx 解压:nginx-windows 双击: nginx.exe 能看到nginx欢迎界面说明,nginx安装成功 演示下 nginx做静态服务器 启动Nginx C:\se ...

  5. CentOS / RHEL 7 : How to setup yum repository using locally mounted DVD

    1. Mount the RHEL 7 installation media ISO to some directory. For example /mnt : # mount -o loop rhe ...

  6. Linux技术栈整理一:系统体系结构

    Linux操作系统必备的硬件构造: CPU 主板 显卡 硬盘 网卡 外设(键鼠-输入设备 / 显示器-输出设备) 内核管理调度: 内核体系结构: 来源于:极客专栏

  7. Vue学习记录第二天

    又来做笔记啦,今天又自暴自弃了,还好及时清醒过来了,什么时候努力都不晚,主要是要一直坚持下去,只要坚持就一定会有收获,所有成功得人背后都是付出了巨大得努力的,没有人平白无故的成功.看似光鲜亮丽的背后, ...

  8. java项目对jar包加密流程,防止反编译

    Java 开发语言以其安全性高.代码优化.跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位.特别是近年来大数据.互联网+.云计算技术的不断发展,Java 开发语言 ...

  9. 2019-04-15 Python之利用matplotlib和numpy的简单绘图

    环境:win10家庭版, Anocada的 Spyder 一.简单使用 使用函数 plt.polt(x,y,label,color,width) 根据x,y 数组 绘制直,曲线 import nump ...

  10. Java中数组的几个常用算法:插入算法,删除算法,冒泡排序算法

    前言: 在Java中我们常常会用数组,提到数组就不得不介绍数组中常用到的几个算法. 有插入算法,删除算法,冒泡排序算法等. 在学习这几个数组的算法前,我们先来了解一下关于数组一些基本知识. 数组的基本 ...