// 这是程序执行的入口。 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); // 在控制台打印内容。 }
输出结果:javascript
The number is 42. 10 10 true 10.001 bird animal 10
经过以上一个简单的Dart小程序简单分析一下html
//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;
赋值语句后面的值即为字面量,好比以上的十、true、bird等java
print("要输出的内容......")
在字符串字面量中引用变量或者表达式 ,经过$variableName 或者 ${expression}形式引用变量express
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
Dart 是一个真正的面向对象语言,方法也是对象而且具备一种 类型 Function。 这意味着,方法能够赋值给变量,也能够当作其余方法的参数。 也能够把 Dart 类的实例当作方法来调用。api
printNumber(num aNumber) { //省略内容 }
能够选择使用缩写语法来定义:微信
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
=> *expr*
语法是 { return *expr*; }
形式的缩写。=>
形式 有时候也称之为 胖箭头 语法。async
经过以上简单的Dart程序对变量已经有所了解,下面来对变量具体讲讲。ide
声明变量并赋值的示例:工具
var name = 'Bob'
变量是一个引用。上面名字为 name
的变量引用了 一个内容为 “Bob” 的 String 对象
没有初始化的变量自动获取一个默认值为 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
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 21 dart1 darg2 21 21 441
int num1 = 123; double price = 123.452323232; print(price * num1); price = 12; print(price * num1);
输出结果
15184.635757536 1476.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<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]
与 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]
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
欢迎扫面下列二维码关注“余弦的自留地”公众微信号
万物之中,但愿至美