//定义一个函数
printBookName(String bookName){
print('The book name is $bookName'); //输出信息到控制台
}
//程序执行入口
main(){
var book ='第一行代码';//声明和初始化变量
printBookName(book); //调用函数
}
从上面的范例可以总结以下几点:
- 单行注释
- 表示字符串这种数据类型,其他内置类型还有int,List和bool等
- 输出信息到控制台
- 一个字符串字面量,通过单引号或双引号实现
- 字符串中引用变量的值需要在变量或表达式前添加符号“$”表示引用其字面量
- 这是一种特殊的,必需的顶级函数,应用程序从这里开始执行
- 声明变量而不指定其类型
Dart语言是动态类型语言,可以使用Var声明变量,也可以使用具体类型(比如String)来直接声明变量。当使用var声明变量时,可赋予不同类型的值,变量类型会在编译时根据值的类型确定,例如
//创建并初始化变量实例
var book='第一行代码'; //字符串类型
var number=1; //整数类型
//显示声明类型,例如使用String显示声明字符串类型
String book='第一行代码';
变量类型不确定时也可以使用Object或dynamic关键字声明变量,它们均可以接收任意类型的值,不过两者却有区别。Object是所有类的父类,而dynamic表示不确定当前类型,使用Object时会在编译时进行检测,如果有错误方法则会报错,而dynamic编译时不做类型检测,如果有错误则会在运行时抛出。例如:
//对象没有明确类型时,可以用Object或dynamic关键字
Object book1='第一行代码'
dynamic book2='第一行代码'
book2['obj']=4;//可以编译通过但在运行时会抛出NoSuchMethodError
如果定义一个不会改变值的变量,那么使用final或const,被final修饰的变量只能被设置一次;const变量是一个编译时常量,也就是在声明的同时就要进行初始化。被final或const修饰的变量不能和var同时使用,变量类型可以省略:
final String book='第一行代码';
cosnt String book='第一行代码'
Dart中支持以下特殊类型:number(数字),Strings(字符串),booleans(布尔),list(集合),maps(map集合),runes(字符),symbols(符号)等等
//创建一个int类型的list
List list=[1,2,3];
//创建一个编译时常量const的list
List constantList=const[1,2,3];
两种方式
Map books={'one':'hello','two':'world'};
Map books=new Map();
books['one']='hello';
books['two']='world';
在Dart中函数也是对象,属于Function类型,它可以被分配给变量或作为参数进行传递,以下是一个函数的例子:
bool isGoodBook(String bookName){
return _goodBooks[bookName] !=null;
}
定义函数时,使用{param1,param2,…}指定可选命名参数。例如
//设置[bold]和[hidden]标志
void enableFlags(int num,{bool bold,bool hidden}){
//...
}
包装一组函数参数,用“[]”将它们标记为可选的位置参数:
String say(String name,String msg,[String device,String device2]){
var result='$name says $msg';
if(device !=null){
if(device2!=null){
result='$result with a$device $device2';
}else{
result='$result with a$device;
}
}
return result;
}
匿名函数即无方法名,例如
var list=['Android','ios','Flutter'];
//这里省略了方法名,只保留了参数forEach为Iterable提供遍历接口
list.forEach((item){
print('${list,indexOf(item)}:$item');