本文共 6348 字,大约阅读时间需要 21 分钟。
// 这是程序执行的入口。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.1010true10.001birdanimal10
通过以上一个简单的Dart小程序简单分析一下
//Dart 程序执行的入口方法,每个程序都 *需要* 一个这样的方法void main() {}
//单行注释/*多行注释*/
num m = 10; //数字类型变量申明int n = 10; //整形类型变量申明bool isBool = true; //布尔类型变量申明double l = 10.001; //浮点型类型变量申明String lastName = 'bird'; //字符串类型变量申明,使用`'...'` (或者 `"..."`)表示字面量//var 一种不指定类型声明变量的方式,建议使用以上强制类型来使用,这样编译器不需要去推导类型var k = 'animal';var o = 10;
赋值语句后面的值即为字面量,比如以上的10、true、bird等
print("要输出的内容......")
在字符串字面量中引用变量或者表达式 ,通过$variableName 或者 ${expression}形式引用变量
String dogName = "Sam";print("my dog name is :$dogName");print("my dog name is :${dogName}");
输出结果:
my dog name is :Sammy dog name is :Sam
Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 类型 Function。 这意味着,方法可以赋值给变量,也可以当做其他方法的参数。 也可以把 Dart 类的实例当做方法来调用。
printNumber(num aNumber) { //省略内容}
可以选择使用缩写语法来定义:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
=> *expr*
语法是 { return *expr*; }
形式的缩写。=>
形式 有时候也称之为 胖箭头 语法。
通过以上简单的Dart程序对变量已经有所了解,下面来对变量具体讲讲。
声明变量并赋值的示例:
var name = 'Bob'
变量是一个引用。上面名字为 name
的变量引用了 一个内容为 “Bob” 的 String 对象
没有初始化的变量自动获取一个默认值为 null
。类型为数字的 变量如何没有初始化其值也是 null
num m;print(m == null); //trueint n;print(n == null); //truebool isBool;print(isBool == null); //truedouble l;print(l == null); //trueString lastName;print(lastName == null);//true
num //数字类型int //整数类型bool //布尔类型double //浮点类型String //字符串类型
在声明变量的时候,你可以选择加上具体类型:
String name = 'Bob';
添加类型可以更加清晰的表达你的意图。 IDE 编译器等工具有可以使用类型来更好的帮助你, 可以提供代码补全、提前发现 bug 等功能。 一般使用 var
而不是具体的类型来定义局部变量
如果你以后不打算修改一个变量,使用 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)]
''' '''
String content = ''' multipart ... string '''; print(content);
输出结果
multipart...string
拼接除了使用加好,还可以像 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 21dart1 darg2 21 21 441
int num1 = 123; double price = 123.452323232; print(price * num1); price = 12; print(price * num1);
输出结果
15184.6357575361476.0
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)]
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
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();l3.add('abc');// l3.add(123);print(l3);List l4 = new List ();l4.add(123);// l4.add(123.12);print(l4);List l5 = new List ();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]
与 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]}ptbird24[it1, it2]{name: name2, age: 24, work: [it1, it2]}[it1, it2]
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
欢迎扫面下列二维码关注“余弦的自留地”公众微信号转载地址:http://bzzzz.baihongyu.com/