1.windows上环境搭建
(1) 在dart官网上下载对应的sdk安装即可。
(2) 使用vscode开发,安装dart插件和Code Runner插件即可。
2.Dart的入口方法、打印、注释、常量、及变量
//1. 在dart中所用被执行的代码都得放在main方法中 // main() { // print("你好dart"); // } void main() { //表示main方法没有返回值 print("你好dart"); }
//2.常量及变量的定义 void main() { //变量命名和js基本一致 //(1)可以通过var定义变量,自动进行类型推断 var str = "sdfsdf"; str = "nvsdfdf"; print(str); var num = 1233; print(num); //(2)定义常量 //const 定义常量必须赋初始值,不能修改 const PI = 3.1416926; // final不仅有const在编译时常量的特性,最重要的时它是运行时的常量,并且final时惰性初始化 // 即运行时第一次使用才初始化 final time = new DateTime.now(); // ignore: unused_local_variable final h; h = 3; // h = 4;//报错,不能再次复制 print(time); }
3.dart中的常用的数据类型
1.Numbers(数值) int double 2.String(字符串) String 3.Booleans(布尔) bool 4.(数组) 在dart中,数组时列表对象,所以大多数的人称其未列表 5. Maps(字典) Map是一个键值对相关的对象,键和值可以时任意类型的对象
//1.字符串类型 void main() { //(1)var定义 var str = "sdfsdf"; print(str); //(2)通过String定义字符串 String str1 = "2dsfdsf"; print(str1); // (3) 多行字符串通过三引号 String str2 = """this is xiaoming this is xiaohong """; print(str2); //(4)字符串拼接 String str3 = "你好"; String str4 = "dart"; print('$str3 $str4'); print(str3 + str4); }
//2.数值类型 void main() { // (1)int必须是整型 int num = 1233; print(num); //(2)double可以是整型和浮点型 double num1 = 12.3; double num2 = 12; print(num1); print(num2); //(3)运算符和js一样+-*?% }
//3.Boolean类型 void main() { //1.bool类型 bool flag = false; flag = true; print(flag); }
//4.数组 void main() { //(1)定义数组, var list = ["张三", 20, true]; print(list); //(2)定义数组,指定类型 var arr = <String>["asdad", "fdggdfg"]; print(arr); //(3)定义数组,添加或移除数据 var arr1 = []; arr1.add("dsff"); arr1.add(23); print(arr1); print(arr1.length); //(4)移除 list.remove(20); print(list); //(5)创建固定长度的集合,不能修改长度 var arr2 = List<String>.filled(2, ""); arr2[0] = "张三"; arr2[1] = "李四"; // arr2.add("wanger");运行时会报错 print(arr2); }
//6.Map字典(对象) void main() { //1.定义Maps var person = { "name": "张三", "age": 20, 123: ["打篮球", "玩游戏"] }; print(person); //不能像JS用person.name print(person['name']); var p = new Map(); p["name"] = "李四"; p["age"] = 20; print(p); }
4.判断数据类型的方法
void main() { var str = "123"; if (str is String) { print("str是字符串类型"); } else { print("str是数字类型"); } }
5.算术运算符
void main() { int a = 26; int b = 13; print(a + b); //加 print(a - b); //减 print(a * b); //乘 print(a / b); //除 print(a % b); //取余 print(a ~/ b); //取整 }
6.关系运算符
void main() { int a = 5; int b = 3; print(a == b); //判断是否相等 false print(a != b); //判断是否不等 true print(a > b); //判断是否大于 print(a < b); //判断是否小于 print(a >= b); //判断是否大于等于 print(a <= b); //判断是否小于等于 }
7.逻辑运算符
void main() { bool flag = true; print(!flag); //取反 // && 并且:全为true为true否则为false //|| 或者:全为false值为false,否则为true }
8.赋值运算符
void main() { //1.赋值运算符 int a = 10; print(a); //b??=23 表示b为空的话把23赋值给b int b = 10; // b??23; print(b); // 2.复合赋值运算符 var c = 12; // c += 10; //表示c=c+10 // print(c);//22 c *= 3; //表示c=c*3 print(c); //36 }
9.条件运算符
// ignore_for_file: dead_code void main() { //1. if else switch case 和js一样用法 bool flag = true; if (flag) { print(true); } else { print(false); } //2.三目运算符 bool isShow = false; String c = isShow ? "2324" : "qweqe"; print(c); //3. ??运算符 var a; var b = a ?? 10; print(b); }
10.类型转换
void main() { //1.Number和Stirng类型之间的转换 //Number转换为String 用toString() //String转换为Number 用int.parse()或double.parse() String str = "123.2"; var num = double.parse(str); print(num is double); var myNum = 13; var str1 = myNum.toString(); print(str1 is String); //2.其他类型转换为bool类型 // isEmpty:判断字符串是否为空 var str2 = ""; if (str2.isEmpty) { print("str2为空"); } else { print("str2不为空"); } var count; if (count == null) { print("count为空"); } else { print("count非空"); } }
11.循环语句
void main() { //1.for循环和js一样 for (var i = 1; i <= 100; i++) { if (i % 2 == 0) { print(i); } } List arr = ["张三", "李四", "王五"]; for (var i = 0; i <= arr.length; i++) { print(arr[i]); } } //2.while void main() { //while先判断条件成立再执行 var i = 1; while (i <= 10) { print(i); i++; } //do while先执行一次再判断条件是否成立 do { print(i); i++; } while (i <= 10); }
12.数组的常用方法
void main() { //1.判断数组是否为空isEmpty、isNotEmpty List arr = ["苹果", "香蕉"]; print(arr.isEmpty); //false print(arr.isNotEmpty); //true //2.翻转数组reversed print(arr.reversed); //toList将其他类型转换为数组 print(arr.reversed.toList()); //List中的常用方法 List arr1 = ["苹果", "香蕉"]; //3.add增加一个 arr1.add("桃子"); //增加一个 print(arr1); //4.addAll增加多个 arr1.addAll(["芒果", "西瓜"]); // print(arr1); //5.indexOf和js一样 查找数据,没有返回-1 print(arr1.indexOf("sdf")); //6.remove删除数据 arr1.remove("西瓜"); arr1.removeAt(1); //根据索引删除 print(arr1); //7.修改数据fillRange List myList = ["苹果", "香蕉", "西瓜"]; myList.fillRange(1, 3, "qww"); print(myList); //8.插入一个数据insert myList.insert(1, "ddd"); print(myList); //9.插入多个insertAll myList.insertAll(1, ["芒果", "橘子"]); print(myList); //10.join和split和js一样 }
13.遍历数组的方法
// ignore_for_file: unused_local_variable void main() { List arr = ["苹果", "香蕉", "西瓜"]; //1.for in for (var item in arr) { print(item); } Map obj = {"name": "ewrwr", "age": 18}; //2.forEach arr.forEach((item) { print(item); }); List myList = [1, 2, 4]; //3.map var newList = myList.map((e) { return e * 2; }); print(newList.toList()); //4.where 返回满足条件的数据 List list = [1, 2, 4, 6, 7, 9, 13]; var newData = list.where((item) { return item > 4; }); print(newData); //6.any只要有一个满足条件返回true,类似js中some var f = list.any((value) { return value > 9; }); print(f);//7.every所有的满足条件返回true,否则返回false,类似js中every List arr1 = [3, 5, 7, 9, 12]; var res = arr1.every((item) => item > 4); print(res);
}
14.操作Map的方法
void main() { Map person = {"name": "张三", "age": 18}; //1.获取key 用keys print(person.keys.toList()); //2.获取value用values print(person.values.toList()); //3.判断是否为空isEmpty print(person.isEmpty); //4.添加属性addAll person.addAll({ "work": ["敲代码", "送外卖"], "height": 180 }); print(person); //5.删除remove person.remove("age"); print(person); //6.查看映射中存在的某个值containsValue print(person.containsValue("张三")); }
15.自定义方法
//1.命名方法 //返回值类型+方法名,不知道返回值类型可以不指定返回值类型 //全局方法 String getStr() { return "this is str"; } void main() { var str = getStr(); print(str); //局部方法 int getSum(int n) { var sum = 0; for (var i = 1; i <= n; i++) { sum += i; } return sum; } var data = getSum(100); print(data); //传入可选参数 String printUserInfo(String name, [age]) { if (age != null) { return "姓名:$name---年龄:$age"; } return "姓名:$name---年龄保密"; } print(printUserInfo("张三")); //默认参数 String printUserInfo1(String name, [String sex = "男"]) { return "姓名:$name--性别:$sex"; } print(printUserInfo1("张三", "女")); //2.匿名方法 var fn = () { print(122); }; fn(); //3.方法递归 var sum = 1; fn1(int n) { sum *= n; if (n == 1) { return; } fn1(n - 1); } fn1(5); print(sum); }
16.dart中定义类
//1.定义类,与js类似 class Person { String name = "张三"; int age = 18; void getInfo() { print("${this.name}---${this.age}"); } //修改类中shuxing void setInfo(int age) { this.age = age; } } void main() { // 实例化类 var p = new Person(); p.getInfo(); p.setInfo(28); p.getInfo(); }
17.dart中构造函数
//类中构造函数 //late 延迟初始化值 class Person1 { late String name; late int age; //(1)默认构造函数与类名相同 Person1(String name, int age) { this.name = name; this.age = age; } //(2)默认构造函数的简写 // Person1(this.name, this.age); //(3)命名构造函数,可以写多个 Person1.now() { print("我是命名构造函数"); } void getInfo() { print("${this.name}---${this.age}"); } } void main() { //默认构造函数的实例化 var p1 = new Person1("王二", 25); p1.getInfo(); var p2 = new Person1("李四", 15); p2.getInfo(); //命名构造函数的调用 var p3 = new Person1.now(); }
18.类中的模块化和私有属性
//类的模块化 import "lib/Animal.dart"; void main() { //模块化实例化 var a = new Animal("小狗", 3); // print(a._name);// 不能访问私有属性 print(a.age); print(a.getName()); }
19.类中的getter和setter
class Rect { late num height; late num width; Rect(this.height, this.width); // area() { // return this.height * this.width; // } //使用get定义方法,类似计算属性 get area { return this.height * this.width; } set areaHeight(value) { this.height = value; } } void main() { var r = new Rect(10, 2); // print(r.area()); print(r.area); //调用时直接通过访问属性的方式来访问 r.areaHeight = 6; print(r.area); //调用时直接通过访问属性的方式来访问 }
20.类中的静态方法和静态属性
//在前面加上static来声明静态属性和方法 class Person { static String name = "张三"; static int age = 15; String work = "码农"; static void show() { //静态属性直接访问,不需要加this print(name); } void printInfo() { //非静态方法可以访问静态成员 print(age); show(); } static void getUserInfo() { // print(this.work);//静态方法没法访问非静态属性 // this.printInfo(); //静态方法没法访问非静态方法 } } void main() { //静态方法和属性直接通过类来访问 // print(Person.name); // Person.show(); var p = new Person(); p.printInfo(); }
21.对象操作符
class Person { String name; int age; Person(this.name, this.age); void getInfo() { print("${this.name}---${this.age}"); } } void main() { //1.条件运算符 ? var p; p?.getInfo(); // var p = new Person("张三",18); // p.getInfo(); //2.类型判断 is var p1 = new Person("张三", 18); if (p1 is Person) { p1.name = "李四"; } p1.getInfo(); //3.类型转换 as var p2 = ""; p2 = new Person("张三", 18) as String; //级联符 .. var p3 = new Person("李四", 23); // p3.name = "王二"; // p3.age = 40; // p3.getInfo(); //可以简化为 p3 ..name = "李四" ..age = 30 ..getInfo(); }
22.类的继承
class Person { String name; int age; Person(this.name, this.age); void getInfo() { print("${this.name}---${this.age}"); } void work() { print("work"); } } // 通过extends关键字来继承 class Son extends Person { late String sex; //通过super传父类中的参数 Son(super.name, super.age, sex) { this.sex = sex; } //覆写赋值中的方法 @override getInfo() { print("${this.name}---${this.age}--${this.sex}"); } run() { // super.work(); this.work(); } } void main() { Son s = new Son("张三", 30, "男"); s.getInfo(); s.run(); }
23.抽象类和接口
//1.抽象类的定义 abstract class Animal { eat(); //抽象方法:定义方法没有方法体,而是在子类中实现 } class Dog extends Animal { @override eat() { //必须要实现抽象类中的方法 print("小狗爱吃骨头"); } } //2.dart中没有interface,而是通过抽象类来实现接口的 abstract class Db { late String url; add(String data); } abstract class Methods { late String methods; } //通过implements来实现接口,可以实现多个接口 class Mysql implements Db, Methods { String url; String methods; Mysql(this.url, this.methods); @override add(String data) { print("add方法$data---${this.methods}"); } } void main() { var d = new Dog(); d.eat(); // var a = new Animal();抽象类不能实例化 var mysql = new Mysql("127.1.0.1", "POST"); mysql.add("dsfsdf"); }
标签:基本,name,void,dart,var,使用,print,main,String From: https://www.cnblogs.com/chenxian123m/p/mn123.html