Flutter快速入门之Dart基础语法
2019-05-16 本文已影响0人
丶切切切切梨
基本数据类型
int i =1;
double d =0.5;
bool b =true;
String s ="text";
// 自动推断类型
var i =1;
var d =0.5;
var b =true;
var s ="text";
//或者
dynamic i =1;
dynamic d =0.5;
dynamic b =true;
dynamic s ="text";
dart中没有long、char等基本数据类型。使用var或dynamic来定义类型,dart自动推断。
变量
int i =2;
var a ="a";
dynamic n =9;
我们可以指定数据类型,或者使用var或dynamic来申明,dart会自动推断类型。
常量
int i =2;
final i1 = i;
const i2 =2;
不使用var或者其他数据类型,而用final或者const来修饰的数据表示不会改变的常量。
一个被final修饰的变量只能被赋值一次,一个被const修饰的变量是一个编译时常量(const常量也是final常量)。
final修饰的变量是不可改变的,而const修饰的表示一个常量。const i3 = i;这种写法是错误的。
数组
List list = [0,1,2,3,4,5];
数组遍历
List numbers = [0, 1, 2, 3, 4, 5];
for (var i =0; i < numbers.length; ++i) {
print(numbers[i]);
}
for (var n in numbers) {
print(n);
}
numbers.forEach((num) => print(num));
String转换符
Strings ="hello";
print("say$s"); //sayhello
class User {
say() =>"haha";
}
print("say${User().say()}"); //sayhaha
函数
int add(int a, int b){
return a+b;
}
或者省略返回值
add(int a, int b){
return a+b;
}
或者=> 代替return
add(int a, int b) => a+b;
函数传参
常规参数
printStr(String str){
print(str);
}
命名参数
printStr({String str}){
print(str);
}
//或者
printStr({str : String}){
print(str);
}
参数默认值
add({int a, int b =3}) {
return a+b;
}
函数赋值传值
函数作为对象传递
printNum(int a) {
print("$a");
}
printArr() {
// 依次打印:1-5
var array = [1,2,3,4,5];
array.forEach(printNum);
}
函数赋值给变量
printNum(int a) {
print("$a");
}
printArr() {
var p =printNum;
}
匿名函数
nameless(Function callback){
callback("返回了一个字符串");
}
printStr() {
nameless((str){
print("$str");
});
}
匿名函数类似于java中的接口,Fuction类是一个抽象类,以上代码类似于java的接口回调,通过callback回传了一个字符串。
运算符
is判断类型
var s ="sss";
s is String; //true
s is int; //false
?判空(这个类似于kotlin的空安全实现了一半,你可以用?判断为空调用方法后返回null而不报错,但是无法保证不带?的一定不为空)
var str1 ="hello";
var str2 = null;
print(str1?.length); // 5
print(str2?.length); // null
print(str2.length); // 报错
..运算符(类似于建造者模式)
class User{
say() => print("hello");
run() => print("run");
stop() => print("stop");
}
test(){
User()..say()..run()..stop();
}
流程控制
//if else
int a =10;
if (a >1) {
//...
}else if (a <1) {
//...
}else {
//...
}
//switch
switch (a) {
case 0:
//...
break;
case 1:
//...
break;
default:
//...
break;
}
//while
while (a <5) {
a--;
}
类
class User{
//变量名前面加_表示私有
String _name;
int _age;
String _sex;
//默认构造方法
User(this._name, this._age, this._sex);
//命名构造方法
User.cons2(this._name);
//在构造方法cons3执行时调用默认构造方法
User.cons3(String name) :this(name,0,"男");
//get set方法
String get name=>_name;
set name(String value) {
_name = value;
}
int get age=>_age;
String get sex=>_sex;
set sex(String value) {
_sex = value;
}
set age(int value) {
_age = value;
}
}
抽象类以及实现
abstract class Person {
//抽象方法,没有方法体,子类实现
eat(String sth);
//常规方法
run() => print("run");
}
class Man extends Person {
//实现父类抽象方法
@override
eat(String sth) {
print("eat $sth");
}
}
静态成员变量及方法
class Man {
static const name ="张三";
static say(String sth) {
print("${Man.name} say $sth");
}
}