一 . 一个简单的 Dart 程序

// 这是程序执行的入口。
main() {
    var number = 42; // 定义并初始化一个变量。
    printNumber(number); // 调用一个方法。
}

// 定义个方法。
printNumber(num aNumber) {
    print('The number is $aNumber.'); // 在控制台打印内容。
    num m = 10; //数字类型变量申明
    print(m); // 在控制台打印内容。
    int n = 10; //整形类型变量申明
    print(n); // 在控制台打印内容。
    bool isBool = true; //布尔类型变量申明
    print(isBool); // 在控制台打印内容。
    double l = 10.001;  //浮点型类型变量申明
    print(l); // 在控制台打印内容。
    String lastName = 'bird';   //字符串类型变量申明,使用`'...'` (或者 `"..."`)表示字面量
    print(lastName); // 在控制台打印内容。
    //var 一种不指定类型声明变量的方式,建议使用以上强制类型来使用,这样编译器不需要去推导类型
    var k = 'animal';
    print(k); // 在控制台打印内容。
    var o = 10;
    print(o); // 在控制台打印内容。
}

输出结果:

The number is 42.
10
10
true
10.001
bird
animal
10

通过以上一个简单的Dart小程序简单分析一下

1 . Dart程序执行入口

//Dart 程序执行的入口方法,每个程序都 *需要* 一个这样的方法
void main() {

}

2 . 注释

//单行注释
/*
多行
注释
*/

3 . 基础数据类型变量申明

num m = 10; //数字类型变量申明
int n = 10; //整形类型变量申明
bool isBool = true; //布尔类型变量申明
double l = 10.001;  //浮点型类型变量申明
String lastName = 'bird';   //字符串类型变量申明,使用`'...'` (或者 `"..."`)表示字面量
//var 一种不指定类型声明变量的方式,建议使用以上强制类型来使用,这样编译器不需要去推导类型
var k = 'animal';
var o = 10;

4 . 字面量

赋值语句后面的值即为字面量,比如以上的10、true、bird等

5 . 打印内容

print("要输出的内容......")

6 . 字符串插值

在字符串字面量中引用变量或者表达式 ,通过$variableName 或者 ${expression}形式引用变量

String dogName = "Sam";
print("my dog name is :$dogName");
print("my dog name is :${dogName}");

输出结果:

my dog name is :Sam
my dog name is :Sam

7 . Functions方法简单介绍

Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 类型 Function。 这意味着,方法可以赋值给变量,也可以当做其他方法的参数。 也可以把 Dart 类的实例当做方法来调用。

A . 定义方法的示例

printNumber(num aNumber) {
    //省略内容
}

B . 只有一个表达式的方法

可以选择使用缩写语法来定义:

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

=> *expr* 语法是 { return *expr*; } 形式的缩写。=> 形式 有时候也称之为 胖箭头 语法。

二 . 变量

1 . 变量

通过以上简单的Dart程序对变量已经有所了解,下面来对变量具体讲讲。

声明变量并赋值的示例:

var name = 'Bob'

变量是一个引用。上面名字为 name 的变量引用了 一个内容为 “Bob” 的 String 对象

2 . 变量默认值

没有初始化的变量自动获取一个默认值为 null。类型为数字的 变量如何没有初始化其值也是 null

num m;
print(m == null);       //true
int n;
print(n == null);       //true
bool isBool;
print(isBool == null);  //true
double l;
print(l == null);       //true
String lastName;
print(lastName == null);//true

3 . Dart常用数据类型

num     //数字类型
int     //整数类型
bool    //布尔类型
double  //浮点类型
String  //字符串类型

4 . 可选的类型

在声明变量的时候,你可以选择加上具体类型:

String name = 'Bob';

添加类型可以更加清晰的表达你的意图。 IDE 编译器等工具有可以使用类型来更好的帮助你, 可以提供代码补全、提前发现 bug 等功能。 一般使用 var 而不是具体的类型来定义局部变量

5 . const 变量和 final 变量声明

如果你以后不打算修改一个变量,使用 final 或者 const,两者的区别

相同点,都是修饰一个不可变更的变量

  const lastName = 'postbird';
  final firstName = 'bird  ';
  lastName = '123';  // 报错
  firstName = '123'; // 报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DZ6cr6O5-1571992016901)(E:\Baidu\学习笔记\dart\2.Dart基础介绍\1.png)]

const 只能通过静态数据赋值,否则会报错 , 给 const变量赋值非 const 字面量,则报错如下:

  const lastName = 'postbird';
  final firstName = 'bird  ';
  final time = new DateTime.now();
  const time2 = new DateTime.now(); // 报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DptjZEbh-1571992016905)(E:\Baidu\学习笔记\dart\2.Dart基础介绍\2.png)]

三 . 常见数据类型的操作

1 . String 字符串换行和字符串拼接

