您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Dart语言快速入门

时间:2019-08-05 11:59:38  来源:  作者:

什么是Dart语言

Dart语言是谷歌公司在2011年推出的新的计算机语言。Dart可以应用于web、服务器、移动应用和物联网等领域的开发。Dart的终极目标是取代JAVAScript。Dart设计完全脱离JavaScript,因此它没有向后兼容JavaScript。Dart语言的发展始终一直都是不温不火。

为什么要用Dart

Flutter是谷歌的移动UI框架,可以快速在IOSAndroid上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。Flutter选择了Dart作为开发语言,因此想学习Flutter就必须先学习好Dart。

环境搭建

下载和安装Dart

可以从下载到最新版本的Dart。

Dart语言快速入⻔

 

双击下载到的exe文件,依照向导指示完成Dart的安装。

安装验证

1. window键+r打开运行窗口

1. 在运行窗口的打开输入框输入cmd,然后点击确定

Dart语言快速入⻔

 

1. 在命令行界面输入命令并按回车

dart --version
Dart语言快速入⻔

 

安装Visual Studio Code

很多常见的IDE都有Dart的插件可以使用,这里推荐使用加插件进行Dart开发。可以在下载到Visual Studio Code,安装完成后可以开始添加插件。

安装Dart插件

Dart语言快速入⻔

 

安装Code Runner插件

Dart语言快速入⻔

 

helloworld

1. 在VSC新建文件

1. 输入以下代码

void main(){ print('hello world');}

1. 在文件上按鼠标右键,选择点击Run Code运行

Dart语言快速入⻔

 

1. 运行结果

Dart语言快速入⻔

 

变量声明

var

使用方式与JavaScript的var一致,可以接收任意类型的值。不同的地方是,Dart是强类型语言,赋值以后类型就确定下来,不能再更改为其它类型。

var name;name = 'zhangsan';// 下面的代码在dart中会报错,原因是变量name类型已经确定为String// 类型一旦确定就不能再更改.name = 100;

final和const

final和const类似都可以定义一个常量。它们的区别是const在声明必须赋值,而final可以先预声明需要使用时再赋值。

// const和final在声明字面量时作用是一致的
const PI = 3.14159;
final PI2 = 3.14159;// 以下代码会报错,原因是常量赋值后就不能再做修改
// PI = 3.1415926535;final now = new DateTime().now();
// 以下代码在dart中会报错,const在编译时就必要赋值,而new DateTime().now()
// 在运行才能产生具体的
// const now2 = new DateTime().now();

数据类型

Dart内置节以下几种数据类型

· String

· Number

· Boolean

· List(Dart没有数组,类似于数组的作用)

· Map

· Runes(UTF-32字符集的字符)

· Symbols

通过一段代码来演示以上的数据类型

