Dart語(yǔ)法(一)

Dart的安裝

  1. 下載Dart SDK,注意此處需要梯子
  2. 根據(jù)路徑配置環(huán)境變量

工具的配置

學(xué)習(xí)Dart語(yǔ)法的時(shí)候,選擇的是VSCode作為編輯器

VSCode的需要安裝的插件:
Dart、Flutter、Code Runner(方便運(yùn)行調(diào)試)
安裝完Code Runner后,可以通過右擊然后選擇run code執(zhí)行代碼;


右擊

也可以通過點(diǎn)擊右上角執(zhí)行代碼


右上角

Dart語(yǔ)法學(xué)習(xí)

  • Dart的入口函數(shù)
main(List<String> args) {
  //coding
}
  • print - 輸出內(nèi)容
print("Hello World!");
  • 定義變量
  1. 明確聲明
String name = 'who';
name = 'hanmmm';
//name = 12; 錯(cuò)誤,將一個(gè)int值賦值給一個(gè)String變量
  1. 類型推導(dǎo)
    2.1 聲明常量
final height = 1.85;

const address = '廣州市';

注: final和const的區(qū)別:
final可以通過計(jì)算/函數(shù)獲取一個(gè)值(可以運(yùn)行期間來(lái)確定一個(gè)值)
const必須賦值 常量值(編譯期間需要一個(gè)確定的值)
2.2 聲明變量

var age = 20;

注意:其中identical判斷兩個(gè)對(duì)象是否為同一個(gè)對(duì)象

main(List<String> args) {
  //通過final定義的p1和p2不是一個(gè)對(duì)象
  final p1 = Person("lmf");
  final p2 = Person("lmf");
  print(identical(p1, p2));

  //const放在賦值語(yǔ)句的右邊,可以共享對(duì)象,提高性能
  //通過const定義的p1和p2是同一個(gè)對(duì)象
  const p3 = Student('haha');
  const p4 = Student('haha');
  print(identical(p3, p4));
}

class Person {
  String name;
  Person(String name) {
    this.name = name;
  }
} 

  class Student {
    final String name;
    const Student(this.name);
  }
  1. dynamic - 如果需要為變量賦值不同類型的值,可以使用dynamic,開發(fā)中不推薦使用
dynamic sex = 'man';
print(sex.runtimeType);

sex = 12;
print(sex.runtimeType);
  • 布爾類型
  bool flag = true;
  // var flag = 'abc'; 錯(cuò)誤,Dart中不能判斷非0即真, 或者非空即真
  if(flag) {
  print('為真');
  • 字符串類型
    定義字符串 - 使用''、“”、‘’‘’‘’,其中三引號(hào)可以表示多行字符串
  var str1 = 'abc';
  var str2 = "def";
  var str3 = '''
  abc
  cba
  nba
  ''';
print(str1+'\n'+str2+'\n'+str3);

字符串的拼接 - 使用${expression},如果表達(dá)式是一個(gè)標(biāo)識(shí)符,可以省略{}

var name = "who";
var age = 18;
var height = 1.78;

//強(qiáng)調(diào): ${變量},那么{}可以省略;表達(dá)式不可以
var msg1 = "my name is ${name}, age is ${age}, height is ${height}";
var msg2 = "name is $name, type is ${name.runtimeType}";
print(msg1);
print(msg2);
  • 集合類型
  1. List - 有序的
 var names = ["abc", "cba", "nba", "abc"];
  print(names);
  1. Set - 無(wú)序的、不可重復(fù)的
 var movies = {"大話西游", "哪咋傳奇"};
  print(Set<String>.from(names).toList());
  1. Map - 字典類型
  var info = {
    "name": "lilei",
    "age": 18
  };
  • 函數(shù)
  1. 箭頭函數(shù) - 只有一行代碼的,可以使用箭頭函數(shù)表示
// int sum(int num1, int num2) {
//   return num1+num2;
// }

int sum(int num1, int num2) => num1+num2;
  1. 參數(shù)
main(List<String> args) {
  sayHello("lilei");

  sayHello2("lilei", 18, 1.88);

  sayHello3('leilei', height:2.02, age:18);
}

//1.1 必選參數(shù):必須傳
void sayHello(String name) {
  print(name);
}

//1.2 可選參數(shù):位置可選參數(shù) 、命名可選參數(shù) 
//注:可選參數(shù)可以有默認(rèn)值
//1.2.1 位置可選參數(shù):[int age, double height]
//實(shí)參和形參在進(jìn)行匹配是,是根據(jù)位置匹配
void sayHello2(String name, [int age = 10, double height]) {
  print(name);
}
//1.2.2 命名可選參數(shù) :{int age, double height}
void sayHello3(String name, {int age = 18, double height}) {

}
  • 函數(shù)可以作為返回值、參數(shù)
main(List<String> args) {
  test(bar);

  //匿名函數(shù)
  test((){
    print("匿名函數(shù)被執(zhí)行");
  });

  //箭頭函數(shù) 函數(shù)體只有一行代碼
  test(()=> print("箭頭函數(shù)被調(diào)用"));

  //指定函數(shù)類型
  test2((num1, num2) {
    return num1+num2;
  });

//通過typedef定義函數(shù)類型
  test3((num1, num2) {
    return num1+num2;
  });

  var foo = demo();
  print(foo(20, 30));
}

void test(Function foo) {
  foo();
}

void bar() {
  print("bar函數(shù)被調(diào)用");
}

void test2(int foo(int num1, int num2)) {
  print(foo(20, 30));
}

typedef Calculate = int Function(int num1, int num2);
void test3(Calculate foo) {
  print(foo(20, 40));
}

Calculate demo() {
  return (int a, int b) {
    return a*b;
  };
}

生活如此美好,今天就點(diǎn)到為止。。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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