02_Dart初识

02_Dart初识

Dart简介

Dart是谷歌开发的计算机编程语言,后来被Ecma (ECMA-408)认定为标准。它被用于web、服务器、移动应用和物联网等领域的开发。它是宽松开源许可证(修改的BSD证书)下的开源软件。

Dart是面向对象的、类定义的、单继承的语言。它的语法类似C语言,可以转译为JavaScript,支持接口(interfaces)、混入(mixins)、抽象类(abstract classes)、具体化泛型(reified generics)、可选类型(optional typing)和sound type system。

Hello Word

void main()
{
  print("Hello, world!");
}

Dart语法规则

  • Dart中所有的变量包括数字、函数和null 都是对象,每一个 对象都是一个类的实例,他们都继承于Object
  • Dart是强类型语言,但是生明变量时也可以不指定类型,因为Dart可以自动推断,在上面的例子中,变量number就被自动推断为int类型
  • Dart支持泛型,如List<int>表示集合元素类型为整型、List<dynamic>表示元素类型为任何类型
  • Dart除了支持我们常见的静态函数(类直接调用)和普通函数(对象调用)外,同时也支持顶级函数如main() 和嵌套函数(函数里面的函数,也叫本地函数)
  • 与函数类似,Dart也支持顶级变量,同时支持静态变量和实例变量,实例变量也被叫做字段或属性 和java不同,Dart没有public、protected、private权限修饰符,在Dart里以下划线_开头的标志符表示是私有的
  • Dart里面的标识符可以字母或下划线(_)开头,以字符和数字的任何组合。
  • 要注意区分表达式和语句的不同,如var a = 3 + 2; //整体是一个赋值语句,“=”右边部分即"3 + 2"是一个表达式。
  • Dart工具会向你发出两种类型的提醒:警告和错误。警告代表你的代码可能有问题,但是不会阻止程序的运行;错误分为编译错误和运行错误,前者会阻止程序的运行,后者则会在程序运行使抛出异常!

关键字

  • 上面带有字样1的是内置标志符号,这些不能作为变量名。
  • 带有上标2的单词是内置的标识符。为了简化将JavaScript代码移植到DART的任务,这些关键字在大多数地方都是有效的标识符,但它们不能用作类名或类型名称,也不能用作导入前缀。
  • 带有3字样的是Dart2新增的用于支持异步的关键字,其他的都是保留字!

变量

变量声明有以下几种方式:

var name = 'Bob'; //类型自动推断
dynamic name = 'Bob';//dynamic表示变量类型不是单一的
String name = 'Bob';//明确声明变量的类型
int lineCount;//所有的变量包括数字类型,如果没有初始化,其默认值都是null

const和final

用法和其他语言类似,在声明变量的时候,除了var,还可以使用const和final,同时,在使用const和final的时候,可以省略var或者其他类型。

const和final定义的都是常量,值不能改变并且在声明的时候就必须初始化但是也有细微差别,简单来说

  • const定义的是编译时常量,只能用编译时常量来初始化
  • final定义的常量可以用变量来初始化
final time = new DateTime.now(); //Ok
const time = new DateTime.now(); //Error,new DateTime.now()不是const常量

var、final在左边定义变量的时候,并不关心右边是不是常量,但是如果右边用了const,那么不管左边如何,右边都必须是常量。

const list = const[1,2,3];//Ok
const list = [1,2,3];//Error

final list = [1,2,3];//Ok
final list = const[1,2,3];//Ok
final list = const[new DateTime.now(),2,3];//Error,const右边必须是常量

数据类型

Dart中所有东西都是对象,包括数字、函数等 它们都继承自Object,并且默认值都是null(包括数字)因此数字、字符串都可以调用各种方法

Dart有七种内置的数据类型:

  • numbers
  • strings
  • booleans
  • lists (也称为数组)
  • maps
  • runes (用于表示字符串中的Unicode字符)
  • symbols

numbers

Dart中Numbers有两种形式

  1. int