void main(){ 
// Number
 int a = 1; 
double b = 0.1; 
// String
 var s1 = 'this is a string'; 
String s2 = "this is another string"; 
// boolean
 var flag = true; 
bool flag2 = false; 
// List 
List list = [1, 2, 3, 4, 5];
 List<String> list2 = ['zhang', 'san', "123", "456"];
 List<dynamic> list3 = [1, true, 'haha', 1.0]; 
// Map
 Map person = new Map(); 
map['name'] = 'zhangsan'; 
map['age'] = 22; 
// Dart使用runes来获取UTF-32字符集的字符。String的codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符
 var clApping = '\u{1f44f}'; print(clapping); 
// 打印的是拍手emoji的表情 
// symbols print(#s == new Symbol("s")); // true}

函数

函数的返回值

Dart是面向对象的编程语言,所以函数也是一个对象,还有一种类型Function,也就是说函数可以赋值给某个变量或者作为参数传给另外的函数。Dart建议给函数添加上返回类型,但是不加返回类型的函数同样可以正常工作,另外还可以用lamda表达式,比如下面的代码:

// 声明返回类型
int add(int a, int b) { return a + b;
}
// 不声明返回类型add2(int a, int b) { return a + b;}
// =>是return语句的简写add3(a, b) => a + b;main() {
print(add(1, 2));//3 
print(add2(2, 3)); // 5 
print(add3(1, 2)); // 3}

命名参数、位置参数、参数默认值

命名参数

使用花括号将函数的参数括起来就是定义了命名参数,如下面的代码所示:

```dart sayHi({String name}) { print("hello, my name is $name");}

sayHi2({name: String}) { print("hello, my name is $name");}

main() { // 打印 hello, my name is zhangsan sayHi(name: 'zhangsan');

// 打印 hello, my name is wangwu 
sayHi2(name: 'wangwu');
}```

从上面代码可以看到,命名参数时可以使用{type paramName}或者{paramName: type}两种方式声明参数,而调用命名参数时,需要以funcName(paramName: paramValue)的形式调用。

命名参数的参数并不是必须的,所以上面的代码中,如果调用sayHi()不带任何参数,也是可以的,只不过最后打印出来的结果是:hello, my name is null。

位置参数

使用中括号[]括起来的参数是函数的位置参数,代表该参数可传可不传,位置参数只能放在函数的参数列表的最后面,如下代码所示:

```dart sayHello(String name, int age, [String hobby]) { // 位置参数可以有多个,比如[String a, int b] var msg = "hello, this is $name and I am $age years old"; if (hobby != null) { msg = "$msg, my hobby is $hobby"); } print(msg);}
main() { // hello, this is zhangsan and I am 20 years old sayHello("zhangsan", 20); // hello, this is zhangsan and I am 20 years old, my hobby is play tv game sayHello("zhangsan", 20, "play tv game");}```

参数默认值

可以为命名参数或者位置参数设置默认值,如下代码所示:

```// 命名参数的默认值int add({int a, int b = 3}) { return a + b;}// 位置参数的默认值int sum(int a, int b, [int c = 3]) { return a + b + c;}```

main()函数

不论在Dart还是Flutter中,必须都需要一个顶层的main()函数,它是整个应用的入口函数,main()函数的返回值是void,还有一个可选的参数,参数类型是List。

匿名函数

大多数函数都是有名称的,比如main() hello()等,但是也可以写匿名函数,如果对JavaScript比较熟悉,看到下面的肯定也不会陌生:

test(Function callback) {
 callback("hello");}
main() { test((param) {
 // 打印hello print(param);
 });}

匿名函数类似于Java中的接口,往往在某个函数的参数为函数时使用到。

函数返回值

所有的函数都有返回值,如果没有指定return语句,那么该函数的返回值为null。

运算符

Dart中的运算符与JavaScript中的类似,比如++a、a == b、b ? a : b,但是也有一些与JavaScript不太一样的运算符,下面用代码说明:

main() { 
// 与JavaScript相同的运算符操作 
int a = 1; 
++a; 
a++; 
var b = 1; 
print(a == b); // false 
print(a * b); // 3
 bool real = false; 
real ? print('real') : print('not real'); // not real
 print(real && a == b); // false 
print(real || a == 3); // true 
print(a != 2); // true 
print(a <= b); // false 
var c = 9; c += 10; print("c = $c"); // c = 19 
print(1<<2); // 4 
// 与JavaScript不一样的运算符操作
 // is运算符用于判断一个变量是不是某个类型的数据 
// is!则是判断变量不是某个类型的数据
 var s = "hello"; 
print(s is String); // true
 var num = 6; print(num is! String); // true
 // ~/才是取整运算符,如果使用/则是除法运算,不取整
 int k = 1; 
int j = 2; 
print(k / j); // 0.5 
print(k ~/ j); // 0 
// ??=运算符 如果 ??= 运算符前面的变量为null,则赋值,否则不赋值 
var param1 = "hello", param2 = null; 
param1 ??= "world"; 
param2 ??= "world"; 
print("param1 = $param1"); // param1 = hello
 print("param2 = $param2"); // param2 = world 
// ?.运算符 
var str1 = "hello world";
 var str2 = null; 
print(str1?.length); // 11 
print(str2?.length); // null
 print(str2.length); // 报错}

控制流程

if...else, switch, for, while, try...catch语句跟JavaScript中都类似,try...catch语句可能稍有不同,下面用一段代码说明:

main() { 
// if...else语句 
int score = 80; 
if (score < 60) { print("so bad!");
 } else if (score >= 60 && score < 80) {
 print("just pass!"); } 
else if (score >= 80) { print("well done!");
 } 
// switch语句
 String a = "hello"; 
// case语句中的数据类型必须是跟switch中的类型一致
 switch (a) {
 case "hello":
 print("good weather"); 
break; 
case "world":
 print("good morning"); 
break; 
default: 
print("good bye"); } 
// for语句
 List<String> list = ["a", "b", "c"]; 
for (int i = 0; i < list.length; i++) { 
print(list[i]); }
 for (var i in list) { print(i); } 
// 箭头函数参数必须要用圆括号扩起来 list.forEach((item) => print(item)); 
// while语句 
int start = 1; 
int sum = 0; 
while (start <= 100) { 
sum += start;
 start++; } 
print(sum); 
// try...catch语句
 try { print(1 ~/ 0); 
} catch (e) { 
// IntegerDivisionByZeroException
 print(e); 
} 
try {
 1 ~/ 0; 
} on IntegerDivisionByZeroException { // 捕获指定类型的异常
 print("error"); // 打印出error
 } finally { 
print("finally"); // 打印出finally
 }
}

总结

在这里我们学习了怎样配置Dart的开发环境,对变量声明、数据类型、函数、运算符、控制流程语法进行说明,为更深入学习Dart或者Flutter打下基础。



Tags:Dart语言   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
什么是Dart语言Dart语言是谷歌公司在2011年推出的新的计算机语言。Dart可以应用于web、服务器、移动应用和物联网等领域的开发。Dart的终极目标是取代JavaScript。Dart设计...【详细内容】
2019-08-05  Tags: Dart语言  点击:(250)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条