Dart编程语言入门

应用场景:

  1. Web开发
  2. 跨平台移动应用开发(flutter)
  3. 脚本或服务端开发

开发环境搭建:

SDK安装:

Window平台: choco install dart-sdk

Linux平台: sudo apt-get install dart

Mac平台: brew tap dart-lang/dart 然后 brew install dart --devel

node: 在mac上我进行手动安装的

IDE安装:

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

Dart语言入门

dart一切都是对象

Hello World

  1. main方法是固定写法,它是程序入口
  2. print方法可以在控制台输出内容
  3. 通过文件选择run,可以运行文件中的main方法
//Main 程序入口
void main(){
    //控制台打印
    print("Hello World!");
}

变量

  1. 使用var声明变量,可复制不同类型的值

  2. 未初始化时,默认为null

  3. 使用final声明一个只能赋值一次的变量

        var a;
        print(a);
    
        a = 10;
        print(a);
    
        a = 'Hello Dart';
        print(a);
    
        var b = 20;
        print(b);
    
        final c = 30;
        //c = "Dart";//给c赋值打印会报错
    

常量

  1. 使用const声明常量

     const d = 20;
        // d = 50;//给d赋值打印会报错
    

数据类型

内置类型:

  1. 数值型-Number

    ​ 整形-Int

    ​ 浮点型-double

  2. 字符串-String

  3. 布尔型-Boolean

  4. 列表-List

  5. 键值对-Map

  6. Runes、Symbols(不常用)

数值型操作:

  1. 运算符: +、-、*、/、~/取整、%取余

  2. 常用属性: isNaN是否是非数字、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);//是否是偶数
      print(bb.isOdd);//是否是奇数
    
      int dd = -100;
      print(dd.abs());//取绝对值
    
      double ee = 10.5;
      print(ee.round());//四舍五入
      print(ee.floor());//不大于ee的最接近ee的整数
      print(ee.ceil());//不小于ee的最接近ee的整数
    
      print(bb.toDouble());//整形转浮点型
      print(ee.toInt());//浮点型转整形
    

字符串-String

  1. 使用单引号,双引号创建字符串
  2. 使用三个引号或双引号创建多行字符串
  3. 使用r创建原始raw字符串
  String str1 = 'hello';// "" 
  String str2 = ''' hello
                    Dart''';//'''
  print(str2);
  String str3 = 'hello \n Dart';
  print(str3);

  String str4 = r'hello \n Dart';//打印原始内容,不转意
  print(str4);

字符串操作:

  1. 运算符:+、*、==、[]
  2. 插值表达式: ${expression}
  3. 常用属性: length、isEmpty、isNotEmpty
  String str5 = "This is my favorite language";
  print(str5 + "New");//加
  print(str5 * 5);//乘
  print(str4 == str5);//判断两个str3和str4是否相等
  print(str5[0]);//输出:0

  int aaa = 1;
  int bbb = 2;
  print("aaa + bbb = ${aaa + bbb}");//(插值表达式)输出: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() //大小写转换
  5. trim(),trimLeft(),trimRight() //截取前后的空格
  6. split(),replaceXXX() //分割字符串 + 替换
  print(str5.contains("Tiis"));//str5是否包含"This"字符
  print(str5.substring(0,3));//截取str5第0个字符到第3个字符
  print(str5.startsWith("a"));//str5是否以字母a开头
  print(str5.endsWith("e"));//str5是否以字母e结尾

  var list = str5.split(" ");//str5以字符空格分割成数组
  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( 数组)创建

  1. 创建List: var list = [1,2,3];
  2. 创建不可变的List: var list = const[1,2,3];
  3. 构造创建:var list = new List();
  ///List数组
  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的创建

List-常用操作

  1. [],length
  2. add(),insert()
  3. remove(),clear()
  4. indexOf(),lastIndexOf()
  5. sort(),sublist()
  6. shuffle()数组打乱顺序,asMap(),forEach()
  var list4 = ["hello","dart"];
  print(list4.length);//数组元素个数
  list4.add("new");//数组添加元素
  print(list4);
  list4.insert(1,"java");//插入java字符到数组1位置
  print(list4);
  list4.remove("java");//数组移除java字符
  print(list4);

  // list4.clear();//数组清空元素
  // print(list4);

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

  print(list4.sublist(1));//截取从第二个元素开始
  list4.forEach(print);//对数组的每个元素执行一次提供的函数(传入函数作为参数)

Map-创建

  1. 创建Map:var language = {'first':'Dart','second':'Java'};

  2. 创建不可变Map:var language = const{'first':'Dart','second':'Java'};

  3. 构造创建: 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是否包含某个key
      print(map.containsValue("C"));//map是否包含某个值
      map.remove("third");//移除third对应的值
      print(map);
      map.forEach(f);//给每个值增加f方法
      var listMap = ["1","2","3"];//list转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);

