继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Dart基础——Dart常用语法

思想者杰克
关注TA
已关注
手记 24
粉丝 3
获赞 4

主要介绍Dart开发常用的一些语法

基础语法

Final,Const定义常量

Const 变量在编译时就已经固定。
Final 变量或类变量在第一次使用时被初始化,懒加载。
Const不能定义对象 Final能定义对象

例:

//可以省略String这个类型声明
final str = "hi world";
//final String str = "hi world"; 
const str1 = "hi world";
//const String str1 = "hi world";

定义多行字符串

String str ="""
保留换行的字符串
可以在编译器里换行
""";
String str2 ='''
保留换行的字符串
可以在编译器里换行
''';
print(str);
print(str2);

double类型初始化时可以赋值为int型

double num1 = 1.0;
double num2= 1;
print(num1.runtimeType);
print("----");
print(num2.runtimeType);

Map类型取值map[“key”] 赋值同理

Map testMap = {};
testMap["flag"] = true;
print(testMap["flag"]);

在List类型中使用if语句

var promoActive = true;
var nav = [
  'Home',
  'Furniture',
  'Plants',
  if (promoActive) 'Outlet'
];
print(nav);

image-20200824154736578

在List类型中使用For语句

var listOfInts = [1, 2, 3];
var listOfStrings = [
  '#0',
  for (var i in listOfInts) '#$i'
];
print(listOfStrings);

image-20200824154538870

is关键字判断数据类型

int num = 1;
print(num is String);
String str = "测试";
print(str is String);

~/取整运算符

double num = 5;
print( num ~/ 2);
//5除2取整

字符串形式输出两个变量

String str1 = "str1";
String str2 = "str2";
print("$str1 $str2");

flag == true ? 我是true” : ”我是false” 三目运算符

String str = "三目运算符";
print(str == "三目运算符"?"我是true":"我是false" );

int.parse(str) String类型转int

num.toString()int类型转String

double.toInt() double类型转int

int num = 1;
double doubleNum =1.0;
String str = "1";
print(int.parse(str).runtimeType);
print(num.toString().runtimeType);
print(doubleNum.toInt().runtimeType);

isEmpty判断字符串是否为空

String str1 = "";
print(str1.isEmpty);
String str2 = "1";
print(str2.isEmpty);
String str3;
//此行代码会报错,null不能调用isEmpty
print(str3.isEmpty);

变量或方法前加入下划线表示私有

String _privateStr = "私有变量";
_privateFunction(){
  print("私有方法");
}

import关键字用于实现类导入,as给导入的类起别名

import 'dart:math' as math;

if语句只支持bool类型,不支持直接使用空数据判断

String str;
//不合法
if(str){
}
//合法
if(str != null){
}

List的扩展运算符“…”和空值判断扩展运算符“…?”

"…"支持将一个集合添加到另一个集合里

List list1 = [1,2,3];
List list2=[-1,0,...list1];
print(list2);
List list3;
// ...?运算符  如果为空就不插入
List list4 = [0,...?list3];
print(list4);

级联操作符。通过级联操作符可以对类的内部成员进行链式调用,

级联运算符 (…) 可以实现对同一个对像进行一系列的操作。 除了调用函数, 还可以访问同一对象上的字段属性。

var button = Button() // 获取对象。
  ..text = 'Confirm' // 调用成员变量。
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

第一句创建对象。获取的对象依次执行级联运算符后面的代码, 代码执行后的返回值会被忽略。
上面的代码等价于:

var button = Button();
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

赋值操作符“??”、“??=”和“~/”及判空操作符“?

String str;
print(str ??  1);//如果str为空 返回1
str ??= "1"; //如果str为空 将str赋值为1
print(str);
int num = 1;
num?.toString();//如果str为空 不执行toString;
print(num.runtimeType);
int num1;
num1?.toString();//如果str为空 不执行toString;
print(num1.runtimeType  == Null);

var 和 dynamic声明变量

Dart属于强类型语言,但可以用var声明变量,Dart对于var声明会自推导出数据类型。实际上var是编译期的语法糖, 而dynamic声明才表示动态类型,dynamic被编译后是一个object类型,在编译期间不对任何的类型进行检查,而是在运行时对类型进行检查。

String 和 int没有默认的类型转换,‘123’不等于123

String str = "1";
int num = 1;
print(str == num);

指定了数据类型之后不能重新赋值其他类型的数据

 String str = "test";
 //此行代码会报错
str = 1;

函数相关

函数简写

对于只包含一个表达式的函数,可以使用简写语法

  printFunc(String str)=> print(str) ;

//等同于
//printFunc(String str) {
//  print(str);
//}

函数作为参数传递

  _test(){
execute(() => print("func被执行了"));
execute1(callback);
  }
  void execute(var func) {
func();
  }
  void execute1(var callback){
callback("callback被执行了");
  }
  callback(str){
print(str);
  }

可选的命名参数

定义函数时,使用{param1, param2, …},放在参数列表的最后面,用于指定命名参数。例如:

//设置[bold]和[hidden]标志
void enableFlags({bool bold, bool hidden}) {
// ... 
}
调用函数
enableFlags(bold: true, hidden: false);

闭包

Dart 的闭包是定义在方法里面的方法,其特性:
闭包是一个对象
闭包定义在其他方法内部
闭包可以访问外部方法的布局变量,并持有其状态。这是闭包的最大用途,通过闭包的方式把一个方法内部的属性暴露出去,因为方法是可以返回方法的,Dart 中方法也是对象一样可以当做返回值处理

sum(){
  var num = 0;
  sum2(){
num++;
print(num);
  }
  return sum2;
  
  // 也可以这么写,匿名的方式用的最多
  return (){
num++;
print(num);
  };
}

// 多调用闭包几次
void main(){
  Function a = sum();
  a();
  a();
  a();
  a();
  a();
  a();
}

~~~~~~~~~~log~~~~~~~~~~
1
2
3
4
5
6

可以理解sum()就是一个对象,在初始化对象时,数值a已经被确定为0,再次调用a()时,没有再次执行var num = 0;,因为没有重新初始化类,所以赋值操作不会再执行一次。

完整示例

上文所有的代码示例都在作者的GiuHub上,github.com/jack0-0wu/flutter_demo,里面还包含了一些常用flutter功能的展示。

纸上得来终觉浅,绝知此事要躬行。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP