Dart语言基础01:

Dart语言基础:

一、概念:Dart是google开发的通用编程语言,用于构建web、服务器、桌面、移动应用程序。
是一种面向对象、类接口、垃圾回收语言。支持接口、mixin、抽象类、具体泛型化、静态类型等。

优点:语法简洁清晰、高性能、JIT/AOT编译、响应式。

二:部分特性

  • Dart是AOT(Ahead of time)编译的,可编译成快速,可预测的本地代码。
  • Dart可以是JIT(Just In time)编译,开发周期快,为flutter热重载提供基础。
  • Dart可以创建60fps运行的流畅动画和转场。
  • Dart是声明式编程布局,易于阅读和可视化,不需要单独的声明式布局语言(xml/JSX)
  • Dart易于学习,具有静态和动态语言。

三、重要概念:

  • 所有东西都是对象,无论是变量,数字,函数,null都是对象,所有对象都是Object类的子类;
  • Dart语言是强类型编程,一旦确定类型,则不会改变变量类型,编译时会进行语法检查,但Dart允许弱类型语言式的编程。
  • Dart代码在运行前解析,指定数据类型和编译时常量,可以提高运行速度。
  • Dart语言的统一入口是main函数。
  • Dart的私有特性是在变量或函数名前面加上下划线_.
  • Dart 支持 async/await 异步操作。

四、Dart内置库
包名 描述
dart:async 异步编程,提供Future,Stream类。
dart:collection 集合(List,Set,Map等)
dart:convert 不同类型的字符编码解码
dart:core Dart核心功能,内置类型。
dart:html 网页开发用到的库
dart:io 文件读写,IO相关
dart:math 数字常量和函数,随机算法等。
dart:svg 事件和动画适量图支持。

五、类型系统
Dart是类型安全的:它结合使用静态类型检查和运行时检查,以确保变量的值总是与变量的静态类型匹配。
尽管类型是强制,但是类型声明是可选的,因为Dart会在编译时执行类型推断。

基本数据类型:
num、double、int、String、List、Set、bool、map、Object、dynamic、runes、Symbol。
以上所有类型都是继承自Object类,null类型也是继承自Object类。
int转String类型。20.toString().

六:基本语法
一切变量的初始化都是null,包括bool类型的初始化也是null。Java中默认是false。
变量声明:
var name = "abc";
String name = "Tom";
常量声明:
// 常量是不可变的,需要定义并赋值,常量定义的集合都是只读的。
//特性会传递到子元素,在内存中会复用相同内容对象。
const PI = 3.14;
final DE = 456; // 只能赋值一次,仅作用在自身。不具有传递性,final定义的集合,里面的内容可以更改。

七、集合
List
var ls = List(); // 不推荐
var ls = <String>[]; // 推荐。
ls.add('one');
Map
var pInfo = Map<String, Object>(); // 不推荐
var pInfo = <String, Object>{}; // 推荐。
pInfo['name'] = 'Tom';

八、枚举
枚举的每个值都有一个index属性,index从0开始计数。枚举不可被继承,不能创建实例。

enum ResponseState{
    Success, Error, Failure
}

九、时间处理
/// 获取当前时间 2022-03-02 15:52:35.948690
DateTime.now();
// 创建一个DateTime对象,可设置日期+时间属性。
DateTime(2019,3,3); // 2019-03-03 00:00:00.000
// 解析日期字符串。
DateTime.parse("2022-03-02 15:52:35");
// 解析时间戳。
DateTime.fromMillisecondsSinceEpoch(1551616200000);

十、面向对象。
Dart是一个面向对象编程语言,支持基于mixin的继承机制,每个对象都是一个类的实例。
所有的类都继承于Object,基于mixin的继承意味着每个类(Object除外)都只有一个超类,一个类的代码可以在其他多个类继承中重复使用,从而达到多重继承的效果。

/// 定义接口。与定义抽象类一样。
abstract class Animal {
    void eat();
}
class PersonInfo{
    void showInfo(){
        print("this is showInfo");
    }
}

/// 定义类, 借助with调用PersonInfo 中的方法。
class Person extends Animal with PersonInfo {
    String name;
    int age;
    Person(this.name, this.age); // 构造函数
    
    @override
    void eat(){
        print("person eat");
    }
}

/// factory 单例实现。
class HttpClient {
    static final HttpClient _client = HttpClient._internal();
    
    HttpClient._internal(){}
    
    factory HttpClient(){/// 创建单例对象
        return _client;
    }
}
/// 可变参数, 带默认值。
class Request {
    String _url;
    String _method;
    String params; 
    
    // Request(this._url, [this._method = 'GET']){}
    // 大括号声明的可变参数,是具名参数。参数不能使用下划线声明。
    Request(this._url, {this.params }){
    }
    void show(){ print('url=$_url, method=$_method');}
}
var req = Request('http://www.baidu.com');
var req = Request('http://www.baidu.com', 'POST');
var req = Request('http://www.baidu.com', params: 'Tomcat');
req.show();
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容