Dart:2.通过一个简单程序来理解Dart基础语法

一 . 一个简单的 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关键字

abstract continue false new this
as default final null throw
assert deferred finally operator true
async do for part try
async dynamic get rethrow typedef
await else if return var
break enum implements set void
case export import static while
catch external in super with
class extends is switch yield
const factory library sync yield

五 . 参考资料:

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

http://www.ptbird.cn/dart-variable-operation.html#menu_index_3
欢迎扫面下列二维码关注“余弦的自留地”公众微信号
在这里插入图片描述
万物之中,希望至美

posted @ 2019-10-25 16:31  余弦的自留地  阅读(286)  评论(0编辑  收藏  举报