- 1:一些基础概念
- 2:变量
- 3:默认值
- 4:Final和const
- 5:内置类型
- 5.1:数字(number)
- 5.2:字符串
- 5.3:布尔值
- 5.4: 数组
- 5.5: Map
- 6: 函数
- 6.1:可选的参数
- 6.2:匿名函数
- 6.3:返回值
Dart是一种适用于万维网的开放源代码编程语言,由Google主导开发,于2011年10月公开。它的开发团队由Google Chrome浏览器V8引擎团队的领导者拉尔斯·巴克主持,目标在于成为下一代结构化Web开发语言,由于JavaScript的大热,其一直处于异常尴尬的位置。但由于Flutter的公布,从2018年开始便开始在国内外火了起来,由此将介绍该语言一系列教程。
一些基础概念
1、可以放在变量中的所有东西都是一个对象,每个对象都是一个类的实例。数字、函数、和null都是对象。所有对象都从Object类继承。
2、虽然Dart是强类型的,但类型注释是可选的,因为Dart可以推断类型。当想明确地说没有类型时,可以使用特殊的dynamic。
3、Dart支持泛型类型,如List<int>或者List<dynamic>(任何类型的对象列表)。
4、Dart支持顶层函数如main(),以及与类或对象绑定的函数(分别为static和instance方法),也可以在函数中创建函数( 嵌套 函数或局部函数)
5、同样,Dart支持顶级变量以及绑定到类或对象(静态变量和实例变量)的变量。实例变量有时称为字段或属性。
6、与Java不同,Dart没有关键字public、protected和private。如果标识符以下划线_开头,则它的库是私有的。
7、标识符可以以字母或下划线_开头,然后是这些字符和数字的任意组合。
变量
var name = "bob"
dynamic name = "bob"
String name = 'bob';
默认值
未初始化的变量的初始值为null。即使数字类型的变量最初也为空, 因为数字 - 就像Dart中的其他所有数据 - 都是对象。
int a ;
assert(a==null);
注意: assert()调用在生产代码中被忽略。 在开发过程中,除非条件为真,否则assert(condition)将引发异常。
Final和const
如果不打算改变一个变量,使用final或者const,而不是var或除一个类型。最终的变量只能设置一次。一个const变量是一个编译时常量。 (const变量隐含地是最终的。)最终的顶层或者类变量在它第一次被使用时被初始化。
final name ='bob' ;
final String name = 'bob';
注意:实例变量可以是final但不是const ;
将const用于想要成为编译时常量的变量。如果const变量处于类级别则将其标记为static const ; 在声明该变量的位置,将该值设置为编译时常量,例如数字或字符串文字,常量变量或常数上算术运算的结果:
const bar =1;
const double atm =1*bar;
//注意:[]创建一个空列表。 // const []创建一个空的不可变列表。
var foo = const []; // foo目前是空的不可变列表。
final bar = const []; //bar将永远是一个空的不可变列表。
const baz = const []; // baz是编译时常量空的不可变列表。
//你可以改变一个非final的非const变量的值,即使它曾经有一个const值。
foo = [];
//你不能改变final或const变量的值。
bar = []; // 未处理的异常。
baz = []; // 未处理的异常。
内置类型
Dart的基本数据类型如下:
1、numbers
2、strings
3、booleans
4、lists (arrays)
5、maps
6、runes
7、symbols
数字(number)
int x = 1;
int hex = 0xDEADBEEF;
double y = 1.1;
double exponents = 1.42e5;
// String -> int
var one = int.parse('1');
assert(one == 1);
// String -> double
var onePointOne = double.parse('1.1');
assert(onePointOne == 1.1);
// int -> String
String oneAsString = 1.toString();
assert(oneAsString == '1');
// double -> String
String piAsString = 3.14159.toStringAsFixed(2);
assert(piAsString == '3.14');
字符串
var s1 = 1;
var s2 = "s1 : $s1";
var s1 = '''
You can create
multi-line strings like this one.
''';
var s2 = """This is also a
multi-line string.""";
布尔值
//布尔值
bool isGame = true;
assert(isGame);
数组
几乎所有编程语言中最常见的集合可能是数组或有序对象组。 在Dart中,数组是List对象,因此大多数人只是将它们称为列表 。
var list = [1,2,3];
要创建一个编译时常量的列表,请在List前添加const :
<div>var constantList = const [1,2,3];
// constantList [1] = 1; //取消注释会导致错误。</div>
Map
var map = {
'first':"1",
'second':"2"
};//如果查找不在Map中的键,则返回空
var value = map["third"];
assert(value == null);//可以使用Map构造函数创建相同的对象
var map2 = Map();
map2["first"] = "100";
函数
Dart是一种真正的面向对象的语言,所以即使是函数也是对象,并且有一个类型Function 。 这意味着函数可以分配给变量或作为参数传递给其他函数。 也可以调用一个Dart类的实例,就像它是一个函数一样:
bool isNoble(int atomicNumber){
return _nobleGases [atomicNumber]!= null; }
isNoble(atomicNumber){
return _nobleGases [atomicNumber]!= null; }
bool isNoble(int atomicNumber)=> _nobleGases [atomicNumber]!= null;
可选的参数
void enableFlags({bool bold,bool hidden}){
}
可选位置参数
在[]包装一组函数参数将它们标记为可选的位置参数:
String say(String from, String msg, [String device]) {
var result = '$from says $msg';
if (device != null) {
result = '$result with a $device';
}
return result;}
默认参数值
函数可以使用=来定义命名参数和位置参数的默认值。 缺省值必须是编译时常量。 如果未提供默认值,则默认值为null 。
void enableFlags({bool bold = false, bool hidden = false}) {
}
// bold为true; hidden为false.
enableFlags(bold: true);
main()函数
每个应用程序都必须具有顶层main()函数,该函数充当应用程序的入口点。 main()函数返回void并且有一个可选的List<String>参数用于参数。
void main() {
querySelector('#sample_text_id')
..text = 'Click me!'
..onClick.listen(reverseText);
}
函数作为参数
可以将一个函数作为参数传递给另一个函数:
void printElement(int element) {
print(element);}
var list = [1, 2, 3];
list.forEach(printElement);
匿名函数
([[Type] param1[, …]]) {
codeBlock;
};
var list = ['apples', 'bananas', 'oranges'];
list.forEach(
(item) {
print('${list.indexOf(item)}: $item');
}
);
var list = [0,1,2,3,4];
list.forEach(
(item) => print('${list.indexOf(item)}: $item')
);
void call(void callback(int)){
callback(9999);
}
返回值
所有函数都返回一个值。 如果没有指定返回值,则语句return null; 会隐式地附加到函数体:
foo(){}
assert(foo()== null);