Dart2基础

学习Flutter的第一步是学习Dart语言,然后才是学习Flutter本身。如果你学习Kotlin Or Java ,那么学习起来很容易入门。因为你会看到很多你熟悉的语法。

仅做学习笔记,详细内容可品尝:

英文官网:https://dart.dev/guides/language/language-tour

中文:https://dartcn.com/guides/language/language-tour

英文6的可以直接阅读英文官网的学习资源。

一、入门须知

  • Dart是一门强类型的语言。在Dart中定义一个变量,既可以直接指定变量的类型,也可以通过var声明一个变量,尽管Dart是强类型的,但是Dart可以推断类型,所以类型注释是可选的。当然,如果要明确说明不需要任何类型,需要使用特殊类型dynamic - 代表动态类型。
String name = "Tom";

var name = "Tom";
  • Dart中一切皆对象。无论是数字,函数(Function类型)和null。所有对象均继承自Object类。
  • Dart支持泛型,比如List<int>或者List<dynamic>(任何类型的对象列表)。
  • Dart支持顶级函数、顶级变量。
  • 与Java不同,Dart中没有关键字public、protected和private。如果想定义私有方法或者私有变量等,则以"_"开头即可。

二、变量

未初始化的变量默认值是null。即使变量是数字类型默认值也是null,因为Dart中一切皆对象,数字类型也不例外。

tip:开发环境可以使用assert()来断言一个变量是否是null,比如

int count  = null
assert(count==null)

生产环境代码中assert()函数会被忽略,不会被调用。在开发过程中assert(condition)会在false条件下抛出异常。

final 与 const的变量声明:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

const bar = 1000000; // 压力单位 (dynes/cm2)
const double atm = 1.01325 * bar; // 标准气压

三、内建类型

  • Number

      - Dart语言的Number类型有两种:int、double;注:从Dart2.1开始,必要的时候int字面量会自动转换成double类型【在 2.1 之前,在 double 上下文中使用 int 字面量是错误的】;

  • String

      - 通过单引号或者双引号创建;支持${expression}的方式内嵌表达式;

        使用连续三个单引号或者三个双引号实现多行字符串对象的创建;

var s1 = '''
You can create
multi-line strings like this one.
''';

       使用r前缀,可以创建“原始raw”字符串:

void main() {
  var s = r"In a raw string, even \n isn't special.";
  print(s);
}

输出:
In a raw string, even \n isn't special.
  • Boolean
  • List (也被称为 Array)

      在Dart中的Array就是List对象;Dart中的List字面量非常像JS中的array字面量。示例:

var lits = [1,2,3]

Dart推断list的类型是List<int>.如果尝试将非整数对象添加到此List中,则分析器或者运行时将会引发错误

List的访问:list[0]
  • Map
Map的创建:

var gifts = {
  'first': 'partridge',
  'second': 'turtledoves',
  'fifth': 'golden rings'
}

或者

var gifts = Map(); - Dart创建对象, new关键字是可选的
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';

Dart推断gifts的类型是Map<String, String>,尝试添加错误的类型会导致报错
  • Set
var halogens = {'fluorine', 'chlorine', 'bromine', 'iodine', 'astatine'};

Dart 推断halogens 类型为Set<String>,如果尝试为它添加一个错误类型,分析器或者运行时会报错。

要创建一个空集,使用前面带有类型参数的{},或者将{}赋值给Set类型的变量:

var names = <String>{};

或者

Set<String> name = {}

注意:var names = {}这样创建的是一个Map,而不是Set。
-----------------------------------------------------------
Map和Set的字面量语法非常相似。因为先有的Map字面量语法,所以{}默认是Map类型。如果忘记在{}上注释类型或者赋值到一个未声明类型的变量上,那么Dart会创建一个类型为Map<dynamic, dynamic>的对象
  • Rune (用于在字符串中表示 Unicode 字符,例如'\u{1f44f}')
  • Symbol - 表示 Dart 程序中声明的运算符或者标识符。

四、函数

Dart是一门真正面向对象的语言,甚至函数也是对象。这也意味着函数可以被赋值给变量或者作为参数传递(函数是一等对象)给其他函数。

如果函数只有一句表达式,则可以使用简写的语法:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

=> expr 语法是 { return expr; } 的简写。 => 符号 有时也被称为 箭头 语法。

(在kotlin中,这样的函数被称为单表达式函数)

4.1、可选参数

可选参数可以是命名参数或者是位置参数。支持设置默认值。

命名可选参数(推荐&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值