一、 VSCode配置
VSCode编写Dart需要安装的3个插件
二、 Hello Dart
在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 变量名称 = 赋值;
一、var
runtimeType用于获取变量当前的类型
var name = '哈哈';
name = 'abc';
print(name);
var age = 18;
//是错误的 不能将String赋值给一个int类型
age = 'abc';//报错
二、dynamic
使用dynamic来声明变量,可以改变变量的类型,会带来潜在的危险。在实际开发中通常情况下不使用dynamic.
dynamic定义的变量编译的时候不会类型检查.
dynamic name = '哈哈';
print(name.runtimeType); // String
name = 20;
print(name.runtimeType); // int
dynamic abc;
/// abcddd 方法没有定义,不会类型检查。调用时没有报错,运行的时候会报错。
abc.abcddd();
三、const和final
final和const都是用于定义常量的, 也就是定义之后值都不可以修改
final name = '哈哈';
name = 'abc'; // 错误做法
const age = 20;
age = 15; // 错误做法
final和const有什么区别呢?
●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
一、List 、Set
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
// 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)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙(HarmonyOS NEXT)最新学习路线
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开发入门教学视频》
《鸿蒙生态应用开发V2.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
●ArkTS语言
●安装DevEco Studio
●运用你的第一个ArkTS应用
●ArkUI声明式UI开发
.……
《鸿蒙开发进阶》
●Stage模型入门
●网络管理
●数据管理
●电话服务
●分布式应用开发
●通知与窗口管理
●多媒体技术
●安全技能
●任务管理
●WebGL
●国际化开发
●应用测试
●DFX面向未来设计
●鸿蒙系统移植和裁剪定制
……
《鸿蒙进阶实战》
●ArkTS实践
●UIAbility应用
●网络案例
……