赞
踩
VSCode编写Dart需要安装的3个插件
在VSCode中新建一个helloWorld.dart文件,添加下面的内容:
main(List<String> args) {
print('Hello Word');
}
然后在运行dart helloWorld.dart,就能看到Hello World的结果了。
程序分析
●一、Dart语言的入口也是main函数,并且必须显示的进行定义;
●二、Dart的入口函数main是没有返回值的;
●三、传递给main的命令行参数,是通过List完成的。
○从字面值就可以理解List是Dart中的集合类型。
○其中的每一个String都表示传递给main的一个参数;
●四、定义字符串的时候,可以使用单引号或双引号;
●五、每行语句必须使用分号结尾,很多语言并不需要分号,比如Swift、JavaScript;
明确声明变量的方式, 格式如下:
变量类型 变量名称 = 赋值;
// 字符串
String name = '哈哈';
// 整数
int age = 18;
// 小数
double height = 1.88;
类型推导声明变量的方式, 格式如下:
var/dynamic/const/final 变量名称 = 赋值;
runtimeType用于获取变量当前的类型
var name = '哈哈';
name = 'abc';
print(name);
var age = 18;
//是错误的 不能将String赋值给一个int类型
age = 'abc';//报错
使用dynamic来声明变量,可以改变变量的类型,会带来潜在的危险。在实际开发中通常情况下不使用dynamic.
dynamic定义的变量编译的时候不会类型检查.
dynamic name = '哈哈';
print(name.runtimeType); // String
name = 20;
print(name.runtimeType); // int
dynamic abc;
/// abcddd 方法没有定义,不会类型检查。调用时没有报错,运行的时候会报错。
abc.abcddd();
final和const都是用于定义常量的, 也就是定义之后值都不可以修改
final name = '哈哈';
name = 'abc'; // 错误做法
const age = 20;
age = 15; // 错误做法
●const在赋值时, 赋值的内容必须是在编译期间就确定下来的
●final在赋值时, 可以动态获取, 比如赋值一个函数
String getName() {
return '哈哈';
}
main(List<String> args) {
const name = getName(); // 错误的做法, 因为要执行函数才能获取到值
final name = getName(); // 正确的做法
}
// int
int age = 19;
int hexAge = 0x12;
print(age);
print(hexAge);
//Double
double height = 1.88;
print(height);
字符串和数字之间的转化
// 字符串转数字
var one = int.parse('22');
var two = double.parse('23.33');
print('$one ${one.runtimeType}'); //22 int
print('$two ${two.runtimeType}'); 23.33 double
//数字转字符串
var num1 = 125;
var num2 = 124.32346;
var numStr = num1.toString();
var numStr2 = num2.toString();
var numStr3 = num2.toStringAsFixed(2);//保留两位小数
布尔类型中,Dart提供了一个bool的类型, 取值为true和false
注意: Dart中不能判断非0即真, 或者非空即真
var isBool = true;
print('$isBool, ${isBool.runtimeType}'); // true, bool
Dart字符串是UTF-16编码单元的序列。您可以使用单引号或双引号创建一个字符串:
// 1.定义字符串的方式
var s1 = 'Hello World';
var s2 = "Hello Dart";
var s3 = 'Hello\'Fullter';
var s4 = "Hello\'Fullter";
可以使用三个单引号或者双引号表示多行字符串:
// 2.表示多行字符串的方式
var message1 = '''哈哈哈
呵呵呵
嘿嘿嘿''';
字符串和其他变量或表达式拼接: 使用${expression}, 如果表达式是一个标识符, 那么{}可以省略
//3.拼接其他变量
var name = 'coderwhy';
var age = 18;
var height = 1.88;
print('my name is ${name}, age is $age, height is $height');
对于集合类型,Dart则内置了最常用的三种:List / Set / Map
Set和List最大的两个不同就是:Set是无序的,并且元素是不重复的。
var str = ['a', 'b', 'c'];
// [a, b, c] List<String>
print('$str ${str.runtimeType}');
//获取长度
print(str.length);
//明确类型
List<int> numbers = [1, 2, 4, 5];
// [1, 2, 4, 5] List<int>
print('$numbers ${numbers.runtimeType}');
print(numbers.length);
var strSet = {'a', 'b', 'c'};
// {a, bc} _Set<String>
print('$strSet ${strSet.runtimeType}');
print(strSet.length);
Set<int> numSet = {1, 3, 4, 6};
// {1, 3, 4, 6},_Set<int>
print('$numSet ${numSet.runtimeType}');
print(numSet.length);
// 添加/删除/包含元素
numbers.add(5);
numbersSet.add(5);
print('$numbers $numbersSet');
numbers.remove(1);
numbersSet.remove(1);
print('$numbers $numbersSet');
print(numbers.contains(2));
print(numbersSet.contains(2));
// List根据index删除元素
numbers.removeAt(3);
print('$numbers');
// Map的定义
// 1.使用类型推导定义
var infoMap1 = {'name': '哈哈', 'age': 18};
print('$infoMap1 ${infoMap1.runtimeType}');
// 2.明确指定类型
Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
print('$infoMap2 ${infoMap2.runtimeType}');
print(infoMap1.length);
由于它有key和value,因此无论是读取值,还是操作,都要明确是基于key的,还是基于value的,或者是基于key/value对的
// 根据key print(infoMap1['name']); //获取所有的entries (MapEntry(name: 哈哈), MapEntry(age: 18)) print(infoMap1.entries); //获取所有的keys print(infoMap1.keys); //获取所有的values print(infoMap1.values); //判断是否包括key if (infoMap1.containsKey('name')) { print("包含name"); } else { print('不包含name'); } if (infoMap1.containsValue('哈哈')) { print('包含哈哈'); } else { print("不包含哈哈"); } //删除 infoMap1.remove('age');
Dart是一种真正的面向对象语言,所以即使函数也是对象,所有也有类型, 类型就是Function。
这也就意味着函数可以作为变量定义或者作为其他函数的参数或者返回值.
函数的定义方式:
返回值 函数的名称(参数列表) {
函数体 return 返回值
}
//例
int sum(num num1, num num2) {
return num1 + num2;
}
Effective Dart建议对公共的API, 使用类型注解, 但是如果我们省略掉了类型, 依然是可以正常工作的
sum(num1, num2) {
return num1 + num2;
}
另外, 如果函数中只有一个表达式, 那么可以使用箭头语法(arrow syntax)
●注意, 这里面只能是一个表达式, 不能是一个语句
sum(num1, num2) => num1 + num2;
函数的参数可以分成两类: 必须参数和可选参数
前面使用的参数都是必须参数.
可选参数可以分为 命名可选参数 和 位置可选参数
定义方式:
命名可选参数: {param1, param2, ...}
位置可选参数: [param1, param2, ...]
定义的命名可选参数
printInfo(String name, {int age = 0, double height = 1.1}) {
print('name=$name age = $age ,height=$height');
}
printInfo('哈哈');
printInfo("哈哈", age: 15);
printInfo('哈哈', height: 1.2);
printInfo("哈哈", age: 30, height: 3.5);
位置可选参数
printInfo2(String name, [int age = 0, double height = 0.0]) {
print('name=$name age=$age height=$height');
}
printInfo2('why'); // name=why age=0 height=0
printInfo2('why', 18); // name=why age=18 height=0
printInfo2('why', 18, 1.88); // name=why age=18 height=1.88
枚举在开发中也非常常见, 枚举也是一种特殊的类, 通常用于表示固定数量的常量值。
枚举使用enum关键字来进行定义:
枚举类型中有两个比较常见的属性:
●index: 用于表示每个枚举常量的索引, 从0开始.
●values: 包含每个枚举值的List.
enum Colors { red, green, blue }
main(List<String> args) {
print(Colors.red); // Colors.red
print(Colors.values); // [Colors.red, Colors.green, Colors.blue]
print(Colors.red.index); // 0
print(Colors.red.runtimeType); // Colors
}
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
OpenHarmony北向、南向开发环境搭建
●ArkTS语言
●安装DevEco Studio
●运用你的第一个ArkTS应用
●ArkUI声明式UI开发
.……
●Stage模型入门
●网络管理
●数据管理
●电话服务
●分布式应用开发
●通知与窗口管理
●多媒体技术
●安全技能
●任务管理
●WebGL
●国际化开发
●应用测试
●DFX面向未来设计
●鸿蒙系统移植和裁剪定制
……
●ArkTS实践
●UIAbility应用
●网络案例
……
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。