Dart編程語言入門

應(yīng)用場(chǎng)景:

  1. Web開發(fā)
  2. 跨平臺(tái)移動(dòng)應(yīng)用開發(fā)(flutter)
  3. 腳本或服務(wù)端開發(fā)

開發(fā)環(huán)境搭建:

SDK安裝:

Window平臺(tái): choco install dart-sdk

Linux平臺(tái): sudo apt-get install dart

Mac平臺(tái): brew tap dart-lang/dart 然后 brew install dart --devel

node: 在mac上我進(jìn)行手動(dòng)安裝的

IDE安裝:

node: 我用的vscode,安裝拓展Dart2.22.3和Code Runner

Dart語言入門

dart一切都是對(duì)象

Hello World

  1. main方法是固定寫法,它是程序入口
  2. print方法可以在控制臺(tái)輸出內(nèi)容
  3. 通過文件選擇run,可以運(yùn)行文件中的main方法
//Main 程序入口
void main(){
    //控制臺(tái)打印
    print("Hello World!");
}

變量

  1. 使用var聲明變量,可復(fù)制不同類型的值

  2. 未初始化時(shí),默認(rèn)為null

  3. 使用final聲明一個(gè)只能賦值一次的變量

        var a;
        print(a);
    
        a = 10;
        print(a);
    
        a = 'Hello Dart';
        print(a);
    
        var b = 20;
        print(b);
    
        final c = 30;
        //c = "Dart";//給c賦值打印會(huì)報(bào)錯(cuò)
    

常量

  1. 使用const聲明常量

     const d = 20;
        // d = 50;//給d賦值打印會(huì)報(bào)錯(cuò)
    

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

內(nèi)置類型:

  1. 數(shù)值型-Number

    ? 整形-Int

    ? 浮點(diǎn)型-double

  2. 字符串-String

  3. 布爾型-Boolean

  4. 列表-List

  5. 鍵值對(duì)-Map

  6. Runes、Symbols(不常用)

數(shù)值型操作:

  1. 運(yùn)算符: +、-、*、/、~/取整、%取余

  2. 常用屬性: isNaN是否是非數(shù)字、isEven、isOdd等

  3. 常用方法: abs()、round()、floor()、ceil()、toInt()、toDouble()

      num aa = 10;
      aa = 12.5;
    
      int bb = 20;
      // bb = 20.5;
    
      double cc = 10.5;
      cc = 30;
      print(bb + cc);
      print(bb - cc);
      print(bb * cc);
      print(bb / cc);
      print(bb ~/ cc);//取整
      print(bb % cc);// 取余
    
      print(bb.isEven);//是否是偶數(shù)
      print(bb.isOdd);//是否是奇數(shù)
    
      int dd = -100;
      print(dd.abs());//取絕對(duì)值
    
      double ee = 10.5;
      print(ee.round());//四舍五入
      print(ee.floor());//不大于ee的最接近ee的整數(shù)
      print(ee.ceil());//不小于ee的最接近ee的整數(shù)
    
      print(bb.toDouble());//整形轉(zhuǎn)浮點(diǎn)型
      print(ee.toInt());//浮點(diǎn)型轉(zhuǎn)整形
    

字符串-String

  1. 使用單引號(hào),雙引號(hào)創(chuàng)建字符串
  2. 使用三個(gè)引號(hào)或雙引號(hào)創(chuàng)建多行字符串
  3. 使用r創(chuàng)建原始raw字符串
  String str1 = 'hello';// "" 
  String str2 = ''' hello
                    Dart''';//'''
  print(str2);
  String str3 = 'hello \n Dart';
  print(str3);

  String str4 = r'hello \n Dart';//打印原始內(nèi)容,不轉(zhuǎn)意
  print(str4);

字符串操作:

  1. 運(yùn)算符:+、*、==、[]
  2. 插值表達(dá)式: ${expression}
  3. 常用屬性: length、isEmpty、isNotEmpty
  String str5 = "This is my favorite language";
  print(str5 + "New");//加
  print(str5 * 5);//乘
  print(str4 == str5);//判斷兩個(gè)str3和str4是否相等
  print(str5[0]);//輸出:0

  int aaa = 1;
  int bbb = 2;
  print("aaa + bbb = ${aaa + bbb}");//(插值表達(dá)式)輸出:aaa + bbb = 3

  print(str5.length);//str5的長度
  print(str5.isEmpty);//判斷str5是否為空
  print(str5.isNotEmpty);//判斷是否不為空

