语言都是相通的,Dart语言也不例外,对比,参考尤为重要。

注释

单行注释:

// todo 一般针对某一语句进行注释。

多行注释:

/*
* 针对一段逻辑可以多行解释,但是这种用的不多,
* 大部分都是采用文档注释的方式进行多行注释。
*/

文档注释:

/// 主要针对类、全局变量和方法上进行注释。
///
/// 在第一句之后添加一个空行,将其拆分为自己的段落,这有助于您编写一个简短的第一句话来总结文档。
///
/// 尽量在文档注释中使用方括号来引用范围内标识符,例如[Flag]、[addFlag]、[name]甚或是其他类成员[LoginPage.userName]都行。
///
/// 可以在注释中引用代码,例如:
/// ```dart
/// Flag addFlag(String name, String abbr) => ...
/// ```
Flag addFlag(String name, String abbr) => ...

变量与常量

变量

1.通用类型var

var可以自动推断出变量类型,常用于定义对象。

var str = '123';
var userInfo = LoginInfo.fromJson(xxx);

2.字符串

/// 单一赋值
String str = '123';/// 多行赋值
String str1='''hello word,hello dart!''';/// 字符串拼接
String s = '456';
String str = '123$s789';
print('$str0'); //1234567890

3.数字类型

/// 数值型使用关键字[num]表示,它包含整型[int]和浮点型[double]两种。
num i = 123.45;/// 整形
int i1 = 123;/// 浮点型
double i2 = 123.45;

4.布尔类型bool

bool flag = true;

5.List

List既可以表示集合也可以表示数组。

/// list定义
var l = [];
var l0 = <int>[];
List l1 = List();
List l2 = List<int>(); // 指定存放类型
List l3 = List.filled(2, "");  // 生成一个固定长度的集合
List l4 = List<String>.filled(2, ""); // 生成一个固定数据类型固定长度的集合/// 取值
int a = l2[0];/// list去重,先定义一个set,再把list塞到set里。
var repeat = ['aa', 'bb', 'cc', 'aa', 'bb'];
var dedu = Set();
List list = dedu.addAll(repeat).toList();/// list foreach
list.forEach((value){
print('$value');
})/// list重组两种方式
var list = list.map((value){
return value*2;
})
var list = list.where((value){
return value>5;
})/// list包含判断
// 只要有一个满足条件的返回true
bool f = list.any((value){
return value >5;
})
// 每一个都满足返回true
bool f = list.every((value){
return value>5;
})

6.Map

/// map定义
var map = {};
Map map1 = Map();
var person={'name':'张三','age':20};/// map取值
String name = person['name'];/// map赋值
person['age'] = 21;/// 获取所有key
List keys = person.keys.toList();/// 获取所有value
List values = person.values.toList();/// map添加数据
person.addAll({
'sex':'男'
});/// 是否包含某个值
person.containsValue('张三');/// map foreach
map.forEach((key, value){
print("$key---$value");
})

其他

// late修饰,表示a一定会初始化,只不过稍后处理。
late int a; // dynamic表示任意类型,类似java中的Object
Map<String, dynamic> map;

常量

// 编译期常量,一般用“static const”修饰,表示不可修改
const PI = 3.14159; // 惰性初始化常量,和java的final类似,常用来修饰对象,确保对象不容易修改。
final pi;
pi = 3.14159;

空安全

空安全在代码编辑阶段帮助我们提前发现可能出现的空异常问题,但这并不意味着程序不会出现空异常。

// 明确表示a不能为空
int a;
// 代码编写过程中不可以直接赋值null,否则直接报红
// a = null; //错误写法// 允许b为空
int? b;
b = null; // 允许程序编写和编译,但不保证编译运行后报错。// 对象属性调用
UserInfo? userInfo = UserInfo.fromJson(...);
// String? name = userInfo.name; // 错误写法,因为userInfo有可能为空,所以编译器不允许直接调用。
String? name = userInfo?.name; // 正确写法
String? name = userInfo!.name; // 正确写法,此时开发完全需要保证userInfo不为空,不推荐,迫不得已采用。
String name = userInfo?.name??''; // name有可能为空,但是接收对象是不允许为空的,所以如果为空给一个默认值。

运算符与类型转换

运算符

“非”、“算术”、“关系”、“条件”、“逻辑”、“赋值”、“逗号”七种运算符使用和Java大差不差。

赋值判空"??"

String name = userInfo?.name ?? '';

类型判断和转换

/// 类型判断
if(b is String){
print('b是字符串类型')
}/// as 强转
var p = getPersion();
if(p is Person){(p as Person).printInfo();
}/// 字符串转int
int myNum=int.parse('123');/// 数字转String
String str = num.toString();/// Dart中0可以作为被除数,不会报错,并且打印出Nan,可以用此判断是否是被除数为0.
var a=0/0;
print(a);//打印出Nan,不会报错

