Flutter学习笔记—Dart基础知识

一、储程序入口

在Dart中,每个app都必须有一个顶级的main() 函数作为应用程序的入口点。

main() {
}

二、控制台输出

要在Dart中打印到控制台,可使用print

// JavaScript
console.log("hello world!")

// Dart
print("Hello world!")

三、变量

1、Dart变量概述:

Dart的类型是安全的:它使用静态类型检查和运行时的组合,检查以确保变量的值始终与变量的静态值匹配类型。尽管类型是必需的,但某些类型注释是可选的,因为Dart会执行类型的推断。

2、Dart变量的创建和分配:

在JavaScript中,无法自定义变量类型
在Dart中,变量必须是明确的类型或系统能够解析的类型。

// JavaScript
var name = "JavaScript";

// Dart
String name = 'dart' // Explicitly typed as a string.
var otherName = 'Dart'; // Inferred string
// Both are acceptable in dart.

3、Dart变量的默认值:

在JavaScript中,未初始化的变量是undefined
在Dart,未初始化的变量的初始值未null
注意:数字在Dart中也被当成对象,所以只要是带有数字类型的未初始化变量的值都是null

// JavaScript
var name; // == undefined

// Dart
var name; // == null
int x; // == null

四、检查null或零

在JavaScript中,1或者任何非null对象的值被视为true

// JavaScript
var myNull = null;
if(!myNull) {
    console.log("null is treated as false");
}
var zero = 0;
if(!zero) {
    console.log("0 is treated as false");
}

在Dart中,只有布尔值“true”被视为true

// Dart
var myNull = null;
if(myNull == nul) {
    print('use "== null" to check null');
}
var zero = 0;
if(zero == 0) {
    print('use "== 0" to check zero');
}

1、Dart null检查最佳实践

从Dart1.12开始,null-aware运算符可用于帮助我们做null检查;

bool isConnected(a,b) {
    // 判断outgoing数组里时候存在a,如果不存在的话就为null,?.运算符是当左边为null的时候不会阻断右边的运行
    bool outConn = outgoing[a]?.contains(b) ?? false;
    bool inConn = incoming[a]?.contains(b) ?? false;
    return outConn || inConn;
}

?.运算符在左边为null的情况下会阻断右边的调用,??运算符主要作用是在左侧表达式为null时为其设置默认值。

对于以下表达式:

outgoing[a]?.contains(b)

如果outgoing为null或outgoing[a]为null或contains(b)的值为null,都会导致表达式为null。

print(null ?? false); // 左边为空,将右边的false打印(false)
print(false ?? 11); // 左边不为空,直接打印左边的值(false)
print(true ?? false); // 左边不为空,直接打印左边的值(true)

五、Functions

Dart和JavaScript函数类似。主要区别是声明:

// JavaScript ES5
function fn() {
    return true;
}

// Dart
fn() {
    return true;
}

// can also be written as
bool fn() {
    return true;
}

六、异步编程

1、Futures:

与JavaScript都一样,Dart支持单线程执行。在JavaScript中,Promise对象表示异步操作的最终完成(或失败)及其结果,Dart使用Future来表示异步操作:

// JavaScript(Promise)
// 成功使用then,失败使用catch
_getIPAddress = () => {
    const url = "https://httpbin.org/ip";
    return fetch(url)
        .then(res => response.json())
        .then(resJson = > {
            console.log(resJson.origin);
        })
        .catch(error => {
            console.error(error);
        });
};

// Dart(Future)
// 成功使用then,失败使用catchError
_getIPAddress() {
    final url = 'https://httpbin.org/ip';
    HttpRequest.request(url).then((value) {
        print(json.decode(value.responseText)['origin']);
    }).catchError((error) => print(error));
}

2、async 和 await

async函数声明定义了一个异步函数。

在JavaScript中,async函数返回一个Promiseawait运算符是用来等待Promise

// JavaScript
async _getIPAddress() {
  const url = "https://httpbin.org/ip";
    const response = await fetch(url);
    const json = await response.json();
    const data = await json.origin;
    console.log(data);
}

在Dart中,async函数返回一个Future,函数主体是稍后执行。await运算符用于等待Future

// Dart
_getIPAddress() async {
    final url = 'https://httpbin.org/ip';
    var request = await HttpRequest.request(url);
    String ip = json.decode(request.responseText)['origin'];
    print(ip);
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 848130454@qq.com

文章标题:Flutter学习笔记—Dart基础知识

文章字数:981

本文作者:Spicy boy

发布时间:2020-10-20, 16:30:35

最后更新:2021-03-30, 16:46:20

原始链接:http://www.spicyboy.cn/2020/10/20/Flutter%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E2%80%94Dart%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