Flutter2-Dart語法

變量

/**
 * Dart中用var生命變量,可以賦值不同類型
 * Type:dynamic
 * 一開始沒有初始值的變量可以賦值任意類型,一開始有初始值的變量,只能賦值同類型
 * */
var a;
a = "asd";
print(a);
a = 6;
print(a);
a = [1,2];
print(a);

var b = 66;
print(b);

final變量

/**
 * final:使用final聲明的只能賦值一次的變量
 * 可以在命名時賦值,也可以命名不賦值,其他地方賦值,但是只能賦值一次!
 * 沒有被賦值過的final變量是不能被使用的
 * 它是最終變量
 * */
final c;
c = 2;
print("c : $c");

常量

/**
 * const:常量只能在聲明的時候賦值,而且必須在聲明時賦值
 * */
const d = 5;
print("d : $d");

Dart的數(shù)據(jù)類型

  1. 數(shù)值型Number: int & double
  2. 字符串
  3. bool
  4. 列表 - List
  5. 鍵值對(字典) - Map

  • 數(shù)值類型
  /**
   * num:可以是int也可以是double
   * */
  num a = 10;
  a = 1.5;

  int b = 20;
  print(b.isEven); // 偶數(shù)
  print(b.isOdd); // 奇數(shù)

  double c = 30.0;

  // 算數(shù)運算符 + - * / %(取模) ~/(取整)
  print(a ~/ b); // 相當(dāng)于a/b取整

  // 類型轉(zhuǎn)換
  print(a.toInt().isOdd);
  print(b.toDouble());
  • 字符串
/**
   * Dart中的字符串
   * 使用單引號和雙引號創(chuàng)建
   * 三個引號或雙引號可以創(chuàng)建多行字符串
   * */

  var a = 'James';
  var b = "Rose";
  print(a+b);

  String str = "Hello";
  String str1 = "World";

  /**
   * Apple
      Orange
      Banana
      Cherry
   * 結(jié)果和下面寫的一樣,前面會帶空格
   * */
  String str2 = '''Apple
  Orange
  Banana
  Cherry''';
  print(str2);

  /**
   * 取字符串第n個字符
   * e
   * */
  print(str[1]);

  /**
   * 字符串拼接
   * HelloWorld
   * */
  print(str+str1);

  /**
   * 字符串重復(fù)翻倍
   * HelloHelloHelloHelloHello
   * */
  print(str * 5);

  /**
   * 格式化字符串
   * 表達式需要花括號括起來,單個變量直接美元符加變量
   * */
  int aa = 10;
  int bb = 20;
  int cc = aa + bb;
  print("a + b = ${aa + bb}");
  print("a + b = $cc");

  /**
   * 如果不需要字符串中的轉(zhuǎn)義字符,字符串前面加r
   * apple
      orange
   * apple\norange
   * */
  String str3 = "apple\norange";
  String str4 = r"apple\norange";
  print(str3);
  print(str4);

  /**
   * 字符串長度
   * */
  print(str3.length);
  • list - 數(shù)組
  /**
   * Dart中的列表,可以存放不同的數(shù)據(jù)類型
   * 創(chuàng)建可變list  var list = [1, 2, 3];
   * 創(chuàng)建不可變list  var list = const [1, 2, 3];
   * */

  var list1 = [1, 2, 3, 'sj'];
  print(list1);
  print(list1[3]);
  list1[3] = 4;
  print(list1[3]);

  var list2 = const [1, 2];

  /**
   * 獲取數(shù)組長度
   * */
  var list3 = ["red", 1];
  print(list3.length);

  /**
   * 添加元素
   * 如果數(shù)組原來是同類型數(shù)據(jù),添加只能是同類型數(shù)據(jù)
   * 如果原來有不同類型數(shù)據(jù),可隨便添加什么類型
   * */
  list3.add([1]);
  print(list3);

  /**
   * 插入元素
   * 插入元素類型規(guī)則同添加元素
   * */
  list3.insert(1, "yello");
  print(list3);

  /**
   * 刪除元素
   * */
  list3.remove("red");
  print(list3);

  list3.removeAt(1);
  print(list3);

  list3.clear();
  print(list3);

  /**
   * 數(shù)組排序
   * */
  var list4 = [5, 3, 2, 7, 9, 1];
  list4.sort();
  print(list4);

  /**
   * 數(shù)組截取
   * */
  print(list4.sublist(2, 4));
  • map - 字典