字符串常用方法:

  1. contains(),subString()
  2. startsWith(),endsWith()
  3. indexOf(),lastIndexOf() //取字符串下表
  4. toLowerCase(),toUpperCase() //大小寫轉(zhuǎn)換
  5. trim(),trimLeft(),trimRight() //截取前后的空格
  6. split(),replaceXXX() //分割字符串 + 替換
  print(str5.contains("Tiis"));//str5是否包含"This"字符
  print(str5.substring(0,3));//截取str5第0個(gè)字符到第3個(gè)字符
  print(str5.startsWith("a"));//str5是否以字母a開頭
  print(str5.endsWith("e"));//str5是否以字母e結(jié)尾

  var list = str5.split(" ");//str5以字符空格分割成數(shù)組
  print(list);//輸出: [This, is, my, favorite, language]
  
  print(str5.replaceAll("This","That"));//將str5中的This字符替換為That

布爾型-bool

  1. 使用bool表示布爾類型
  2. 布爾值只有true和false
  bool isTrue = true;
  bool isFalse = false;
  print("Hello".isEmpty);

List( 數(shù)組)創(chuàng)建

  1. 創(chuàng)建List: var list = [1,2,3];
  2. 創(chuàng)建不可變的List: var list = const[1,2,3];
  3. 構(gòu)造創(chuàng)建:var list = new List();
  ///List數(shù)組
  var list1 = [1,"Dart",true];
  print(list1);
  print(list1[1]);
  list[1] = "Hello";
  print(list1);

  var list2 = const [1,2,3];
  // list2[0] = 5;

  var list3 = new List();//list的創(chuàng)建

List-常用操作

  1. [],length
  2. add(),insert()
  3. remove(),clear()
  4. indexOf(),lastIndexOf()
  5. sort(),sublist()
  6. shuffle()數(shù)組打亂順序,asMap(),forEach()
  var list4 = ["hello","dart"];
  print(list4.length);//數(shù)組元素個(gè)數(shù)
  list4.add("new");//數(shù)組添加元素
  print(list4);
  list4.insert(1,"java");//插入java字符到數(shù)組1位置
  print(list4);
  list4.remove("java");//數(shù)組移除java字符
  print(list4);

  // list4.clear();//數(shù)組清空元素
  // print(list4);

  print(list4.indexOf("dart"));//如果找到的話,返回元素所在的位置;找不到的話,會(huì)返回-1
  list4.sort();//排序
  print(list4);

  print(list4.sublist(1));//截取從第二個(gè)元素開始
  list4.forEach(print);//對(duì)數(shù)組的每個(gè)元素執(zhí)行一次提供的函數(shù)(傳入函數(shù)作為參數(shù))

Map-創(chuàng)建

  1. 創(chuàng)建Map:var language = {'first':'Dart','second':'Java'};

  2. 創(chuàng)建不可變Map:var language = const{'first':'Dart','second':'Java'};

  3. 構(gòu)造創(chuàng)建: var language = new Map();

  4.   var map1 = {"first":"dart",1:true};
      print(map1);
      print(map1["first"]);
      print(map1[1]);
      map1[1] =false;
      print(map1);
         
      var map2 =const{1:"Dart",2:"java"};
      // map2[1] = "python";//不能給不可變Map賦值
         
      var map3 = new Map()
    

Map-常用操作

  1. [],length
  2. isEmpty(),isNotEmpty()
  3. Keys,values
  4. containsKey(),containsValue()
  5. remove()
  6. forEach()
    void main() {
      var map = {"first":"dart","second":"java","third":"python"};
      print(map.length);
      // map.isEmpty;
      print(map.keys);//打印所有map的key
      print(map.values);//打印所有map的值
      print(map.containsKey("first"));//map是否包含某個(gè)key
      print(map.containsValue("C"));//map是否包含某個(gè)值
      map.remove("third");//移除third對(duì)應(yīng)的值
      print(map);
      map.forEach(f);//給每個(gè)值增加f方法
      var listMap = ["1","2","3"];//list轉(zhuǎn)Map
      print(listMap.asMap());
    }
    void f(key,value){
      print("key=$key,value=$value");
    }
    

