Dart入门(一)

Dart语言背景

Dart 属于什么级别的语言

Dart 属于应用层编程语言。它有自己的 DartVM ,通常情况下运行在自己的VM上,但是在特定情况下他也可以编译成 Native Code 运行在硬件上(比如移动开发框架中,Flutter 会将代码编译成指定平台的 Native Code 以提高性能)。运行 Dart 编写的软件,既可以以明文代码的方式直接运行,还支持运行快照打包后的二进制,以提高启动速度、安全性和性能。你可以将它当做JAVA,亦可以当做 JavaScript;它比 JAVA 简单,易于理解,比JavaScript 更加规范,更加工程化。

Dart 的特性

  • 单进程异步事件模型;
  • 强类型,可以类型推断;
  • DartVM,具有极高的运行效率和优秀的代码运行优化,根据早前的基准测试,性能比肩 Java7 的JVM;
  • 独特的隔离区( Isolate ),可以实现多线程;
  • 面向对象编程,一切数据类型均派生自 Object ;
  • 运算符重载,泛型支持;
  • 强大的 Future 和 Streams 模型,可以简单实现高效的代码;
  • 全平台语言,可以很好的胜任移动和前后端的开发。
  • 在语法上,Dart 提供了很多便捷的操作,可以明显减少代码量。比如字符连接,可以直接 “my name is $name, age is $age”,无需+号拼接,也无需做类型转换。

Dart学习路线
学习 Dart 的路线,只针对有编程经验的人来说,可以分成四步:基础语言语法 ;代码编写风格;基础类库的使用;开始你的编程。
Dart 官方教程/文章收集整理贴

Dart的官方教程和文章都写得通俗易懂,个人认为是学习Dart的最好资料。本帖将它们进行收集整理,方便新手查阅:

语言

  • Language Tour, 讲解语言基础 - https://www.dartlang.org/guides/language/language-tour

  • Library Tour, 讲解标准库 - https://www.dartlang.org/guides/libraries/library-tour

  • Effective Dart,讲解编码最佳实践 - https://www.dartlang.org/guides/language/effective-dart

  • Futures, 讲解异步编程之Futures - https://www.dartlang.org/tutorials/language/futures

  • Streams, 讲解异步编程之Streams - https://www.dartlang.org/tutorials/language/streams

  • Sound Dart, 讲解Dart的类型系统 - https://www.dartlang.org/guides/language/sound-dart

  • Dart API文档 - https://api.dartlang.org/

工具

  • Pub即Dart包管理器入门 - https://www.dartlang.org/tools/pub/get-started

  • 定制Dart静态分析 - https://www.dartlang.org/guides/language/analysis-options

Web / AngularDart

  • Angular Dart入门 - https://webdev.dartlang.org/guides/get-started

  • Angular Dart之英雄指南 - https://webdev.dartlang.org/angular/tutorial

VM / 服务端

  • Dart VM之命令行应用 - https://www.dartlang.org/tutorials/dart-vm/cmdline

  • Dart VM之Http应用 - https://www.dartlang.org/tutorials/dart-vm/httpserver

Flutter / 移动端

  • Flutter官方文档 - https://flutter.io/docs/

  • Flutter中文资源站 - https://flutter-io.cn/

Dart开发环境

Dart SDK的安装

  • windows平台:choco install dart-sdk
  • Linux平台:sudo apt-get install dart
  • Mac平台:brew install dart - - devel

Dart官方地址:https://www.dartlang.org/guides/language/language-tour?from=yoytang.com

Dart IDE的安装

  • Intellij IDEA、Android Studio
  • VS Code
  • Sublime Text、Atom

Dart 插件的安装

  • 在线安装
  • 离线安装

离线安装需要注意IDE版本和插件版本对应

Dart语言入门

变量和常量

用final修饰的变量,必须在定义时将其初始化,其值在初始化后不可改变;const用来定义常量。
它们的区别在于,const比final更加严格。final只是要求变量在初始化后值不变,但通过final,我们无法在编译时(运行之前)知道这个变量的值;而const所修饰的是编译时常量,我们在编译时就已经知道了它的值,显然,它的值也是不可改变的。

    int Func() {
      // 代码
    }
     
    final int m1 = 60;
    final int m2 = Func(); // 正确
    const int n1 = 42;
    const int n2 = Func(); // 错误

Dart中的数据类型

  • 数值型-Number
    1.num
    int
    double