A . 换行 ''' '''

  String content = '''
    multipart
    ...
    string
  ''';
  print(content);

输出结果

multipart
...
string

B . 字符串拼接

拼接除了使用加好,还可以像 js 的模板字符串直接拼接,语法差不多,只不过不需要反引号,普通引号即可,${v},其中如果只是变量名,可以省略大括号 $v

  String str1 = 'dart1';
  String str2 = 'darg2';
  int age = 21;
  print('$str1   $str2  ${age.toString()}');
  print('${str1}   ${str2}  ${age.toString()} ${age} ${age * age}');

输出结果

dart1   darg2  21
dart1   darg2  21 21 441

2 . int 和 double 数字 整形和浮点型

  int num1 = 123;
  double price = 123.452323232;
  print(price * num1);
  price = 12;
  print(price * num1);

输出结果

15184.635757536
1476.0

3 . bool 类型和 if 判断

if 判断只能是 bool 类型的返回值,这点和 js 这衶弱类型语言完全不同:

  bool flag = true;
  if(flag) {
    print('--- true');
  }
  int num1 = 1;
  double num2 = 1.0;
  String num3 = '1';
  if(num1 == num2) {
    print('num1 == num2');
  } else {
    print('num1 != num2');
  }
  if(num1 == num3) {
    print('num1 == num3');
  } else {
    print('num1 != num3');
  }
  // int a = 1;
  // if(a) {  // 报错
  //   print('true');
  // }

如果 if 使用了非 bool 类型判断报错如下

   int a = 1;
   if(a) {  // 报错
     print('true');
   }

输出结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2bjEzoLy-1571992016907)(E:\Baidu\学习笔记\dart\2.Dart基础介绍\3.png)]

4 . 类型判断

is 操作符能够判断类型归属,比如 A is B,能够返回 bool 类型,判断 A 是否属于 B 类型。

  var value = 123;
  if(value is String) {
    print('${value} is string');
  } else if (value is int) {
    print('${value} is int');
  } else if (value is double) {
    print('${value} is double');
  } else {
    print('${value} is other type');
  }

输出结果

123 is int

5 . List(列表)

List 类型是使用非常多的类型,与 js 的 Array 类似,初始赋值可以直接给一个列表,也可以通过 new List() 指定空的列表.

默认列表子项支持的值类型是 dynamic,不限制具体类型,如果需要限制具体类型则需要使用泛型,比如 new List() 限制子项类型

List 作为对象提供了一些的方法和属性: API 文档地址: https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/List-class.html

通过 add() 能够添加一个子项, 通过 addAll() 能够追加另一个 List

List l1 = [123, '123', 'postbird'];
print(l1);
List l2 = new List();
l2.add('abc');
l2.add(123);
l2.addAll(['iterable', '222', '333', 123]);
print(l2);
List l3 = new List<String>();
l3.add('abc');
// l3.add(123);
print(l3);
List l4 = new List<int>();
l4.add(123);
// l4.add(123.12);
print(l4);
List l5 = new List<int>();
l5.add(1);
l5.add(3);
l5.add(2);
l5.add(4);
l5.add(6);
l5.add(2);
print(l5);
l5.sort();
print(l5);

输出结果

[123, 123, postbird]
[abc, 123, iterable, 222, 333, 123]
[abc]
[123]
[1, 3, 2, 4, 6, 2]
[1, 2, 2, 3, 4, 6]

6 . Map 类型

与 javascript 对象类似,在 oc 中称为字典。

可以通过字面量指定,也可以通过声明一个 new Map() 的空 Map。

API 文档地址:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/Map-class.html

var person = {
    'name': 'ptbird',
    'age': 24,
    'work': ['it1', 'it2']
};
print(person);
print(person.toString());
print(person['name']);
print(person['age']);
print(person['work']);
Map person2 = new Map();
person2['name'] = 'name2';
person2['age'] = 24;
person2['work'] = ['it1', 'it2'];
print(person2);
print(person2['work']);

输出结果

{name: ptbird, age: 24, work: [it1, it2]}
{name: ptbird, age: 24, work: [it1, it2]}
ptbird
24
[it1, it2]
{name: name2, age: 24, work: [it1, it2]}
[it1, it2]

四 . Dart关键字

asdefaultfinalnullthrow
assertdeferredfinallyoperatortrue
asyncdoforparttry
asyncdynamicgetrethrowtypedef
awaitelseifreturnvar
breakenumimplementssetvoid
caseexportimportstaticwhile
catchexternalinsuperwith
classextendsisswitchyield
constfactorylibrarysyncyield

五 . 参考资料:

http://dart.goodev.org/guides/language/language-tour

http://www.ptbird.cn/dart-variable-operation.html#menu_index_3
欢迎扫面下列二维码关注“余弦的自留地”公众微信号

万物之中,希望至美

01-03 20:28
查看更多