遍历

/// for循环除了常规的"fori"形式还有"for in".
for(var item in List){
print(item);
}

函数

/// 可选参数,方括号里面的参数都是可选参数,可以定义默认值
String getPersonInfo(String name, [int age=20, String sex]){// todo ...return '';
}/// 把一个方法当作参数,常用于回调
fun1(){print("fun------");
}
fun2(fun){fun();
}/// 箭头函数(lambda表达式),注意箭头函数只能有一条语句
list.forEach((value)=>print("value=$value"));/// 匿名函数
var printNum2=(int i){print(i);};
printNum2(123);/// 闭包
///
/// 问题:
/// 1.全局变量特点:全局变量常驻内存、全局变量污染全局
/// 2.局部变量的特点:不常驻内存会被垃圾机制回收,不会污染全局
///
/// 需求:
/// 1.局部变量常驻内存
/// 2.不污染内存
///
/// 闭包可以解决。闭包:函数嵌套函数,内部函数会调用外部函数的变量或参数,变量或参数不会被系统回收(不会释放内存)。
/// 闭包写法:函数嵌套函数,并return 里面的函数,这样就形成了闭包
void main(){//闭包fun(){var a=123;return(){a++;print(a);};}var b=fun();b();//124b();//125b();//126
}

/// 常规构造函数,和java一样
class Person{int age;String name;Person(int age, String name){this.age = age;this.name = name;}
}/// 构造函数简写
class Person{int age;String name;Person(this.age, this.name){}
}/// 命名构造函数
class Person{int age;String name;Person(this.age, this.name){}Person.info(){print('age=$age,name=$name');}/// 命名构造函数可以有多个Person.setAge(this.age){print("setAge age=$age");}
}/// getter和setter修饰符
class Person{int age;String name;Person(this.age, this.name){}/// 可直接通过属性的方式访问,例如 p.theAge,get theAge{return age;}/// p.forName('张三');set forName(str){this.name = str;}
}/// 级联(链式)调用(对象可以连续调用他的属性或方法)
class Person{int age;String name;Person(){this..age = 20..name = '张三';}
}/// 抽象类
/// 1. dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法;
/// 2. 抽象类用extends继承
abstract class Animal{/// 抽象方法,无方法体,子类必须实现eat();/// 普通方法printInfo(){print('我是一个抽象类里面的普通方法');}
}/// 接口
/// 1. dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现。
/// 2. 接口类使用implements关键字进行实现,会将普通类和抽象中的属性的方法全部需要覆写一遍。
/// 3. 建议使用抽象类定义接口。因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类。
abstract class Animal{eat();
}
class Persion implements Animal{@overrideeat(){print('吃榴莲');}
}/// mixins多继承
/// mixins类可以实现多继承,目的就是在一个类中混入其他类的功能。
/// 1. mixins的类只能继承自Object,不能继承其他类。
/// 2. 作为mixins的类不能有构造函数
/// 3. mixins类可以用mixins代替class声明一个mixin类,也可以用普通的类(继承自Object)作为mixins类
/// 4. 当继承的多个类中有同样的方法时,谁排在最后则调用谁的函数。
/// 5. 子类多继承采用with关键字来实现
mixin A {String info="this is A";void printA(){print("A");}
}class B {void printB(){print("B");}
}
class C with A,B{}/// 泛型,和java使用类似,不在多说
...

私有方法和私有属性

在属性或者方法名前加_表示私有。

int _age=2;
void _getName(){return name;
}

引入库采用import字段引入,一个dart文件就是一个库,因此平时开发时在一个dart文件中引入另外一个dart文件方法或属性就要引库。

例如 lib/person.dart:

void getName(){print('张三');
}
void getAge(){print(20);
}
void getSex(){print('男');
}

引入库场景:

/// 普通引入
import 'package:lib/person.dart';/// 冲突解决,当引入两个库中有相同名称标识符的时候会发生冲突,可使用as关键字来指定库的前缀。
import 'package:lib/person1.dart' as person1;/// 部分导入,如果只需要导入库的一部分,有两种模式:
/// 1. 只导入需要的部分,使用show关键字
/// 2. 隐藏不需要的部分,使用hide关键字
import 'lib/person.dart' show getAge;
import 'lib/person.dart' hide getName;  

异步

dart是单线程,不能向java一样开启多个线程,dart的异步采用asyncawait来修饰。

  • async是让方法变成异步。
  • await是等待异步方法执行完成。

注:只有async方法才能使用await关键字调用方法

void main(){var result = await testAsync();print(result);
}/// 获取async修饰的返回值采用Future类型接收,不写的话,默认也会给一个Future类型
Future<String> testAsync() async{return 'Hello async';
}

