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
欢迎扫面下列二维码关注“余弦的自留地”公众微信号
万物之中,希望至美