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");
  }

}

上一篇下一篇

猜你喜欢

热点阅读