Flutter学习总结(二)开发语言Dart学习相关推荐

  1. GEE(Google Earth Engine) 最基础代码学习笔记二 —— JavaScript 语言

    GEE(Google Earth Engine) 学习笔记二 Javascript 语言 1. 注释 print('Hello World!'); 如果要注释,则在代码前面加//,比如: // pri ...

  2. c语言入门自学手机版,C语言入门学习app下载-C语言入门学习app最新版下载 V1.0.2-友情手机站...

    C语言入门学习app是一款0基础自学软件,这里有着丰富C语音相关课程学习,大家在这里是可以便捷搜索查找,随时都是可以找到适合感兴趣课程学习,都是一些优质课程知识提供大家,学员在这里是可以高效学习,海恩 ...

  3. c语言入门自学手机版,C语言入门学习软件下载-C语言入门学习手机版v1.0.2 - 起点软件园...

    C语言入门学习是一款最新推出上线于安卓手机平台的专业编程学习软件,C语言入门学习app收录了海量入门视频课程,清晰易懂的详细讲解专为刚入门学习C语言的小白量身打造,不同章节都有相应的习题,根据习题成绩 ...

  4. 选择开发语言和学习的路径(这个标题可能有点不准确)

    毕业一年多了,现在在一家公司担任网络管理员,事情很少过得很惬意,基本上没有加班.但是渐渐的感觉没有什么前途(钱途).很多一起出来的的大学同学都向软件开发方向发展,很多事java或者php,有些认识的好 ...

  5. 小程序开发学习一:开发语言解析

    小程序的开发是建立在已有的开发语言和微信的封装api之上的,学习前我们梳理下基础的东西. 前端开发通用js html json css. js :页面脚本 html :页面标签语言 json: 一种数 ...

  6. 学习web前端开发,需要学习什么?

    如果要学习web前端开发,需要学习什么? 遇到很多新手,都会问,如果要学习web前端开发,需要学习什么?难不难?多久能入门?怎么能快速建一个网站?工资能拿到多少?还有些让我推荐一些培训机构什么的要去学 ...

  7. 写给初学大数据的你,从零开始学习大数据开发的完整学习路线

    最近很多人都想学习大数据开发,但是却不知道如何开始学习,今天专门整理了一份针对大数据初学者的大数据开发学习路线. 下面分十个章节来说明大数据开发要学习的内容: 互联网科技发展蓬勃兴起,人工智能时代来临 ...

  8. 零基础学习web前端开发应该先学习什么

    这是两年以来,修真院收集整理的学习资料顺序. 以CSS15个任务,JS15个任务为基础,分别依据要完成任务的不同的技能点,我们整理出来了这么一篇在学习的时候需要看到的资料. 推荐一个web前端学习 Q ...

  9. struts2学习笔记二--准备struts2的学习和开发环境

    准备struts2的学习和开发环境 1 导包 2 参照开发包自带的例子在web.xml文件中配置 3 参照开发包自带的例子编写Action类和配置struts.xml文件 <struts> ...

最新文章

  1. python在会计中的应用-Python会计数据分析
  2. 百度富文本编辑jsp上传_百度富文本编辑器教程,从入门到放弃
  3. Redis的List操作
  4. poj-2115 C Looooops(扩展欧几里得)
  5. dstat 性能监测工具
  6. 电脑运行java游戏_电脑里如何运行java软件或游戏
  7. sel2000服务器自动关闭,实用贴:轻松处理SQL 2000数据库自动停止
  8. 佛系前端面试题记录--第六周
  9. 智能运动手环设计构思
  10. 计算机网络和internet选项,大师为你详解win10系统设置Internet选项的处理
  11. 2.5W 字详解线程与锁了,面试随便问!!
  12. 【kali-密码攻击】(5.1.1)密码在线破解:Hydra(图形界面)
  13. C语言中0UL 1UL什么意思
  14. python的介绍和及基本的使用
  15. 断点量子计算机,小队集结!《幽灵行动:断点》首个副本“泰坦计划”今日开启...
  16. 计算机组成原理调试程序,计算机组成原理实验调试系统调试系统.PDF
  17. 阿里巴巴开发手册之应用分层
  18. 中国科学技术大学研究生2021生化原理与应用复习资料及往年考试题
  19. 中华草龟饲养日志----新到手8只小龟
  20. 学习笔记:浅谈NP完全性问题

热门文章

  1. 快速预审、优先审查、普通申请交叉服务模式以实现发明专利1个月授权
  2. linux常用命令(50个)
  3. 打造政产学研新型研发机构 加速人工智能科研成果转化...
  4. java工程师详细工作内容_java工程师主要工作内容
  5. 还在手动部署jar包?太low了,动态上传jar包热部署真的爽!
  6. 让你的 Webstorm 永久激活
  7. 数控G代码编程详解大全
  8. 串口通信-STM32的USART串口通讯程序
  9. 基于SpringCloud的广告系统设计与实现
  10. iTunes的下载windows