dynamic

/// dynamic 指任意類型
  dynamic bcde = 20;
  bcde = "JavaScript";

  var listW =new List<dynamic>();//泛型
  listW.add(1);
  listW.add("hello");
  listW.add(true);
  print(listW);

運(yùn)算符

算術(shù)運(yùn)算符

  1. 加減乘除: +,-,*,/,~/,%
  2. 遞增遞減: ++var,var++,--var,var--

關(guān)系運(yùn)算符

  1. 運(yùn)算符: ==,!=,>,<,>=,<=
  2. 判斷內(nèi)容是否相同使用==

邏輯運(yùn)算符

  1. 運(yùn)算符: !,&&,||
  2. 針對(duì)布爾類型運(yùn)算
/// 邏輯運(yùn)算符
   bool isTrue = true;
   print(!isTrue);

   bool isFalse =false;
   print(isTrue && isFalse);
   print(isTrue || isFalse);

   String str = "";
   print(!str.isEmpty);

賦值運(yùn)算符

  1. 基礎(chǔ)運(yùn)算符: =,??=
  2. 復(fù)合運(yùn)算符: +=,-=,*=,/=,%=,~/=
/// 賦值運(yùn)算符
   double acc = 10;
   int bcc;
   bcc ??= 10;//如果bcc值為空,則bcc=10
   print(bcc);
  
   acc /= 2;//復(fù)合運(yùn)算的一個(gè)例子
   print(acc);

條件表達(dá)式

  1. 三目運(yùn)算符: condition ? expr1 : expr2
  2. ??運(yùn)算符: expr1 ?? expr2
   int gender = 0;
   String strcc = gender == 0 ? "Male=$gender" : "Female=$gender";//三目運(yùn)算符
   print(strcc);

   String aee ;
   String bee = "Java";
   String cee = aee ?? bee;//如果aee為空就等于bee
   print(cee);

控制流語句

條件語句

  1. if語句
  2. if...else if語句
  3. if...else if…else語句
int score = 90;
if (score >= 90) {
  print("優(yōu)秀");
}else if (score > 60) {
  print("良好");
}else if (score == 60) {
  print("及格");
}else {
  print("不及格");
}

循環(huán)語句

  1. for循環(huán)
  2. for...in循環(huán)
var listff = [1,2,3,4,5];
for (var i = 0; i < listff.length; i++) {
  print(listff[i]);
}
for (var item in listff) {
  print(item);
}

while語句

  1. while循環(huán)
  2. do...while循環(huán)
/// while語句
int countff = 0;
while (countff<5) {
  print(countff ++);
}

print("--$countff----");

do {//先執(zhí)行do語句再執(zhí)行while里面的判斷
  print(countff--);
} while (countff > 0 && countff<5);

break和continue

  1. 終止循環(huán): break
  2. 跳出當(dāng)前循環(huán): continue
var listgg = [1,2,3];
for (var item in listgg) {
  if (item == 2) {
    //break;
    continue;//跳出當(dāng)前循環(huán),繼續(xù)執(zhí)行下個(gè)循環(huán)
  }
  print(item);
}
print("-------------");
for (var item1 in listgg) {
  for (var item2 in listgg) {
    if (item2==5) {
      break;//break是終止它所在的for循環(huán)(離它最近的for循環(huán))
    }
    print(item2);
  }
}

switch…case語句

  1. 比較類型: num,String,編譯期常量,對(duì)象,枚舉
  2. 非空case必須有一個(gè)break
  3. default處理默認(rèn)情況
  4. continue跳轉(zhuǎn)標(biāo)簽
/// switch...case語句
String languagegg = "Dart";
switch (languagegg) {
  case "Dart":
    print("Dart is my favorite");
    break;
  case "Java":
    print("Java is my favorite");
    break;
  case "Python":
    print("Python is my favorite");
    break;
  default:
    print("None");
}

switch (languagegg) {
  case "Dart":
    print("Dart is my favorite");
    continue Testgg;//跳轉(zhuǎn)到Testgg標(biāo)簽去執(zhí)行操作
    // break;
  case "Java":
    print("Java is my favorite");
    break;
  Testgg:
  case "Python":
    print("Python is my favorite");
    break;
  default:
    print("None");
}

方法

方法定義

