简单记录一下学习flutter,需要的dart 语言知识储备
一 // day0 hello world ? ? 单行注释 // ; 多行注释 /*内容,可多行*/; 文档注释 /// (/// [name] 姓名)或者 /** */
dart 语法 :面向对象,类型安全语言,支持类型推断。未赋值的变量值null 代码分区{} 分号结束 var 修饰变量 main() 入口 print()打印函数 使用“_”修饰的对象,外部不能访问 常见关键字 final?? const?? dynamic?? void??? import? this? class extends?? supper??? override??? implements async?? await?? yield
代码练习 /// 程序入口 ?
void main(){
print('Hello ,World!');
// 变量
var name = 'Voyager I';
var year = 1977;
var antennaDiamerer = 3.7;
var flybyObjects = ['Jupiter','Saturn','Uranus','Neptune'];
var image = {
'tags':['saturn'],
'url':'//path/to/saturn.jpg'
};
if (year >= 2001){
print('21st century');
}
}
数据类型
运算符 +??? -?? *?? \ 等 ????? ==??? >?? >=??? <=??? ++??? 或|| 循环分支语句 for while if conditions else if
函数格式(官方文档建议:每个函数的参数以及返回值都指定类型)
返回类型 函数名(参数类型 参数名){ ? coding ? return 返回值 }
函数参数和返回值 没有返回值 void ,没有参数 ()
=> (胖箭头)仅包含一条语句的函数,常用匿名函数作为参数传递 flybyObjects.where((name)=>name.contains('turn')).forEach(print);
上例中,展示匿名函数 (name)=> name.contains('turn') 上例中,展示函数作为参数的使用方式,顶层函数print()作为参数传给了forEach()函数
import 导入 模块:import 'dart:math'; 包: import 'package:test/test.dart'; 文件:import 'test/test.dart';类 class 类的示例代码:(类名Spacecraft,三个属性、两个构造方法、一个方法describe)
/// [name] 属性name
/// [launchDate]
/// [launchYear]
class Spacecraft{
String name;
DateTime? launchDate;
int? get launchYear=>launchDate?.year;
/// [Sepacraft] 构造函数
/// [name] 属性
/// [launchDate] 属性
Spacecraft(this.name,this.launchDate){
}
Spacecraft.unlaunched(String name):this(name,null);
/// [describe] Method
void describe(){
print('Spacecraft: $name');
var launchDate = this.launchDate;
if (launchDate != null){
int years = DateTime.now().difference(launchDate).inDays ~/ 365;
print('Launched:$launchYear ($years years age)');
}else{
print('Unlaunched');
}
}
}
类的使用示例代码:
?
var voyager = Spacecraft('Voyager I', DateTime(1977,9,5));
voyager.describe();
var voa = Spacecraft.unlaunched('Voyager III');
voa.describe();
扩展类(继承)extends 示例代码:
/// [altitude] 新增属性
class Orbiter extends Spacecraft{
double altitude;
/// 构造方法
/// [name] 属性
/// [launchDate] 属性
/// [altitude] 属性
Orbiter(String name,DateTime launchDate,this.altitude):super(name,launchDate);
}
是否支持多继承:dart 支持单继承 Mixins Mixin 在多个类层次结构中重用代码,示例:
mixin Piloted{
int astronsuts = 1;
void describeCrew(){
print('Number of astronauts: $astronsuts');
}
}
mixin Piloted{
int astronsuts = 1;
void describeCrew(){
print('Number of astronauts: $astronsuts');
}
}
class PilotedCraft extends Spacecraft with Piloted{
PilotedCraft(super.name,super.launchDate);
PilotedCraft.unlaunched(String name):super.unlaunched(name);
// ……
}
?
var mixP = PilotedCraft("name", DateTime(1999,10,10));
mixP.describe();
mixP.describeCrew();
接口和抽象类 implements dart没有interface 关键字,所有的类都隐式定义了一个接口,任意类都可以作为接口被实现 示例代码: class MockSpaceship implements Spacecraft{ ? // ... } 抽象类:可以包含抽象方法 抽象方法:不含具体方法的方法
abstract class Describable{
void describe();
void describeWithEmphasis(){
print('=============');
describe();
print('=============');
}
}
任意一个扩展了Describable的类都拥有describeWithEmphasis()方法,这个方法会调用实现类中实现的describe()方法。(了解一下,后续补充代码理解)
这里看官方文档:https://dart.cn/samples 不是很理解,稍后在看吧
异步 async await 避免回调地狱(CallBack Hell),代码更具可读性
异常 throw
有机会去了解一下: 栈追踪、rethrow、Error、Exceptio
|