1.第一个世界级程序
main() {
print('Hello world!');
new TestClass().display();
}
Dart面向对象编程
Dart是一种面向对象的语言。面向对象是一种遵循真实世界建模的软件开发范例。面向对象将程序视为通过称为方法的机制相互通信的对象集合。
对象 - 对象是任何实体的实时表示。根据Grady Brooch,每个对象必须具有三个功能 -
1.状态 - 由对象的属性描述。
2.行为 - 描述对象的行为方式。
3.标识 - 将对象与一组类似此类对象区分开的唯一值。
类 - 类是创建对象的蓝图/模板,类封装了对象的数据。
方法 - 方法促进对象之间的通信。
class TestClass {
void display() {
print("Dart and Object Orientation");
}
void testFuc(){
print("和java语言是不是很像呀");
}
}
void main() {
TestClass c = new TestClass();
c.display();
new TestClass().testFuc();
}
数据类型
void test1 (){ //数据默认类型
int a ;
print(a); // null
String b ;
print(b); // null
var c ;
print(c); // null
}
void test2(){ // 数据类型推断 , swift相同
var a = 10;
if (a is int) {
print("int 类型");
}
var b = "hello world";
if (b is String) {
print("string 类型");
}
}
//数字类型
var x = 123;
var hex = 0xDEADBEEF;
// 小数,则为双精度数
var y = 1.199;
var exponents = 1.42e5;
从Dart 2.1开始,必要时整数文字会自动转换为双精度数:
double z = 10; // 相当于 double z = 10.0.
// String to number
void test3(){ // string to num
// String 转为 int
var one = int.parse('1');
assert(one == 1);
// String 转为 double
var dl = double.parse("1.12");
assert(dl == 1.12);
// int 转为 String
var str = 10.toString();
// double 转为 String
String dlStr = 3.14.toStringAsFixed(2);
assert(dlStr == '3.14');
}
void test4(){ // 位运算
var a = 3; // 0011
var b = a << 1; // 0110
print(b); // 6
var c = 3 >> 1; // 0001
print(c ); // 1
var m = 128;
var m1 = m << 3;
print(m1);
var n = 1;
var n1 = n >> 1;
print(n1);
}
void test5(){ // 文字数字是编译时常量。许多算术表达式也是编译时常量,只要它们的操作数是编译为数字的编译时常量。
const msPerSecond = 1000;
const secondsUntilRetry = 5;
const msUntilRetry = secondsUntilRetry * msPerSecond;
}
void test6(){ // String
//Dart字符串是一系列UTF-16代码单元。符文用于表示UTF-32代码单元序列
String str = "hello world"; // 声明
var str1 = "你好!";
String sum = str + str1;
String rep = "这是一个插入表达式---${str}";
String str2 = '单引号';
String str3 = '''
这是一个三引号的String
可以表达多行
这个swift的语法没有区别
''';
print(str3);
String os = r'In a raw string, not even \n gets special treatment.';//让转义字符不发生转义,即显示原始字符串,在引号前加上前缀r即可
print(os);//可以通过在前面加上r来创建“原始”字符串:
}
void test7(){
//文字字符串是编译时常量,只要任何插值表达式是一个编译时常量,其值为null或数值,字符串或布尔值都可以。
// 在 const 字符串中。
const aConstNum = 0;
const aConstBool = true;
const aConstString = 'a constant string';
// 不在 const 字符串中。
var aNum = 0;
var aBool = true;
var aString = 'a string';
const aConstList = [1, 2, 3];
const validConstString = '$aConstNum $aConstBool $aConstString';
print(validConstString);
}
list
void test8(){
var list = [1, 2, 3];
var list2 = [1,"2",3];
var list3 = [0,...list,...list2];
print(list3);
var list4;
var list5 = [0,...?list];
print(list4);//null
}
void test9(){
bool act = false;
var nav= ["Home","Furniture",'Plants',if (act) 'Outlet'];
print(nav);
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');
}
set
void test10(){
var names = <String>{};
Set<String> set = {};
names.add("name1");
names.addAll(set);
names.length;//数量
//要创建一个编译时常量的集合,请在set文字之前添加const
final consSet = const {
'1',
'2'
};
}
map
//dart 一切都是对象
void test11(){
// 直接赋值
var gifts = {
// Key: Value
'first': 'partridge',
'second': 'turtledoves',
'fifth': 'golden rings'
};
var nobleGases = {
2: 'helium',
10: 'neon',
18: 'argon',
};
// 构造
var gifts1 = Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases2 = Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
//一切操作参考JavaScript
// 常量
final consMap = const {
1:'1',
2:'2'
};
}
##变量
/*
1.Dart中的所有变量都存储对值的引用,而不是包含该值;
2.未初始化的变量的初始值为null。即使是具有数字类型的变量的初始值也是null,因为数字与Dart中的其他变量一样,它们都是对象.
3.声明没有未指定静态类型的变量则会隐式声明为 dynamic 。也可以使用dynamic关键字代替var关键字声明变量
4.final和const关键字用于声明常量。在Dart中不能修改使用final或const关键字声明变量的值。这些关键字可以与变量的数据类型一起使用,也可以与var关键字一起使用
5.const关键字用于表示编译时常量。使用const关键字声明的变量是隐式final。
6.只有const变量可用于计算编译时常量。编译时常量是常量,其值将在编译时确定。
*/
void test13(){
dynamic x = "tom";
print(x);
final String name = "110";
print(name);
const String name1 = "120";
print(name1);
const num = 12;
print(num);
const test = "abx";
print(test);
}
数字
void test14(){
// num类型被int和double类型继承;num 实现了Comparable 接口
// String to num
print(num.parse('12'));
print(num.parse("12.12"));
print(12.hashCode);
print('12'.hashCode);
print((-13).abs());
print((13.13).toInt());
print((14).toDouble());
}
String
isEmpty:如果此字符串为空,则返回true。
length:返回字符串的长度,包括空格,制表符和换行符。
compareTo():将此对象与另一对象进行比较
substring():返回此字符串的子字符串,字符串从startIndex(包括)延伸到endIndex,exclusive。
枚举
void test18(){
print(Status.values);
Status.values.forEach((val) => print('value:$val,index:${val.index}'));
}
}
enum Status {
connected,
connecting,
disConnected
}
函数
void test18(){
print(Status.values);
Status.values.forEach((val) => print('value:$val,index:${val.index}'));
}
test19(int a,String c){
print(a);
}
int test20(int b){
print(b);
return b;
}
//可选的位置参数
void test21(a,[a1,a2]){
print(a);
print(a1);
}
//可选的命名参数
test22(a,{a1,a2}){
print(a);
print(a1);
print(a2);
}
test23(a,{s1:12}){
print(a);
print(s1);
}
//Lambda函数是表示函数的简洁机制。这些函数也称为箭头函数。
int test24()=>123;
var num = ()=>(1234);
接口
接口定义任何实体必须遵守的语法。接口定义了一组对象可用的方法。Dart没有声明接口的语法。类声明本身就是Dart中的接口
类应该使用implements关键字来使用接口。实现类必须提供已实现接口的所有功能的具体实现。换句话说,类必须重新定义它希望实现的接口中的每个函数。
类
class Name {
String proName;
String get name_proName{
return 'get方法';
}
void set name_proName(String newVal){
this.proName = newVla;
}
Name(){//无参构造
}
Name(String newVla){//带参
this.proName = newVla;
}
Name.namedConst(String newVla) {
print("The name is : ${newVla}");
}
}
// Dart this super static override 继承都类似java语言
运算符
1.句点运算符(.)与对象一起使用以访问类的数据成员
2.级联(..)运算符可用于通过对象发出一系列调用。上述示例代码可以按以下方式重写。
Dart包
1.包是一种封装一组编程单元的机制。应用程序有时可能需要集成某些第三方库或插件。每种语言都有一种机制来管理外部软件包,如Maven或Gradle for Java,Nuget for .NET,npm for Node.js等。Dart的软件包管理器是`pub`。
2.Pub有助于在存储库中安装包。托管软件包的存储库可以在 [https://pub.dartlang.org/](https://pub.dartlang.org/)找到。
3.包元数据在文件`pubsec.yaml`中定义。YAML是Yet Another Markup Language的缩写。pub工具可用于下载应用程序所需的所有各种库。
4.每个Dart应用程序都有一个`pubspec.yaml`文件,其中包含对其他库的应用程序依赖性以及应用程序的元数据,如应用程序名称,作者,版本和描述。
5.`pubspec.yaml`文件的内容应该如下所示 -
typedef
//1.可用于指定希望特定函数匹配的函数签名。函数签名由函数的参数(包括其类型)定义。返回类型不是函数签名的一部分
typedef ManyOperatiuon(int firtNo,int secondNo);
Add(int firstNo,int second){
print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
print("Add result is ${firstNo/second}");
}
main(List<String> arguments) {
ManyOperatiuon oper;
oper = Add;
oper(10,20);
}
//实例2,也可以作为参数传递给函数
ypedef ManyOperatiuon(int firtNo,int secondNo);
Add(int firstNo,int second){
print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
print("Add result is ${firstNo/second}");
}
Calculator(int a,int b ,ManyOperatiuon oper){ //参数传递
print("Inside calculator");
oper(a,b);
}
main(List<String> arguments) {
ManyOperatiuon oper;
oper = Add;
oper(10,20);
Calculator(5,5,Add);
}
网友评论