返回類型 方法名 (參數(shù)1, 參數(shù)2,....) {

? 方法體...

? return 返回值

}

void main() {
/// 方法
  print(getPerson("張三", 18)); 
}

void f(key,value){
  print("key=$key,value=$value");
}

方法特性

  1. 方法也是對(duì)象,并且有具體類型Function
  2. 返回值類型、參數(shù)類型都可以省略
  3. 箭頭語法: =>expr 是{return expr;}縮寫.只適用于一個(gè)表達(dá)式
  4. 方法都有返回值.如果沒有指定,默認(rèn)return null最后一句執(zhí)行
String getPerson(String name,int age){
  return "name = $name,age=$age";
}
getPersonJX(name,age) => "name=$name,age=$age";//箭頭函數(shù)簡(jiǎn)寫上面函數(shù)

int gender = 1;
getPrentJX2(name,age) => gender == 1 ? "name=$name,age=$age" : "test";//箭頭函數(shù)加表達(dá)式

void canNotGetPerson(String name,int age){//無返回值類型
  print("name=$name,age=$age");
}
printPerson(name,age){//方法簡(jiǎn)寫
  print("name=$name,age=$age");
}

可選參數(shù)

  1. 可選命名參數(shù):{param1,param2,...}
  2. 可選位置參數(shù):[param1,param2,...]
  3. 如果存在具體參數(shù),可選參數(shù)聲明,必須在參數(shù)后面
void main() {
//可選命名參數(shù)
  newPerson("小強(qiáng)");
  newPerson("小紅",age:20);
  newPerson("小紅",age:20,gender: "Male");
  //可選位置參數(shù)
  newPerson2("小綠",18,"Male");
}

newPerson(String name,{int age,String gender}){//基于命名可選參數(shù)(多用)
  print("name=$name,age=$age,gender=$gender");
}
newPerson2(String name,[int age,String gender]){//基于位置可選參數(shù)
  print("name=$name,age=$age,gender=$gender");
}

默認(rèn)參數(shù)值

  1. 使用 = 在可選參數(shù)指定默認(rèn)值
  2. 默認(rèn)值只能是編譯時(shí)常量
newDefault(String name,{int age,String gender = "Female"}){//默認(rèn)參數(shù)值
  print("name=$name,age=$age,gender=$gender");
}

方法對(duì)象

  1. 方法可以作為對(duì)象賦值給其他變量
  2. 方法可作為參數(shù)傳遞給其它方法
void main() {
//方法作為對(duì)象
  var func = printHello;
  func();
  Function func2 = printHello;
  func2();

  //方法作為函數(shù)參數(shù)使用
  var listhh = [1,2,3,4];
  listhh.forEach(print);

  var listii = ["h","e","l","l","0"];
  print(listTimes(listii,times));
}

void printHello() {
  print("hello");
}

List listTimes(List list,String t(str)){
  for (var i = 0; i < list.length; i++) {
    list[i] =t(list[i]);
  }
  return list;
}
String times(str){
  return str*3;
}

匿名方法

(參數(shù)1,參數(shù)2,...) {

? 方法體...

? return 返回值

}

匿名方法特性

  1. 可賦值給變量,通過變量進(jìn)行調(diào)用
  2. 可在其它方法中直接調(diào)用或傳遞給其它方法
void main() { 
  //匿名函數(shù)
  var funcii = (str){
    print("hello---$str");
  };
  funcii(30);

  // ((){
  //   print("Test");
  // })();

  var listll = ["h","e","l","l","o"];
  var result = listTimes(listll, (str){return str * 3;});
  print(result);
}

List listTimes(List list,String t(str)){
  for (var i = 0; i < list.length; i++) {
    list[i] =t(list[i]);
  }
  return list;
}

閉包

  1. 閉包是一個(gè)方法(對(duì)象)
  2. 閉包定義在其它方法內(nèi)部
  3. 閉包能夠訪問外部方法內(nèi)的局部變量,并持有其狀態(tài)
void main() {
///閉包
  var funcmm =ann();
  funcmm();
  funcmm();
  funcmm();
  funcmm();
}

amm(){
  int count = 0;

  printCount(){
    print(count++);
  }
  return printCount;
}
ann(){
  int count = 0;

  // printCount(){
  //   print(count++);
  // }
  return (){
    print(count++);
  };
}
?著作權(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ù)。

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

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