2.数值型操作
运算符 :+ - * / ~ / %
常用属性:isNaN、isEven、isOdd等
常用方法:sbs()、round()、floor()、ceil()、toInt()、toDouble()

  • 字符串型-String
    1.字符串创建
    使用单引号,双引号创建
    使用三个引号或双引号创建多行字符串
    使用r创建原始raw字符串
    2.字符串操作
    运算符:+、*、==、[ ]
    插值表达式:${expression} 只有一个变量可以省略{ }
    常用属性:length、isEmpty、isNotEmpty
    常用方法:contains(),subString(),toLowerCase(),toUpperCase(),startsWith(),endWith(),
    trim(),trimLeft(),trimRight(),indexOf(),lastIndexOf(),replaceXXX()

  • 布尔型-Boolean
    使用bool表示布尔类型
    值true和false

  • 列表-List(数组)
    dart中List和数组是同一个概念
    1.List的创建:
    var list = [1,2,3,“start”,true];(可以存储不同类型)
    var list = const[1,2,3];(不可变)
    var list = new List();
    2.常用操作:
    [],length,indexOf(),lastIndexOf(),add(),insert(),sort(),sublist(),remove(),clear(),shuffle(),asMap(),
    forEach() 如何将方法作为一个参数,forEach接受一个方法

  • 键值对-Map
    1.创建map:
    var language = {‘first’:‘dart’,‘second’:‘java’};
    var language = const {‘first’:‘dart’,‘second’:‘java’};
    var language =new Map();
    2.常用操作:
    [],length,containsKey(),containsValue(),inEmpty(),isNotEmpty(),remove();keys,values,forEach()

  • dynamic 动态类型

  • Runes、Symbols

Dart中的运算符

  • 算术运算符
    加减乘除:+,-,*,/,~/,%
    递增递减:++var ,var++,–var,var–
  • 关系运算符
    运算符:==,!=,>,<,>=,<=
    判断内容是否相同 ,与java不同判断字符串内容是否相等也用 ==
  • 逻辑运算符
    运算符:!,&&,|| 针对布尔类型运算
  • 赋值运算符
    基础运算符:=,??= 本身有值无效,无值才赋值
    复合运算符:+=,-=,*=,/=,%=,~/=
  • 条件表达式
    三目运算符:condition?expr1:expr2
    ??运算符:expr1??expr2
    Drat中的控制流
  • if语句
    if语句
    if…else if 语句
    if…else if …else语句
  • 循环语句
    for循环
    for…in
    while循环
    do…while循环
    break
    continue
  • switch…case语句
    比较类型:num,string,编译期常量,对象,枚举
    非空case必须有一个break
    default处理默认情况
    continue跳转标签
    Dart中的方法
  • 方法的定义:
  • 方法特性
    方法也是对象,并且有具体类型Function
    返回值类型、参数类型都可以省略
    箭头语法:=>expr是{return expr;}缩写。只适用于一个表达式
    方法都有返回值,如果没有指定,默认return null 最后一句执行
getPerson(name,age){
return "name= $name,age= $age";
}
//等同于
getPerson(name,age)=> "name= $name,age= $age";
//表达式
int gender = 2;
getPerson(name,age)=> gender==1?"name= $name,age= $age":"test";
  • 可选参数
    可选命名参数:{param1,param2,…}
void main(){
printPerson("张三")
printPerson("李四",age:20)
printPerson("李四",age:20,gender:"male")
printPerson("李四",gender:"male")
}
printPerson(String name,{int age,String gender}){
print("name=$name,age=$age,gender=$gender")
}

可选位置参数:[param1,param2,…]

void main(){
printPerson("张三")
printPerson("李四",20)
printPerson("李四",20,"male")
}
printPerson(String name,[int age,String gender]){
print("name=$name,age=$age,gender=$gender")
}

如果存在具体参数,可选参数声明必须在参数后面

  • 默认参数值(基于可选参数,如果没有赋予默认参数值,value为null)
    使用 = 在可选参数指定默认值
    默认值只能是编译时常量
printPerson(String name,[int age = 10,String gender = "male"]){
print("name=$name,age=$age,gender=$gender")
}
  • 方法对象(function)
    方法可作为对象赋值给其他变量
void main(){
//var func=printHello
Function func=printHello
func();
}
void printHello(){
print("Hello")
}

方法可以作为参数传递给其他方法

void main(){
var list = ["H","e","l","l","o"];
print(listTimes(list,times));
}
List listTimes(List list,String times(str)){
for(vat index = 0;index < list.length;index++){
list[index] = times(list[index]);
}
return list;
}
String times(str){
return str*3;
}
  • 匿名方法
    定义
(参数1,参数2,...){
    方法体
    return 返回值
}

匿名方法特性(也就是作为一个对象的特性)
可赋值给变量,通过变量进行调用

void main(){
vat func = (str){
print("Hello---$str")
}
func(30);
}
//不推荐用法,括号调用
((){
print("test");
})()

可在其他方法中直接调用或传递给其他方法

void main(){
//这个和上面执行结果是一样的
listTimes(list,(str){return str*3});
//或者不作为参数,作为变量在方法内部使用
List listTimes(List list){
var func = (str){return str*3};
for(vat index = 0;index < list.length;index++){
list[index] = func(list[index]);
}
return list;
}
}
  • 闭包
    闭包是一个方法(对象)
    闭包定义在其他方法内部
    闭包能够访问外部方法内的局部变量,并持有其状态(闭包的主要作用,访问方法里的局部变量)
void main(){
var func = a();
func();
func();
func();
}
a(){
int count = 0;
//printCount(){
//print(count ++);
//}
//更多的时候使用匿名方法
return (){
print(count ++);
};
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值