运算符

算术运算符

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

关系运算符

  1. 运算符: ==,!=,>,<,>=,<=
  2. 判断内容是否相同使用==

逻辑运算符

  1. 运算符: !,&&,||
  2. 针对布尔类型运算
/// 逻辑运算符
   bool isTrue = true;
   print(!isTrue);

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

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

赋值运算符

  1. 基础运算符: =,??=
  2. 复合运算符: +=,-=,*=,/=,%=,~/=
/// 赋值运算符
   double acc = 10;
   int bcc;
   bcc ??= 10;//如果bcc值为空,则bcc=10
   print(bcc);
  
   acc /= 2;//复合运算的一个例子
   print(acc);

条件表达式

  1. 三目运算符: condition ? expr1 : expr2
  2. ??运算符: expr1 ?? expr2
   int gender = 0;
   String strcc = gender == 0 ? "Male=$gender" : "Female=$gender";//三目运算符
   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("优秀");
}else if (score > 60) {
  print("良好");
}else if (score == 60) {
  print("及格");
}else {
  print("不及格");
}

循环语句

  1. for循环
  2. for...in循环
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循环
  2. do...while循环
/// while语句
int countff = 0;
while (countff<5) {
  print(countff ++);
}

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

do {//先执行do语句再执行while里面的判断
  print(countff--);
} while (countff > 0 && countff<5);

break和continue

  1. 终止循环: break
  2. 跳出当前循环: continue
var listgg = [1,2,3];
for (var item in listgg) {
  if (item == 2) {
    //break;
    continue;//跳出当前循环,继续执行下个循环
  }
  print(item);
}
print("-------------");
for (var item1 in listgg) {
  for (var item2 in listgg) {
    if (item2==5) {
      break;//break是终止它所在的for循环(离它最近的for循环)
    }
    print(item2);
  }
}

switch…case语句

  1. 比较类型: num,String,编译期常量,对象,枚举
  2. 非空case必须有一个break
  3. default处理默认情况
  4. continue跳转标签
/// 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;//跳转到Testgg标签去执行操作
    // break;
  case "Java":
    print("Java is my favorite");
    break;
  Testgg:
  case "Python":
    print("Python is my favorite");
    break;
  default:
    print("None");
}

方法

方法定义

返回类型 方法名 (参数1, 参数2,....) {

​ 方法体...

​ return 返回值

}

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

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

方法特性

  1. 方法也是对象,并且有具体类型Function
  2. 返回值类型、参数类型都可以省略
  3. 箭头语法: =>expr 是{return expr;}缩写.只适用于一个表达式
  4. 方法都有返回值.如果没有指定,默认return null最后一句执行
String getPerson(String name,int age){
  return "name = $name,age=$age";
}
getPersonJX(name,age) => "name=$name,age=$age";//箭头函数简写上面函数

int gender = 1;
getPrentJX2(name,age) => gender == 1 ? "name=$name,age=$age" : "test";//箭头函数加表达式

void canNotGetPerson(String name,int age){//无返回值类型
  print("name=$name,age=$age");
}
printPerson(name,age){//方法简写
  print("name=$name,age=$age");
}

可选参数

  1. 可选命名参数:{param1,param2,...}
  2. 可选位置参数:[param1,param2,...]
  3. 如果存在具体参数,可选参数声明,必须在参数后面
void main() {
//可选命名参数
  newPerson("小强");
  newPerson("小红",age:20);
  newPerson("小红",age:20,gender: "Male");
  //可选位置参数
  newPerson2("小绿",18,"Male");
}

newPerson(String name,{int age,String gender}){//基于命名可选参数(多用)
  print("name=$name,age=$age,gender=$gender");
}
newPerson2(String name,[int age,String gender]){//基于位置可选参数
  print("name=$name,age=$age,gender=$gender");
}

默认参数值

  1. 使用 = 在可选参数指定默认值
  2. 默认值只能是编译时常量
newDefault(String name,{int age,String gender = "Female"}){//默认参数值
  print("name=$name,age=$age,gender=$gender");
}

方法对象

  1. 方法可以作为对象赋值给其他变量
  2. 方法可作为参数传递给其它方法
void main() {
//方法作为对象
  var func = printHello;
  func();
  Function func2 = printHello;
  func2();

  //方法作为函数参数使用
  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;
}

匿名方法

(参数1,参数2,...) {

​ 方法体...

​ return 返回值

}

匿名方法特性

  1. 可赋值给变量,通过变量进行调用
  2. 可在其它方法中直接调用或传递给其它方法
void main() { 
  //匿名函数
  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. 闭包是一个方法(对象)
  2. 闭包定义在其它方法内部
  3. 闭包能够访问外部方法内的局部变量,并持有其状态
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++);
  };
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容