TOC
参考:https://www.imooc.com/learn/1035
概述
- Dart是Google发布的一门开源编程语言
- Dart初期目标是成为下一代的web开发语言
- Dart目前已可用于全平台开发
- Dart是一门面向对象的编程语言
应用场景
- Web开发
- 跨平台移动应用开发( Fltter )
- 脚本或服务端开发
版本
Dart1.x为稳定版本
Dart2.x目前为开发版本
案例:
hello_world.dart
//Main程序入口
void main(){
//控制台打印
print("Hello World!");
}
- main方法是固定写法,它是程序入口
- print方法可以在控制台输出内容
- 通过文件选择run ,可以运行文件中的main方法
数据类型
变量
- 使用var声明变量,可赋予不同类型的值
var a=12;
- 未初始化时,默认值为null
- 使用final声明一个只能赋值一次的变量
final c=30
var
类似于JavaScript中的var ,它可以接收任何类型的变量,但最大的不同是Dart中var变量一旦赋值,类型便会确定,则不能再改变其类型
var t;
t = "hi world";
// 下面代码在dart中会报错,因为变量t的类型已经确定为String,
// 类型一旦确定后则不能再更改其类型。
t = 1000;
dynamic和Object
-
Object 是Dart所有对象的根基类,也就是说所有类型都是Object 的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object 声明的对象.
-
dynamic 与var 一样都是关键词,声明的变量可以赋值任意对象。
-
dynamic 与Object ,声明的变量可以在后期改变赋值类型。
-
dynamic 声明的对象编译器会提供所有可能的组合, 而Object 声明的对象只能使用Object的属性与方法, 否则编译器会报错。
dynamic t;
Object x;
t = "hi world";
x = 'Hello Object';
//下面代码没有问题
t = 1000;
x = 1000;
dynamic a;
Object b;
main() {
a = "";
b = "";
printLengths();
}
printLengths() {
// no warning
print(a.length);
// warning:
// The getter 'length' is not defined for the class 'Object'
print(b.length);//只能使用Object类型默认的属性和方法,子类的不能使用了
}
//变量a不会报错, 变量b编译器会报错
常量final和const
- 一个
final 变量只能被设置一次.
-
const 变量是一个编译时常量(编译的时候就初始化了--定义的时候就要初始化).
-
final 变量在第一次使用时被初始化。
- 被
final 或者const 修饰的变量,变量类型可以省略
//可以省略String这个类型声明
final str = "hi world";
//final String str = "hi world";
const str1 = "hi world";//定义的时候就要初始化
//const String str1 = "hi world";
数值型
- 数值型-Number
- 字符串-String
- 布尔型-Boolean
- 列表-List
- 键值对-Map
- Runes/Symbols(基本不用)
数值型num
类型:
数值型操作
- 运算符:+、-、*、/、~/(取整)、%
- 常用属性: isNaN(是否是非数字),isEven(是否是偶数),isOdd(是否是奇数)等
- 常用方法:
- abs(),取绝对值。
- round(), 四舍五入。
- floor()、向下取整。
- ceil(),向上取整。
- toInt()、
- toDouble()
void main(){
//num是数值类型,因此可以设置整数和浮点数。
num a = 10;
a = 12.5;
//是整数,仅仅只能复制为整数,不能设置古典色。
int b = 20;
// b = 20.5;
//浮点数不能设置整数。
double c = 10.5;
// c = 30;
print(b + c);//30.5
print(b - c);//9.5
print(b * c);//210.0
print(b / c);//1.9047619047619047
print(b ~/ c);//1
print(b % c);//9.5
print(0.0 / 0.0);//NaN 0.0/0.0非数字,其他都是数字
print(b.isEven);//true
print(b.isOdd);//false
int d = 11;
print(d.isEven);//false
print(d.isOdd);//true
int e = -100;
print(e.abs());//100
double f = 10.3;
print(f.round());//10
print(f.floor());//10
print(f.ceil());//11
print(f.toInt());//10,取整
print(d.toDouble());//11.0,向上取整,获取为小数
}
字符串(String)
创建
- 使用单引号,双引号创建字符串
- 使用三个引号或双引号创建多行字符串
- 使用r创建始raw字符串
操作:
- 运算符:+、*、==、[]
- 插值表达式:
$(lexpression} (字符串中表达式)
- 常用属性: length, isEmpty, isNotEmpty
- 常用方法:
- contains()
- subString()
- startsWith(),
- endsWith()
- indexOf(),
- lastIndexOf()
- toLowerCase(),
- toUpperCase()
trim(),
- trimLeft(),
- trimRight()
split(),
- replacexXX()
void main(){
String str1 = 'Hello';//""
//```设置多行
String str2 = '''Hello
Dart''';//"""
print(str2);
//Hello
// Dart
String stra = 'Hello \n Dart';//单引号\n会换行
print(stra);
//Hello
// Dart
String str3 = r'Hello \n Dart';//r开头,\n等会是字符创
print(str3);
//Hello \n Dart
String str4 = "This is my favorite language";
print(str4 + "New");//This is my favorite languageNew
print(str4 * 2);//复制2遍 This is my favorite languageThis is my favorite language
print(str3 == str4);//false
print(str4[1]);//h
int a = 1;
int b = 2;
print("a + b = ${a + b}");//a + b = 3
print("a = $a");//只有一个字符,可以省略{} a = 1
print(str4.length);//28
print(str4.isEmpty);//false
print(str4.contains("This"));//true
print(str4.substring(0,3));//Thi
print(str4.startsWith("a"));//false
print(str4.endsWith("ge"));//true
var list = str4.split(" ");//[This, is, my, favorite, language]
print(list);
print(str4.replaceAll("This", "That"));//That is my favorite language
}
布尔型bool
布尔值只有true和false
bool isTrue = true;
bool isFalse = false;
print("Hello".isEmpty);//false
列表List(数组)
创建
- 创建List :
var list = [1, 2, 3];
- 创建不可变的List :
var list = const [1, 2, 3];
- 构造创建:
var list = new List(); 也可以定义固定类型的var list = new List<String>();
常用操作:
- [],length
- indexOf(),lastIndexOf()
- add(),insert()
- sort()排序,sublist()
- remove(),clear()
- shuffle()打乱,asMap()转map,forEach()
- 倒序
- 修改值
fillRange(s,e,value)
-
join("字符串") ,以字符串分割,转为字符串
split("字符串")
void main(){
var list1 = [1,2,3,"Dart",true];//[1, 2, 3, Dart, true]
print(list1);
print(list1[2]);//3
list1[1] = "Hello";//[1, Hello, 3, Dart, true]
print(list1);
var list2 = const [1,2,3];
// list2[0] = 5;
var list3 = new List();
var list = ["hello","dart"];
print(list.length);//2
list.add("New");//[hello, dart, New]
print(list);
list.insert(1, "Java");//[hello, Java, dart, New]
print(list);
list.remove("Java");//[hello, dart, New]
print(list);
// list.clear(); //[]
// print(list);
print(list.indexOf("dart1"));//-1
list.sort();
print(list);//[New, dart, hello],按照字母牌,大写字母比小写字母小
print(list.sublist(1));//[dart, hello]
list.forEach(print);
//New
//dart
//hello
list=list.reversed.toList();//只调用reversed方法会是(1,2,3),不是list
list.fillRange(1,3,"aa");
//将list的下表为[1,3)的值都改为"aa"
}
Map
创建
var language = {first': 'Dart' 'second': Java' };
- 创建不可变Map:
var language = const { 'first': 'Dart','second":'Java'};
- 构造创建:
var language = new Map();
void main(){
//创建法1
var map1 = {"first":"Dart",1:true,true:"2"};
print(map1);//{first: Dart, 1: true, true: 2}
print(map1["first"]);//Dart
print(map1[true]);//2
map1[1] = false;
print(map1);//{first: Dart, 1: false, true: 2}
var map2 = const {1:"Dart",2:"Java"};
// map2[1] = "Python";//不能改变值
var map3 = new Map();
var map = {"first":"Dart","second":"Java","third":"Python"};
print(map.length);//3
// map.isEmpty;
print(map.keys);//(first, second, third)(是list)
print(map.values);//(Dart, Java, Python)
print(map.containsKey("first"));//true
print(map.containsValue("C"));//false
map.remove("third");
print(map);//{first: Dart, second: Java}
map.forEach(f);//forEach遍历每一个字段,f调用f方法,传入key,value;
//key=first,value=Dart
//key=second,value=Java
var list = ["1","2","3"];
print(list.asMap());//{0: 1, 1: 2, 2: 3} //转map是 下标:value
}
void f(key,value){
print("key=$key,value=$value");//${} 简写
}
dynamic动态类型
使用var 定义一个字段,字段类型可以随便变换,其实,var定义的就是一个dynamic 类型
void main(){
var a;
a = 10;
a = "Dart";
dynamic b = 20;//定义,动态类型
b = "JavaScript";
var list = new List<dynamic>();
list.add(1);
list.add("hello");
list.add(true);
print(list);
}
运算符
算术运算符
- 加减乘除,取整取余:
+,-,*, /,~/,%
- 递增递减:
++var, var++,--var, var--
void main(){
int a = 10;
int b = 2;
print(a + b);//12
print(a - b);//8
print(a * b);//20
print(a / b);//5.0
print(a ~/ b);//5
print(a % b);//0
print(a++);//10
print(++a);//12
print(a--);//12
print(--a);//10
}
关系运算符
- 运算符:
==,!=, >, <,>=,<=
-
判断内容是否相同使用
==
判断对象不适合
void main(){
int a = 5;
int b = 3;
print(a == b);//false
print(a !=b );//true
print(a > b);//true
print(a < b);//false
print(a >= b);//true
print(a <= b);//false
String strA = "123";
String strB = "123";
print(strA == strB);//true
strB = "123 ";
print(strA == strB);//false
}
逻辑运算符
void main(){
bool isTrue = true;
print(!isTrue);//false
bool isFalse = false;
print(isTrue && isFalse);//false
print(isTrue || isFalse);//true
String str = "";
print(str.isEmpty);//true isEmpty空字符串
|
请发表评论