整数值不大于64位,取决于平台。在DART VM上,值范围为 -2^63 to 2^63 - 1.编译为JavaScript的DART使用JavaScript数字,允许从-2^53到2^53-1之间的值。

  1. double

64位(双精度)浮点数字

int和double都是num的子类型,num包含基本操作符如+ - / *,同时也有众多的方法如abs() ceil() floor()等,int里面还有位操作符如>>,更多详细内容参见dart:math.

void main()
{
  //Dart 语言本质上是动态类型语言,类型是可选的
  //可以使用 var 声明变量,也可以使用类型来声明变量
  //一个变量也可以被赋予不同类型的对象
  //但大多数情况,我们不会去改变一个变量的类型

  //字符串赋值的时候,可以使用单引号,也可以使用双引号
  var str1 = "Ok?";

  //如果使用的是双引号,可以内嵌单引号
  //当然,如果使用的是单引号,可以内嵌双引号,否则需要“\”转义
  //String str2 = ‘It\’s ok!’;
  String str2 = "It's ok!";

  //使用三个单引号或者双引号可以多行字符串赋值
  var str3 = """Dart Lang
  Hello,World!""";

  //在Dart中,相邻的字符串在编译的时候会自动连接
  //这里发现一个问题,如果多个字符串相邻,中间的字符串不能为空,否则报错
  //但是如果单引号和双引号相邻,即使是空值也不会报错,但相信没有人这么做
  //var name = 'Wang''''Jianfei'; 报错
  var name = 'Wang'' ''Jianfei';

  //assert 是语言内置的断言函数,仅在检查模式下有效
  //如果断言失败则程序立刻终止
  assert(name == "Wang Jianfei");

  //Dart中字符串不支持“+”操作符,如str1 + str2
  //如果要链接字符串,除了上面诉说,相邻字符串自动连接外
  //还可以使用“$”插入变量的值
  print("Name:$name");

  //声明原始字符串,直接在字符串前加字符“r”
  //可以避免“\”的转义作用,在正则表达式里特别有用
  print(r"换行符:\n");

  //Dart中数值是num,它有两个子类型:int 和 double
  //int是任意长度的整数,double是双精度浮点数
  var hex = 0xDEADBEEF;

  //翻了半天的文档,才找打一个重要的函数:转换进制,英文太不过关了
  //上面提到的字符串插值,还可以插入表达式:${}
  print("整型转换为16进制:$hex —> 0x${hex.toRadixString(16).toUpperCase()}");

}

Booleans

Dart是强布尔类型检查,只有当值是true是才为真,其他都是false,声明时用bool

Lists

在 Dart 语言中,具有一系列相同类型的数据被称为 List 对象。 Dart List 对象类似JavaScript 语言的 array 对象。

var list = [1, 2, 3];//分析器自动推断list为List<int>,所以里面不能加入其他类型的元素
print(list.length);//3
list[1] = 11;
print(list.toString());//[1, 11, 3]
var constantList = const [1, 2, 3];
// constantList[1] = 1; //因为前面的赋值使用了const 所以这句会报错.
constantList= [5];//这样可以

Maps

map是一个包含key和value的对象,key不能重复

var gifts = {
  // Key:    Value
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
};

var nobleGases = {
  2: 'helium',
  10: 'neon',
  18: 'argon',
};

var gifts2 = new Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

var nobleGases2 = new Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';

//获取value
print(gifts2['first']);// partridge;
print(gifts2.length);// 3

Runes

Dart 中 使用runes 来获取UTF-32字符集的字符。String的 codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符

var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());

Runes input = new Runes(
  '\u2665  \u{1f605}  \u{1f60e}  \u{1f47b}  \u{1f596}  \u{1f44d}');
print(new String.fromCharCodes(input));

Symbols

symbol字面量是编译时常量,在标识符前面加#。如果是动态确定,则使用Symbol构造函数,通过new来实例化.我们可能永远也不用不到Symbol

print(#s == new Symbol('s'));//true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值