/**
   * Dart中的map,鍵值對
   * 創(chuàng)建可變的Map: var json = {'one' : 'red', 'two' : 'green'};
   * 創(chuàng)建不可變的Map: var json = const {'one' : 'red', 'two' : 'green'};
   * */
  var json1 = {'one' : 1, 2 : 'green'};
  print(json1);
  print(json1[2]);
  json1['three'] = 'yello';
  print(json1);

  /**
   * Map的長度
   * 所有的key
   * 所有的value
   * */
  print(json1.length);
  print(json1.keys);
  print(json1.values);

  /**
   * 數(shù)組可以直接簡單轉(zhuǎn)Map
   * */
  var list = ['red', 'green', 'blue'];
  print(list.asMap());

Dart的運算符

  1. 賦值運算 ??=
  2. 條件表達式 ??

  /**
   * ??=
   * 如果a=nil 把a賦值
   * 如果a不為nil,則不賦值
   * nil不是0,a=0后續(xù)也不賦值
   * */
  var a;
  a ??= 10;
  print(a);
  a ??= 5;
  print(a);

  /**
   * ??
   * 如果a為nil,結(jié)果為b
   * 如果a不為nil,結(jié)果為a
   * */
  var b = 6;
  print(a ?? b);

Dart的方法

  1. Dart中的方法也是對象
  2. 方法的返回值和參數(shù)可以省略
  3. 當(dāng)方法的執(zhí)行語句只有一句的時候,可以使用箭頭函數(shù) => 表達式
  4. 可選參數(shù):傳遞參數(shù)的時候必須帶上形參的名字,可選參數(shù)的順序隨便
void function() => print(5);

int sum(int a, int b) {
  return a + b;
}

// 可以寫成下面方法,但是不建議這么寫
sum1(a, b) {
  return a + b;
}

// 箭頭函數(shù)是return,可以省去return
int sum2(int a, int b) => a + b;

/// 可選參數(shù)不能直接寫int,因為報錯,int不能為null。
/// 可以使用可選類型int?
/// 可選參數(shù)可以傳1個,2個,3個....隨便幾個都可以且前后位置隨意
sum3(int a, {int? b, var c}) {
  b ??= 0;
  c ??= 0;
  return a + b + c;
}

/// 可選參數(shù)可以設(shè)置默認(rèn)值
sum4(int a, {int b = 5, int c = 0}) {
  return a + b + c;
}

/// 按順序的可選參數(shù)
/// 可選參數(shù)必須按順序,按位置
sum5(int a, [int b = 5, int c = 0]) {
  return a + b + c;
}
  1. 函數(shù)作為參數(shù)傳遞
void main() {
  var hello = printHello;
  hello();

  var list = [1, 2, 3, 4];
  // list.forEach(print);

  forEachDemo(list, printElement);
}

int index = 0;
printElement(var a) {
  print('元素$index : $a');
  index++;
}

forEachDemo(List list, void func(var element)) {
  for (var e in list) func(e);
}

  1. 匿名方法:沒有方法名的方法
  var func = () {
    print('這是一個匿名方法');
  };
  func();

/// 立即執(zhí)行方法、函數(shù)
  () {
    print('這是個立即執(zhí)行方法');
  }();

/// 匿名方法作為參數(shù)
var i = 0;
  forEachDemo(list, (var a) {
    print('元素$i : $a');
    i++;
  });
  1. 閉包 closure
    定義在函數(shù)里面的函數(shù)就是閉包,閉包也是對象。
    閉包的作用:可以訪問外部函數(shù)的局部變量。
void closureDemo() {
  var fun = funA();
  fun();
  fun();
  fun();
  fun();
}

funA() {
  var count = 0;
  return () => print(count++); // 這個匿名函數(shù)就是一個閉包
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容