Object val = 18;
print(“val = $val”);
val = “bruce”;
print(“val = $val”);
val = 3.5;
print(“val = $val”);
输出结果为
value = 18
value = bruce
value = 3.5
val = 18
val = bruce
val = 3.5
变量的默认值
由于前文关于Dart的一些概念中说到过,能够放在变量中的所有内容都是对象,所以如果一个变量没有初始化值,那它的默认值就为null。
int value1;
print(“value1 = $value1”);
bool value2;
print(“value2 = $value2”);
var value3;
print(“value3 = $value3”);
dynamic value4;
print(“value4 = $value4”);
输出结果为
value1 = null
value2 = null
value3 = null
value4 = null
final 和 const
如果不打算更改变量,可以使用final或者const。一个final变量只能被设置一次,而const变量是编译时常量,定义时必须赋值。
// Person类
class Person {
static const desc = “This is a Person class”; //必须定义时赋值,否则编译时报错
final name;
Person(this.name); //对象初始化时赋值一次
}
// 定义一个Person对象
Person p = Person(“Bruce”); //创建对象时设置一次name
print(“p.name = ${p.name}”); //可正常输出 p.name = Bruce
p.name = “haha”; //编译器报错
内置类型
Dart语言支持以下类型
- numbers
包含int和double两种类型,没有像Java中的float类型,int和double都是num的子类型。
- strings
Dart的字符串是一系列UTF-16代码单元。创建方法如下:
String str1 = “hello”; //可以使用单引号或双引号
print(“str1 = $str1”);
String str2 = “”“Hi,Bruce
This is Xiaoming.
“””; //使用带有单引号或双引号的三重引号可以创建多行字符串
print(“str2 = $str2”);
输出结果为
str1 = hello
str2 = Hi,Bruce
This is Xiaoming.
- booleans
Dart有一个名为bool的类型,只有两个对象具有bool类型:true和false,他们都是编译时常量。
- lists
和其他编程语言常见的集合一样,Dart中使用的集合是数组或有序的对象组。Dart中数组是List对象。
List arr = [“Bruce”, “Nick”, “John”];
print(“arr = $arr”);
- maps
Map map = {
“name”: “Bruce”,
“age”: 18,
“high”: 1.70
};
print(“map = $map”);
print(“map[‘name’] = ${map[‘name’]}”);
var map1 = {
1: “hi”,
2: “hello”,
3: “yep”
};
print(“map1 = $map1”);
print(“map1[1] = ${map1[1]}”);
输出结果为
map = {name: Bruce, age: 18, high: 1.7}
map[‘name’] = Bruce
map1 = {1: hi, 2: hello, 3: yep}
map1[1] = hi
- runes
符文是字符串的UTF-32代码点。在字符串中表示32位Unicode值需要特殊语法,常用方法是 \uXXXX,其中XXXX是4位十六进制值,比如小心心(♥)是\u2665
。要指定多于或少于4个十六进制数字,请将值放在大括号中。 比如,微笑(😆)是\u{1f600}
。
String smile = ‘\u{1f600}’;
print(“微笑:$smile”);
Runes input = new Runes(
‘\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}’);
print(String.fromCharCodes(input));
输出结果为
微笑:😀
♥ 😅 😎 👻 🖖 👍
函数
Dart是一种真正的面向对象语言,因此即使是函数也是对象并且具有类型Function。这意味着函数可以分配给变量或作为参数传递给其他函数。
定义方法
和绝大多数编程语言一样,Dart函数通常的定义方式为
String getName() {
return “Bruce”;
}
如果函数体中只包含一个表达式,则可以使用简写语法
String getName() => “Bruce”;
可选参数
Dart函数可以设置可选参数,可以使用命名参数也可以使用位置参数。
命名参数,定义格式如 {param1, param2, …}
// 函数定义
void showDesc({var name, var age}) {
if(name != null) {
print(“name = $name”);
}
if(age != null) {
print(“age = $age”);
}
}
// 函数调用
showDesc(name: “Bruce”);
// 输出结果
name = Bruce
位置参数,使用 [] 来标记可选参数。
// 函数定义
void showDesc(var name, [var age]) {
print(“name = $name”);
if(age != null) {
print(“age = $age”);
}
}
// 函数调用
showDesc(“Bruce”);
// 输出结果
name = Bruce
默认值
函数的可选参数也可以使用 = 设置默认值
// 函数定义
void showDesc(var name, [var age = 18]) {
print(“name = $name”);
if(age != null) {
print(“age = $age”);
}
}
// 函数调用
showDesc(“Bruce”);
// 输出结果
name = Bruce
age = 18
main函数
和其他编程语言一样,Dart中每个应用程序都必须有一个顶级main()函数,该函数作为应用程序的入口点。
函数作为参数
Dart中的函数可以作为另一个函数的参数。
// 函数定义
void println(String name) {
print(“name = $name”);
}
void showDesc(var name, Function log) {
log(name);
}
// 函数调用
showDesc(“Bruce”, println);
// 输出结果
name = Bruce
匿名函数
// 函数定义
void showDesc(var name, Function log) {
log(name);
}
// 函数调用,匿名函数作为参数
showDesc(“Bruce”, (name) {
print(“name = $name”);
});
// 输出结果
name = Bruce
嵌套函数
Dart支持嵌套函数,也就是函数中可以定义函数。
// 函数定义
void showDesc(var name) {
print(“That is a nested function!”);
//函数中定义函数
void println(var name) {
print(“name = $name”);
}
println(name);
}
// 函数调用
showDesc(“Bruce”);
// 输出结果
That is a nested function!
name = Bruce
运算符
Dart中使用到的运算符如下表格
Description | Operator |
---|---|
一元后缀 | expr++ expr-- () [] . ?. |
一元前缀 | -expr !expr ~expr ++expr --expr |
乘除操作 | * / % ~/ |
加减操作 | + - |
移位 | << >> |
按位与 | & |
按位异或 | ^ |
按位或 | ` |
比较关系和类型判断 | >= > <= < as is is! |
等判断 | == != |
逻辑与 | && |
逻辑或 | ` |
是否null | ?? |
条件语句操作 | expr1 ? expr2 : expr3 |
级联操作 | .. |
分配赋值操作 | = *= /= ~/= %= += -= <<= >>= &= ^= ` |
下面就对一些对于Java或Objective-C来说未使用过的运算符通过代码来做个介绍。
?.
的使用
//定义类
class Person {
var name;
Person(this.name);
}
// 调用
Person p;
var name = p?.name; //先判断p是否为null,如果是,则name为null;如果否,则返回p.name值
print(“name = $name”);
// 输出结果
name = null
~/
的使用
// 代码语句
var num = 10;
var result = num ~/ 3; //得出一个小于等于(num/3)的最大整数
print(“result = $result”);
// 输出结果
result = 3
as
的使用,as用来做类型转化
// 类定义
class Banana {
var weight;
Banana(this.weight);
}
class Apple {
var weight;
Apple(this.weight);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
24年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-LQriZPpE-1710931719502)]
[外链图片转存中…(img-v1r0USzK-1710931719503)]
[外链图片转存中…(img-5hMPOrTJ-1710931719503)]
[外链图片转存中…(img-o0AQGzhp-1710931719504)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-ee3RiCAo-1710931719504)]